From 70472478fc17e47834f2e0cd77d9d6ba08f95791 Mon Sep 17 00:00:00 2001 From: Maxim Mamontov Date: Wed, 1 Jun 2011 17:49:59 +0300 Subject: [PATCH] SendGetResponsePDU implemented --- .../stargazer/plugins/other/snmp/snmp.cpp | 64 +++++++++++++++++-- 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/projects/stargazer/plugins/other/snmp/snmp.cpp b/projects/stargazer/plugins/other/snmp/snmp.cpp index 8c026128..7e961208 100644 --- a/projects/stargazer/plugins/other/snmp/snmp.cpp +++ b/projects/stargazer/plugins/other/snmp/snmp.cpp @@ -211,6 +211,61 @@ else return 0; } +int SendGetResponsePDU(int fd, const PDU_t * pdu) +{ +asn_enc_rval_t error; +GetResponse_PDU_t msg; + +memset(&msg, 0, sizeof(msg)); + +msg.request_id = pdu->request_id; +asn_long2INTEGER(&msg.error_status, 0); +asn_long2INTEGER(&msg.error_index, 0); + +VarBind_t vb; + +memset(&vb, 0, sizeof(vb)); + +if (!String2OI(".1.3.6.1.4.1.9363.1", &vb.name)) + { + printfd(__FILE__, "SendSetResponsePDU() - failed to convert string to OBJECT_IDENTIFIER\n"); + return -1; + } + +ObjectSyntax_t * objectSyntax = &vb.value; +objectSyntax->present = ObjectSyntax_PR_simple; +SimpleSyntax_t * simpleSyntax = &objectSyntax->choice.simple; +simpleSyntax->present = SimpleSyntax_PR_number; +asn_long2INTEGER(&simpleSyntax->choice.number, 1); + + +ASN_SEQUENCE_ADD(&msg.variable_bindings, &vb); + +/*const VarBindList_t * vbl = &pdu->variable_bindings; +for (int i = 0; i < vbl->list.count; ++i) + { + VarBind_t * vb = pdu->variable_bindings.list.array[i]; + printfd(__FILE__, "OID: %s\n", OI2String(&vb->name).c_str()); + asn_fprint(stderr, &asn_DEF_ObjectSyntax, &vb->value); + }*/ + +char buffer[1024]; +error = der_encode_to_buffer(&asn_DEF_GetResponse_PDU, &msg, buffer, sizeof(buffer)); + +if (error.encoded == -1) + { + printfd(__FILE__, "Could not encode GetResponsePDU (at %s)\n", + error.failed_type ? error.failed_type->name : "unknown"); + return -1; + } +else + { + write(fd, buffer, error.encoded); + printfd(__FILE__, "GetResponsePDU encoded successfully to %d bytes\n", error.encoded); + } +return 0; +} + int SendSetResponsePDU(int fd, const PDU_t * pdu) { //int oid[] = {1, 3, 6, 1, 4, 1, 9363, 1}; @@ -221,7 +276,7 @@ memset(&msg, 0, sizeof(msg)); msg.request_id = pdu->request_id; asn_long2INTEGER(&msg.error_status, PDU__error_status_readOnly); -asn_long2INTEGER(&msg.error_index, PDU__error_status_readOnly); +asn_long2INTEGER(&msg.error_index, 0); char buffer[1024]; error = der_encode_to_buffer(&asn_DEF_GetResponse_PDU, &msg, buffer, sizeof(buffer)); @@ -584,12 +639,7 @@ bool SNMP_AGENT::GetRequestHandler(const PDUs_t * pdus) { printfd(__FILE__, "SNMP_AGENT::GetRequestHandler()\n"); asn_fprint(stderr, &asn_DEF_PDUs, pdus); -const VarBindList_t * vbl = &pdus->choice.get_request.variable_bindings; -for (int i = 0; i < vbl->list.count; ++i) - { - VarBind_t * vb = pdus->choice.get_request.variable_bindings.list.array[i]; - printfd(__FILE__, "OID: %s\n", OI2String(&vb->name).c_str()); - } +SendGetResponsePDU(sock, &pdus->choice.get_request); return false; } -- 2.44.2