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;
}