Method: NETSNMP::Varbind#convert_to_asn

Defined in:
lib/netsnmp/varbind.rb

#convert_to_asn(typ, value) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/netsnmp/varbind.rb', line 75

def convert_to_asn(typ, value)
  asn_type = typ
  asn_val = value
  if typ.is_a?(Symbol)
    asn_type = case typ
               when :ipaddress then 0
               when :counter32
                 asn_val = [value].pack("N*")
                 asn_val = asn_val[1..-1] while asn_val[0] == "\x00".b && asn_val[1].unpack1("B") != "1"
                 1
               when :gauge
                 asn_val = [value].pack("N*")
                 asn_val = asn_val[1..-1] while asn_val[0] == "\x00".b && asn_val[1].unpack1("B") != "1"
                 2
               when :timetick
                 return Timetick.new(value).to_asn
               when :opaque then 4
               when :nsap then 5
               when :counter64
                 asn_val = [
                   (value >> 96) & 0xFFFFFFFF,
                   (value >> 64) & 0xFFFFFFFF,
                   (value >> 32) & 0xFFFFFFFF,
                   value & 0xFFFFFFFF
                 ].pack("NNNN")
                 asn_val = asn_val[1..-1] while asn_val.start_with?("\x00")
                 6
               when :uinteger then 7
               else
                 raise Error, "#{typ}: unsupported application type"
               end
  end
  OpenSSL::ASN1::ASN1Data.new(asn_val, asn_type, :APPLICATION)
end