X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/02f215c550418f180d0d1b2694c99a7a8d4dc4b2..ebd170a764ab9660adee464588cda1801c7986b4:/projects/stargazer/plugins/other/smux/utils.cpp?ds=sidebyside diff --git a/projects/stargazer/plugins/other/smux/utils.cpp b/projects/stargazer/plugins/other/smux/utils.cpp index a67314cb..d1a0c281 100644 --- a/projects/stargazer/plugins/other/smux/utils.cpp +++ b/projects/stargazer/plugins/other/smux/utils.cpp @@ -1,23 +1,26 @@ -#include // write - -#include // memset -#include +#include "utils.h" +#include "pen.h" #include "stg/common.h" +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wold-style-cast" #include "stg/OpenPDU.h" #include "stg/ClosePDU.h" #include "stg/RReqPDU.h" #include "stg/ber_decoder.h" #include "stg/der_encoder.h" +#pragma GCC diagnostic pop -#include "pen.h" -#include "utils.h" +#include // memset +#include + +#include // write bool String2OI(const std::string & str, OBJECT_IDENTIFIER_t * oi) { size_t left = 0, pos = 0, arcPos = 0; -int arcs[1024]; +uint32_t arcs[1024]; pos = str.find_first_of('.', left); if (pos == 0) { @@ -44,32 +47,10 @@ if (left < str.length()) } arcs[arcPos++] = arc; } -printfd(__FILE__, "String2OI() - arcPos: %d\n", arcPos); -OBJECT_IDENTIFIER_set_arcs(oi, arcs, sizeof(arcs[0]), arcPos); +OBJECT_IDENTIFIER_set_arcs(oi, arcs, static_cast(arcPos)); return true; } -std::string OI2String(OBJECT_IDENTIFIER_t * oi) -{ -std::string res; - -int arcs[1024]; -int count = OBJECT_IDENTIFIER_get_arcs(oi, arcs, sizeof(arcs[0]), 1024); - -if (count > 1024) - return ""; - -for (int i = 0; i < count; ++i) - { - res += "."; - std::string arc; - strprintf(&arc, "%d", arcs[i]); - res += arc; - } - -return res; -} - bool SendOpenPDU(int fd) { const char * description = "Stg SMUX Plugin"; @@ -102,14 +83,16 @@ if (error.encoded == -1) } else { - write(fd, buffer, error.encoded); - printfd(__FILE__, "OpenPDU encoded successfully to %d bytes\n", - error.encoded); + if (write(fd, buffer, error.encoded) < 0) + { + printfd(__FILE__, "Failed to send OpenPDU: %s\n", strerror(errno)); + return false; + } } return true; } -int SendClosePDU(int fd) +bool SendClosePDU(int fd) { ClosePDU_t msg; @@ -127,19 +110,22 @@ if (error.encoded == -1) { printfd(__FILE__, "Could not encode ClosePDU (at %s)\n", error.failed_type ? error.failed_type->name : "unknown"); - return -1; + return false; } else { - write(fd, buffer, error.encoded); - printfd(__FILE__, "ClosePDU encoded successfully\n"); + if (write(fd, buffer, error.encoded) < 0) + { + printfd(__FILE__, "Failed to send ClosePDU: %s\n", strerror(errno)); + return false; + } } -return 0; +return true; } -int SendRReqPDU(int fd) +bool SendRReqPDU(int fd) { -int oid[] = {1, 3, 6, 1, 4, 1, 38313, 1}; +uint32_t oid[] = {1, 3, 6, 1, 4, 1, 38313, 1}; asn_enc_rval_t error; RReqPDU_t msg; @@ -149,7 +135,6 @@ msg.priority = 0; asn_long2INTEGER(&msg.operation, RReqPDU__operation_readOnly); OBJECT_IDENTIFIER_set_arcs(&msg.subtree, oid, - sizeof(oid[0]), 8); char buffer[1024]; @@ -161,15 +146,17 @@ if (error.encoded == -1) { printfd(__FILE__, "Could not encode RReqPDU (at %s)\n", error.failed_type ? error.failed_type->name : "unknown"); - return -1; + return false; } else { - write(fd, buffer, error.encoded); - printfd(__FILE__, "RReqPDU encoded successfully to %d bytes\n", - error.encoded); + if (write(fd, buffer, error.encoded) < 0) + { + printfd(__FILE__, "Failed to send RReqPDU: %s\n", strerror(errno)); + return false; + } } -return 0; +return true; } SMUX_PDUs_t * RecvSMUXPDUs(int fd) @@ -183,18 +170,19 @@ 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); +void* p = pdus; +error = ber_decode(0, &asn_DEF_SMUX_PDUs, &p, buffer, length); if(error.code != RC_OK) { printfd(__FILE__, "Failed to decode PDUs at byte %ld\n", - (long)error.consumed); + static_cast(error.consumed)); return NULL; } return pdus; } -int SendGetResponsePDU(int fd, GetResponse_PDU_t * getResponse) +bool SendGetResponsePDU(int fd, GetResponse_PDU_t * getResponse) { asn_enc_rval_t error; @@ -206,28 +194,32 @@ if (error.encoded == -1) { printfd(__FILE__, "Could not encode GetResponsePDU (at %s)\n", error.failed_type ? error.failed_type->name : "unknown"); - return -1; + return false; } else { - write(fd, buffer, error.encoded); - printfd(__FILE__, "GetResponsePDU encoded successfully to %d bytes\n", - error.encoded); + if (write(fd, buffer, error.encoded) < 0) + { + printfd(__FILE__, "Failed to send GetResponsePDU: %s\n", strerror(errno)); + return false; + } } -return 0; +return true; } -int SendGetResponseErrorPDU(int fd, - const PDU_t * getRequest, - int errorStatus, - int errorIndex) +bool SendGetResponseErrorPDU(int fd, + const PDU_t * getRequest, + int errorStatus, + int errorIndex) { asn_enc_rval_t error; GetResponse_PDU_t msg; memset(&msg, 0, sizeof(msg)); -msg.request_id = getRequest->request_id; +long id = 0; +asn_INTEGER2long(&getRequest->request_id, &id); +asn_long2INTEGER(&msg.request_id, id); asn_long2INTEGER(&msg.error_status, errorStatus); asn_long2INTEGER(&msg.error_index, errorIndex); @@ -241,14 +233,15 @@ if (error.encoded == -1) { printfd(__FILE__, "Could not encode GetResponsePDU for error (at %s)\n", error.failed_type ? error.failed_type->name : "unknown"); - return -1; + return false; } else { - write(fd, buffer, error.encoded); - printfd(__FILE__, - "GetResponsePDU for error encoded successfully to %d bytes\n", - error.encoded); + if (write(fd, buffer, error.encoded) < 0) + { + printfd(__FILE__, "Failed to send GetResponseErrorPDU: %s\n", strerror(errno)); + return false; + } } -return 0; +return true; }