private static int GetVarBindValue()

in Source/Tx.Network/Snmp/Asn1DecoderExtensions.cs [193:279]


        private static int GetVarBindValue(byte[] bytes, int offset, int length, Asn1TagInfo tagInfo, out object value)
        {
            if (tagInfo.Asn1TagType == Asn1Tag.NotAsn1Data)
            {
                switch (tagInfo.Asn1SnmpTagType)
                {
                    case Asn1SnmpTag.IpAddress:
                        {
                            value = ReadIPAddress(bytes, offset);
                            break;
                        }

                    case Asn1SnmpTag.Counter:
                        {
                            value = ReadUnsignedInteger(bytes, offset, length);
                            break;
                        }

                    case Asn1SnmpTag.Counter64:
                        {
                            value = ReadUnsignedLong(bytes, offset, length);
                            break;
                        }

                    case Asn1SnmpTag.Gauge:
                        {
                            value = ReadUnsignedInteger(bytes, offset, length);
                            break;
                        }

                    case Asn1SnmpTag.UInt32:
                        {
                            value = ReadUnsignedInteger(bytes, offset, length);
                            break;
                        }

                    case Asn1SnmpTag.TimeTicks:
                        {
                            value = ReadUnsignedInteger(bytes, offset, length);
                            break;
                        }

                    default:
                        {
                            value = "NYI: " + tagInfo.Asn1SnmpTagType.ToString();
                            break;
                        }
                }
            }
            else
            {
                switch (tagInfo.Asn1TagType)
                {
                    case Asn1Tag.Null:
                        {
                            value = null;
                            break;
                        }

                    case Asn1Tag.Integer:
                        {
                            value = ReadLongInteger(bytes, offset, length);
                            break;
                        }

                    case Asn1Tag.OctetString:
                        {
                            value = ReadOctetString(bytes, offset, length);
                            break;
                        }

                    case Asn1Tag.ObjectIdentifier:
                        {
                            value = new ObjectIdentifier(bytes.ReadOids(offset, length));
                            break;
                        }

                    default:
                        {
                            value = "NYI: " + tagInfo.Asn1TagType.ToString();
                            break;
                        }
                }
            }

            return offset + length;
        }