]> git.stg.codes - stg.git/commitdiff
SendGetResponsePDU implemented
authorMaxim Mamontov <faust@gts.dp.ua>
Wed, 1 Jun 2011 14:49:59 +0000 (17:49 +0300)
committerMaxim Mamontov <faust@gts.dp.ua>
Wed, 1 Jun 2011 14:49:59 +0000 (17:49 +0300)
projects/stargazer/plugins/other/snmp/snmp.cpp

index 8c026128b314acf1462f5cd499ea2672c9d15f33..7e961208a1debe1cd603bff720d0cd6c7820d3af 100644 (file)
@@ -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;
 }