]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/other/smux/smux.cpp
SMUX plugin code separated to SNMP helper functions and core logic
[stg.git] / projects / stargazer / plugins / other / smux / smux.cpp
index bd83f1ab38b914a5da9d4792eb74f466b85f2c98..14f47da3c5e5b21b2f11b9e0a4d3d6fba2982ed6 100644 (file)
 #include <vector>
 #include <algorithm>
 
-#include "asn1/OpenPDU.h"
-#include "asn1/ClosePDU.h"
-#include "asn1/RReqPDU.h"
-#include "asn1/GetRequest-PDU.h"
-#include "asn1/GetResponse-PDU.h"
-#include "asn1/VarBindList.h"
-#include "asn1/VarBind.h"
-#include "asn1/OBJECT_IDENTIFIER.h"
-#include "asn1/ber_decoder.h"
-#include "asn1/der_encoder.h"
-
 #include "stg/common.h"
 
 #include "smux.h"
-
-bool WaitPackets(int sd);
-
-bool String2OI(const std::string & str, OBJECT_IDENTIFIER_t * oi)
-{
-size_t left = 0, pos = 0, arcPos = 0;
-int arcs[1024];
-pos = str.find_first_of('.', left);
-if (pos == 0)
-    {
-    left = 1;
-    pos = str.find_first_of('.', left);
-    }
-while (pos != std::string::npos)
-    {
-    int arc = 0;
-    if (str2x(str.substr(left, left - pos), arc))
-        {
-        return false;
-        }
-    arcs[arcPos++] = arc;
-    left = pos + 1;
-    pos = str.find_first_of('.', left);
-    }
-if (left < str.length())
-    {
-    int arc = 0;
-    if (str2x(str.substr(left, left - pos), arc))
-        {
-        return false;
-        }
-    arcs[arcPos++] = arc;
-    }
-printfd(__FILE__, "String2OI() - arcPos: %d\n", arcPos);
-OBJECT_IDENTIFIER_set_arcs(oi, arcs, sizeof(arcs[0]), arcPos);
-return true;
-}
+#include "utils.h"
 
 class SMUX_CREATOR
 {
@@ -81,124 +34,6 @@ PLUGIN * GetPlugin()
 return sac.GetPlugin();
 }
 
-int SendOpenPDU(int fd)
-{
-const char * description = "Stg SMUX Plugin";
-//int oid[] = {1, 3, 6, 1, 4, 1, 38313, 1, 5, 2, 1, 1};
-asn_enc_rval_t error;
-OpenPDU_t msg;
-
-memset(&msg, 0, sizeof(msg));
-
-msg.present = OpenPDU_PR_simple;
-asn_long2INTEGER(&msg.choice.simple.version, SimpleOpen__version_version_1);
-if (!String2OI(".1.3.6.1.4.1.38313", &msg.choice.simple.identity))
-    {
-    printfd(__FILE__,
-            "SendOpenPDU() - failed to convert string to OBJECT_IDENTIFIER\n");
-    return -1;
-    }
-OCTET_STRING_fromString(&msg.choice.simple.description, description);
-OCTET_STRING_fromString(&msg.choice.simple.password, "");
-
-char buffer[1024];
-error = der_encode_to_buffer(&asn_DEF_OpenPDU, &msg, buffer, sizeof(buffer));
-
-if (error.encoded == -1)
-    {
-    printfd(__FILE__, "Could not encode OpenPDU (at %s)\n",
-            error.failed_type ? error.failed_type->name : "unknown");
-    return -1;
-    }
-else
-    {
-    write(fd, buffer, error.encoded);
-    printfd(__FILE__, "OpenPDU encoded successfully to %d bytes\n",
-            error.encoded);
-    }
-return 0;
-}
-
-int SendClosePDU(int fd)
-{
-ClosePDU_t msg;
-
-memset(&msg, 0, sizeof(msg));
-
-asn_long2INTEGER(&msg, ClosePDU_goingDown);
-
-char buffer[1024];
-asn_enc_rval_t error;
-error = der_encode_to_buffer(&asn_DEF_ClosePDU, &msg, buffer, sizeof(buffer));
-
-if (error.encoded == -1)
-    {
-    printfd(__FILE__, "Could not encode ClosePDU (at %s)\n",
-            error.failed_type ? error.failed_type->name : "unknown");
-    return -1;
-    }
-else
-    {
-    write(fd, buffer, error.encoded);
-    printfd(__FILE__, "ClosePDU encoded successfully\n");
-    }
-return 0;
-}
-
-int SendRReqPDU(int fd)
-{
-int oid[] = {1, 3, 6, 1, 4, 1, 38313, 1};
-asn_enc_rval_t error;
-RReqPDU_t msg;
-
-memset(&msg, 0, sizeof(msg));
-
-msg.priority = 0;
-asn_long2INTEGER(&msg.operation, RReqPDU__operation_readOnly);
-OBJECT_IDENTIFIER_set_arcs(&msg.subtree,
-                           oid,
-                           sizeof(oid[0]),
-                           8);
-
-char buffer[1024];
-error = der_encode_to_buffer(&asn_DEF_RReqPDU, &msg, buffer, sizeof(buffer));
-
-if (error.encoded == -1)
-    {
-    printfd(__FILE__, "Could not encode RReqPDU (at %s)\n",
-            error.failed_type ? error.failed_type->name : "unknown");
-    return -1;
-    }
-else
-    {
-    write(fd, buffer, error.encoded);
-    printfd(__FILE__, "RReqPDU encoded successfully to %d bytes\n",
-            error.encoded);
-    }
-return 0;
-}
-
-SMUX_PDUs_t * RecvSMUXPDUs(int fd)
-{
-char buffer[1024];
-SMUX_PDUs_t * pdus = NULL;
-
-memset(buffer, 0, sizeof(buffer));
-
-size_t length = read(fd, buffer, sizeof(buffer));
-if (length < 1)
-    return NULL;
-asn_dec_rval_t error;
-error = ber_decode(0, &asn_DEF_SMUX_PDUs, (void **)&pdus, buffer, length);
-if(error.code != RC_OK)
-    {
-    printfd(__FILE__, "Failed to decode PDUs at byte %ld\n",
-            (long)error.consumed);
-    return NULL;
-    }
-return pdus;
-}
-
 int ParseIntInRange(const std::string & str,
                     int min,
                     int max,
@@ -428,34 +263,6 @@ if (connect(sock, reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr)))
 return false;
 }
 
-bool WaitPackets(int sd)
-{
-fd_set rfds;
-FD_ZERO(&rfds);
-FD_SET(sd, &rfds);
-
-struct timeval tv;
-tv.tv_sec = 0;
-tv.tv_usec = 500000;
-
-int res = select(sd + 1, &rfds, NULL, NULL, &tv);
-if (res == -1) // Error
-    {
-    if (errno != EINTR)
-        {
-        printfd(__FILE__, "Error on select: '%s'\n", strerror(errno));
-        }
-    return false;
-    }
-
-if (res == 0) // Timeout
-    {
-    return false;
-    }
-
-return true;
-}
-
 bool SMUX::DispatchPDUs(const SMUX_PDUs_t * pdus)
 {
 SMUXHandlers::iterator it;