Class SNMP::Message
In: lib/snmp/pdu.rb
Parent: Object

Methods

Attributes

community  [R] 
pdu  [R] 
version  [R] 

Public Class methods

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Source]

# File lib/snmp/pdu.rb, line 87
    def initialize(version, community, pdu)
        @version = version
        @community = community
        @pdu = pdu
    end

Public Instance methods

[Source]

# 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

[Source]

# 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

[Source]

# File lib/snmp/pdu.rb, line 93
    def response
        Message.new(@version, @community, Response.from_pdu(@pdu))
    end

[Validate]