Method: NETSNMP::Message.decode

Defined in:
lib/netsnmp/message.rb

.decode(stream, security_parameters:) ⇒ NETSNMP::ScopedPDU

Returns the decoded PDU.

Parameters:

  • payload (String)

    of an snmp v3 message which can be decoded

  • security_parameters (NETSMP::SecurityParameters, #decode)

    knowns how to decode the stream

Returns:



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/netsnmp/message.rb', line 20

def decode(stream, security_parameters:)
  asn_tree = OpenSSL::ASN1.decode(stream)
  _version, _headers, sec_params, pdu_payload = asn_tree.value

  sec_params_asn = OpenSSL::ASN1.decode(sec_params.value).value

  engine_id, engine_boots, engine_time, _username, auth_param, priv_param = sec_params_asn.map(&:value)

  # validate_authentication
  security_parameters.verify(stream.sub(auth_param, AUTHNONE.value), auth_param)

  engine_boots = engine_boots.to_i
  engine_time = engine_time.to_i

  encoded_pdu = security_parameters.decode(pdu_payload, salt: priv_param,
                                                        engine_boots: engine_boots,
                                                        engine_time: engine_time)

  pdu = ScopedPDU.decode(encoded_pdu)
  [pdu, engine_id, engine_boots, engine_time]
end