Class: NETSNMP::Varbind
- Inherits:
-
Object
- Object
- NETSNMP::Varbind
- Defined in:
- lib/netsnmp/varbind.rb
Overview
Abstracts the PDU variable structure into a ruby object
Instance Attribute Summary collapse
-
#oid ⇒ Object
readonly
Returns the value of attribute oid.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Instance Method Summary collapse
- #convert_application_asn(asn) ⇒ Object
- #convert_to_asn(typ, value) ⇒ Object
- #convert_val(asn_value) ⇒ Object
-
#initialize(oid, value: nil, type: nil, **_opts) ⇒ Varbind
constructor
A new instance of Varbind.
- #to_asn ⇒ Object
- #to_der ⇒ Object
- #to_s ⇒ Object
Constructor Details
Instance Attribute Details
#oid ⇒ Object (readonly)
Returns the value of attribute oid.
7 8 9 |
# File 'lib/netsnmp/varbind.rb', line 7 def oid @oid end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
7 8 9 |
# File 'lib/netsnmp/varbind.rb', line 7 def value @value end |
Instance Method Details
#convert_application_asn(asn) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/netsnmp/varbind.rb', line 103 def convert_application_asn(asn) case asn.tag when 0 # IP Address IPAddr.new_ntoh(asn.value) when 1, # ASN counter 32 2 # gauge val = asn.value val.prepend("\x00") while val.bytesize < 4 asn.value.unpack("N*")[0] || 0 when 3 # timeticks Timetick.new(asn.value.unpack("N*")[0] || 0) # when 4 # opaque # when 5 # NSAP # when 6 # ASN Counter 64 # when 7 # ASN UInteger end end |
#convert_to_asn(typ, value) ⇒ Object
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 |
# File 'lib/netsnmp/varbind.rb', line 76 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.start_with?("\x00") 1 when :gauge asn_val = [value].pack("N*") asn_val = asn_val[1..-1] while asn_val.start_with?("\x00") 2 when :timetick return Timetick.new(value).to_asn when :opaque then 4 when :nsap then 5 when :counter64 then 6 when :uinteger then 7 else raise Error, "#{typ}: unsupported application type" end end OpenSSL::ASN1::ASN1Data.new(asn_val, asn_type, :APPLICATION) end |
#convert_val(asn_value) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/netsnmp/varbind.rb', line 48 def convert_val(asn_value) case asn_value when OpenSSL::ASN1::OctetString # yes, we are forcing all output to UTF-8 # it's kind of common in snmp, some stuff can't be converted, # like Hexa Strings. Parse them into a readable format a la netsnmp val = asn_value.value begin val.encode("UTF-8") rescue Encoding::UndefinedConversionError, Encoding::ConverterNotFoundError, Encoding::InvalidByteSequenceError # hexdump me! val.unpack("H*")[0].upcase.scan(/../).join(" ") end when OpenSSL::ASN1::Primitive val = asn_value.value val = val.to_i if val.is_a?(OpenSSL::BN) val when OpenSSL::ASN1::ASN1Data # application data convert_application_asn(asn_value) # when OpenSSL::BN else asn_value # assume it's already primitive end end |
#to_asn ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/netsnmp/varbind.rb', line 23 def to_asn asn_oid = OID.to_asn(@oid) asn_val = if @type convert_to_asn(@type, @value) else case @value when String OpenSSL::ASN1::OctetString.new(@value) when Integer OpenSSL::ASN1::Integer.new(@value) when true, false OpenSSL::ASN1::Boolean.new(@value) when nil OpenSSL::ASN1::Null.new(nil) when IPAddr OpenSSL::ASN1::ASN1Data.new(@value.hton, 0, :APPLICATION) when Timetick @value.to_asn else raise Error, "#{@value}: unsupported varbind type" end end OpenSSL::ASN1::Sequence.new([asn_oid, asn_val]) end |
#to_der ⇒ Object
19 20 21 |
# File 'lib/netsnmp/varbind.rb', line 19 def to_der to_asn.to_der end |
#to_s ⇒ Object
15 16 17 |
# File 'lib/netsnmp/varbind.rb', line 15 def to_s "#<#{self.class}:0x#{object_id.to_s(16)} @oid=#{@oid} @value=#{@value}>" end |