Class: SNMP::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/snmp/pdu.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version, community, pdu) ⇒ Message

Returns a new instance of Message.



87
88
89
90
91
# File 'lib/snmp/pdu.rb', line 87

def initialize(version, community, pdu)
    @version = version
    @community = community
    @pdu = pdu
end

Instance Attribute Details

#communityObject (readonly)

Returns the value of attribute community.



31
32
33
# File 'lib/snmp/pdu.rb', line 31

def community
  @community
end

#pduObject (readonly)

Returns the value of attribute pdu.



32
33
34
# File 'lib/snmp/pdu.rb', line 32

def pdu
  @pdu
end

#versionObject (readonly)

Returns the value of attribute version.



30
31
32
# File 'lib/snmp/pdu.rb', line 30

def version
  @version
end

Class Method Details

.decode(data) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/snmp/pdu.rb', line 35

def decode(data)
    message_data, remainder = decode_sequence(data)
    assert_no_remainder(remainder)
    version, remainder = decode_version(message_data)
    community, remainder = decode_octet_string(remainder)
    pdu, remainder = decode_pdu(version, remainder)
    assert_no_remainder(remainder)
    Message.new(version, community, pdu)
end

.decode_pdu(version, data) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/snmp/pdu.rb', line 57

def decode_pdu(version, data)
    pdu_tag, pdu_data, remainder = decode_tlv(data)
    case pdu_tag
    when GetRequest_PDU_TAG
        pdu = PDU.decode(GetRequest, pdu_data)
    when GetNextRequest_PDU_TAG
        pdu = PDU.decode(GetNextRequest, pdu_data)
    when Response_PDU_TAG
        pdu = PDU.decode(Response, pdu_data)
    when SetRequest_PDU_TAG
        pdu = PDU.decode(SetRequest, pdu_data)
    when SNMPv1_Trap_PDU_TAG
        raise InvalidPduTag, "SNMPv1-trap not valid for #{version.to_s}" if version != :SNMPv1
        pdu = SNMPv1_Trap.decode(pdu_data)
    when GetBulkRequest_PDU_TAG
        raise InvalidPduTag, "get-bulk not valid for #{version.to_s}" if version != :SNMPv2c
        pdu = PDU.decode(GetBulkRequest, pdu_data)
    when InformRequest_PDU_TAG
        raise InvalidPduTag, "inform not valid for #{version.to_s}" if version != :SNMPv2c
        pdu = PDU.decode(InformRequest, pdu_data)
    when SNMPv2_Trap_PDU_TAG
        raise InvalidPduTag, "SNMPv2c-trap not valid for #{version.to_s}" if version != :SNMPv2c
        pdu = PDU.decode(SNMPv2_Trap, pdu_data)
    else
        raise UnsupportedPduTag, pdu_tag.to_s
    end
    return pdu, remainder
end

.decode_version(data) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/snmp/pdu.rb', line 45

def decode_version(data)
    version_data, remainder = decode_integer(data)
    if version_data == SNMP_V1
        version = :SNMPv1
    elsif version_data == SNMP_V2C
        version = :SNMPv2c
    else
        raise UnsupportedVersion, version_data.to_s
    end
    return version, remainder
end

Instance Method Details

#encodeObject



107
108
109
110
111
112
# File 'lib/snmp/pdu.rb', line 107

def encode
    data = encode_version(@version)
    data << encode_octet_string(@community)
    data << @pdu.encode
    encode_sequence(data)
end

#encode_version(version) ⇒ Object



97
98
99
100
101
102
103
104
105
# File 'lib/snmp/pdu.rb', line 97

def encode_version(version)
    if version == :SNMPv1
        encode_integer(SNMP_V1)
    elsif version == :SNMPv2c
        encode_integer(SNMP_V2C)
    else
        raise UnsupportedVersion, version.to_s
    end
end

#responseObject



93
94
95
# File 'lib/snmp/pdu.rb', line 93

def response
    Message.new(@version, @community, Response.from_pdu(@pdu))
end