Method: NETSNMP::Message.encode
- Defined in:
- lib/netsnmp/message.rb
.encode(pdu, security_parameters:, engine_boots: 0, engine_time: 0) ⇒ String
Returns the byte representation of an SNMP v3 Message.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/netsnmp/message.rb', line 47 def encode(pdu, security_parameters:, engine_boots: 0, engine_time: 0) scoped_pdu, salt_param = security_parameters.encode(pdu, salt: PRIVNONE, engine_boots: engine_boots, engine_time: engine_time) sec_params = OpenSSL::ASN1::Sequence.new([ OpenSSL::ASN1::OctetString.new(security_parameters.engine_id), OpenSSL::ASN1::Integer.new(engine_boots), OpenSSL::ASN1::Integer.new(engine_time), OpenSSL::ASN1::OctetString.new(security_parameters.username), AUTHNONE, salt_param ]) = MSG_REPORTABLE | security_parameters.security_level = OpenSSL::ASN1::Integer.new(SecureRandom.random_number(2147483647)) headers = OpenSSL::ASN1::Sequence.new([ , MSG_MAX_SIZE, OpenSSL::ASN1::OctetString.new([String()].pack("h*")), MSG_SECURITY_MODEL ]) encoded = OpenSSL::ASN1::Sequence([ MSG_VERSION, headers, OpenSSL::ASN1::OctetString.new(sec_params.to_der), scoped_pdu ]).to_der signature = security_parameters.sign(encoded) if signature auth_salt = OpenSSL::ASN1::OctetString.new(signature) encoded.sub!(AUTHNONE.to_der, auth_salt.to_der) end encoded end |