Class: SNMP::Message
- Inherits:
-
Object
- Object
- SNMP::Message
- Extended by:
- BER::Decode
- Includes:
- BER::Encode
- Defined in:
- lib/snmp/pdu.rb
Instance Attribute Summary collapse
-
#community ⇒ Object
readonly
Returns the value of attribute community.
-
#pdu ⇒ Object
readonly
Returns the value of attribute pdu.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
- .decode(data, mib = nil) ⇒ Object
- .decode_pdu(version, data, mib = nil) ⇒ Object
- .decode_version(data) ⇒ Object
Instance Method Summary collapse
- #encode ⇒ Object
- #encode_version(version) ⇒ Object
-
#initialize(version, community, pdu) ⇒ Message
constructor
A new instance of Message.
- #response ⇒ Object
Methods included from BER::Decode
assert_no_remainder, build_integer, decode_integer, decode_integer_value, decode_ip_address, decode_object_id, decode_object_id_value, decode_octet_string, decode_sequence, decode_timeticks, decode_tlv, decode_uinteger_value
Methods included from BER::Encode
#encode_exception, #encode_integer, #encode_length, #encode_null, #encode_object_id, #encode_octet_string, #encode_sequence, #encode_tagged_integer, #encode_tlv, #integer_to_octets
Constructor Details
#initialize(version, community, pdu) ⇒ Message
Returns a new instance of Message.
102 103 104 105 106 |
# File 'lib/snmp/pdu.rb', line 102 def initialize(version, community, pdu) @version = version @community = community @pdu = pdu end |
Instance Attribute Details
#community ⇒ Object (readonly)
Returns the value of attribute community.
46 47 48 |
# File 'lib/snmp/pdu.rb', line 46 def community @community end |
#pdu ⇒ Object (readonly)
Returns the value of attribute pdu.
47 48 49 |
# File 'lib/snmp/pdu.rb', line 47 def pdu @pdu end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
45 46 47 |
# File 'lib/snmp/pdu.rb', line 45 def version @version end |
Class Method Details
.decode(data, mib = nil) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'lib/snmp/pdu.rb', line 50 def decode(data, mib=nil) , remainder = decode_sequence(data) assert_no_remainder(remainder) version, remainder = decode_version() community, remainder = decode_octet_string(remainder) pdu, remainder = decode_pdu(version, remainder, mib) assert_no_remainder(remainder) Message.new(version, community, pdu) end |
.decode_pdu(version, data, mib = nil) ⇒ Object
72 73 74 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 |
# File 'lib/snmp/pdu.rb', line 72 def decode_pdu(version, data, mib=nil) pdu_tag, pdu_data, remainder = decode_tlv(data) case pdu_tag when BER::GetRequest_PDU_TAG pdu = PDU.decode(GetRequest, pdu_data, mib) when BER::GetNextRequest_PDU_TAG pdu = PDU.decode(GetNextRequest, pdu_data, mib) when BER::Response_PDU_TAG pdu = PDU.decode(Response, pdu_data, mib) when BER::SetRequest_PDU_TAG pdu = PDU.decode(SetRequest, pdu_data, mib) when BER::SNMPv1_Trap_PDU_TAG raise InvalidPduTag, "SNMPv1-trap not valid for #{version.to_s}" if version != :SNMPv1 pdu = SNMPv1_Trap.decode(pdu_data, mib) when BER::GetBulkRequest_PDU_TAG raise InvalidPduTag, "get-bulk not valid for #{version.to_s}" if version != :SNMPv2c pdu = PDU.decode(GetBulkRequest, pdu_data, mib) when BER::InformRequest_PDU_TAG raise InvalidPduTag, "inform not valid for #{version.to_s}" if version != :SNMPv2c pdu = PDU.decode(InformRequest, pdu_data, mib) when BER::SNMPv2_Trap_PDU_TAG raise InvalidPduTag, "SNMPv2c-trap not valid for #{version.to_s}" if version != :SNMPv2c pdu = PDU.decode(SNMPv2_Trap, pdu_data, mib) else raise UnsupportedPduTag, pdu_tag.to_s end return pdu, remainder end |
.decode_version(data) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/snmp/pdu.rb', line 60 def decode_version(data) version_data, remainder = decode_integer(data) if version_data == BER::SNMP_V1 version = :SNMPv1 elsif version_data == BER::SNMP_V2C version = :SNMPv2c else raise UnsupportedVersion, version_data.to_s end return version, remainder end |
Instance Method Details
#encode ⇒ Object
122 123 124 125 126 127 |
# File 'lib/snmp/pdu.rb', line 122 def encode data = encode_version(@version) data << encode_octet_string(@community) data << @pdu.encode encode_sequence(data) end |
#encode_version(version) ⇒ Object
112 113 114 115 116 117 118 119 120 |
# File 'lib/snmp/pdu.rb', line 112 def encode_version(version) if version == :SNMPv1 encode_integer(BER::SNMP_V1) elsif version == :SNMPv2c encode_integer(BER::SNMP_V2C) else raise UnsupportedVersion, version.to_s end end |