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