// convertClass converts the encoding of values in SNMP response from // "custom" class to the corresponding "universal" class, thus enabling // use of the asn1 parser from the encoding/asn1 package. func convertClass(v *asn1.RawValue) { if v.Class != 1 { // Not a custom type. return } switch v.Tag { case 0, 4: // IpAddress ::= [APPLICATION 0] IMPLICIT OCTET STRING (SIZE (4)) // Opaque ::= [APPLICATION 4] IMPLICIT OCTET STRING v.FullBytes[0] = 0x04 v.Class = 0 v.Tag = 4 case 1, 2, 3, 6: // Counter32 ::= [APPLICATION 1] IMPLICIT INTEGER (0..4294967295) // Unsigned32 ::= [APPLICATION 2] IMPLICIT INTEGER (0..4294967295) // TimeTicks ::= [APPLICATION 3] IMPLICIT INTEGER (0..4294967295) // Counter64 ::= [APPLICATION 6] IMPLICIT INTEGER (0..18446744073709551615) v.FullBytes[0] = 0x02 v.Class = 0 v.Tag = 2 } }