X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=RIC-E2-TERMINATION%2FsctpThread.cpp;h=95b0e468afa782c76a79af4162b039f3e55b6278;hb=7b437f758a65cbb98708e88ce72ccd1b2b0ea7fb;hp=a271d054828f1cd6daacc240576444aa5fb2247a;hpb=6680c3b3a845af93ffa8dc1ec4b11efe7250c38a;p=ric-plt%2Fe2.git diff --git a/RIC-E2-TERMINATION/sctpThread.cpp b/RIC-E2-TERMINATION/sctpThread.cpp index a271d05..95b0e46 100644 --- a/RIC-E2-TERMINATION/sctpThread.cpp +++ b/RIC-E2-TERMINATION/sctpThread.cpp @@ -20,9 +20,22 @@ +#include <3rdparty/oranE2/RANfunctions-List.h> #include "sctpThread.h" #include "BuildRunName.h" +//#define asn_DEF_E2SM_gNB_NRT_RANfunction_Definition e2sm_asn_DEF_E2SM_gNB_NRT_RANfunction_Definition +//#define __gcov_init e2sm___gcov_init +//#define __gcov_merge_add e2sm___gcov_merge_add +//#define calloc e2sm_calloc + +#include "3rdparty/oranE2SM/E2SM-gNB-NRT-RANfunction-Definition.h" + +//#undef calloc +//#undef __gcov_merge_add +//#undef __gcov_init +//#undef asn_DEF_E2SM_gNB_NRT_RANfunction_Definition + using namespace std; //using namespace std::placeholders; using namespace boost::filesystem; @@ -233,8 +246,8 @@ int buildConfiguration(sctp_params_t &sctpParams) { jsonTrace = sctpParams.trace; sctpParams.ka_message_length = snprintf(sctpParams.ka_message, KA_MESSAGE_SIZE, "{\"address\": \"%s:%d\"," - "\"fqdn\": \"%s\"," - "\"pod_name\": \"%s\"}", + "\"fqdn\": \"%s\"," + "\"pod_name\": \"%s\"}", (const char *)sctpParams.myIP.c_str(), sctpParams.rmrPort, sctpParams.fqdn.c_str(), @@ -277,6 +290,8 @@ int buildConfiguration(sctp_params_t &sctpParams) { return 0; } + + int main(const int argc, char **argv) { sctp_params_t sctpParams; @@ -363,6 +378,9 @@ int main(const int argc, char **argv) { } } + auto statFlag = false; + auto statThread = std::thread(statColectorThread, (void *)&statFlag); + //loop over term_init until first message from xApp handleTermInit(sctpParams); @@ -370,6 +388,9 @@ int main(const int argc, char **argv) { t.join(); } + statFlag = true; + statThread.join(); + return 0; } @@ -465,12 +486,12 @@ int buildInotify(sctp_params_t &sctpParams) { } sctpParams.inotifyWD = inotify_add_watch(sctpParams.inotifyFD, - (const char *)sctpParams.configFilePath.c_str(), + (const char *)sctpParams.configFilePath.c_str(), (unsigned)IN_OPEN | (unsigned)IN_CLOSE_WRITE | (unsigned)IN_CLOSE_NOWRITE); //IN_CLOSE = (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) if (sctpParams.inotifyWD == -1) { mdclog_write(MDCLOG_ERR, "Failed to add directory : %s to inotify (inotify_add_watch) %s", - sctpParams.configFilePath.c_str(), - strerror(errno)); + sctpParams.configFilePath.c_str(), + strerror(errno)); close(sctpParams.inotifyFD); return -1; } @@ -539,10 +560,12 @@ void listener(sctp_params_t *params) { ReportingMessages_t message {}; - for (int i = 0; i < MAX_RMR_BUFF_ARRY; i++) { - rmrMessageBuffer.rcvBufferedMessages[i] = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE); - rmrMessageBuffer.sendBufferedMessages[i] = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE); - } +// for (int i = 0; i < MAX_RMR_BUFF_ARRY; i++) { +// rmrMessageBuffer.rcvBufferedMessages[i] = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE); +// rmrMessageBuffer.sendBufferedMessages[i] = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE); +// } + + message.statCollector = StatCollector::GetInstance(); while (true) { if (mdclog_level_get() >= MDCLOG_DEBUG) { @@ -602,8 +625,8 @@ void listener(sctp_params_t *params) { break; } auto ans = getnameinfo(&in_addr, in_len, - peerInfo->hostName, NI_MAXHOST, - peerInfo->portNumber, NI_MAXSERV, (unsigned )((unsigned int)NI_NUMERICHOST | (unsigned int)NI_NUMERICSERV)); + peerInfo->hostName, NI_MAXHOST, + peerInfo->portNumber, NI_MAXSERV, (unsigned )((unsigned int)NI_NUMERICHOST | (unsigned int)NI_NUMERICSERV)); if (ans < 0) { mdclog_write(MDCLOG_ERR, "Failed to get info on connection request. %s\n", strerror(errno)); close(peerInfo->fileDescriptor); @@ -872,6 +895,7 @@ void handlepoll_error(struct epoll_event &event, } close(peerInfo->fileDescriptor); + params->sctpMap->erase(peerInfo->enodbName); cleanHashEntry((ConnectedCU_t *) event.data.ptr, params->sctpMap); } else { mdclog_write(MDCLOG_ERR, "epoll error, events %0x on RMR FD", event.events); @@ -956,14 +980,14 @@ int sendSctpMsg(ConnectedCU_t *peerInfo, ReportingMessages_t &message, Sctp_Map_ if (loglevel >= MDCLOG_DEBUG) { mdclog_write(MDCLOG_DEBUG, "remove key = %s from %s at line %d", key, __FUNCTION__, __LINE__); } - auto tmp = m->find(key); + auto tmp = m->find(key); if (tmp) { free(tmp); } m->erase(key); return -1; } - peerInfo->sentMesgs++; + message.statCollector->incSentMessage(string(message.message.enodbName)); message.message.direction = 'D'; // send report.buffer of size buildJsonMessage(message); @@ -1021,7 +1045,7 @@ int receiveDataFromSctp(struct epoll_event *events, // get the identity of the interface message.peerInfo = (ConnectedCU_t *)events->data.ptr; - + message.statCollector = StatCollector::GetInstance(); struct timespec start{0, 0}; struct timespec decodestart{0, 0}; struct timespec end{0, 0}; @@ -1041,10 +1065,11 @@ int receiveDataFromSctp(struct epoll_event *events, if (loglevel >= MDCLOG_DEBUG) { mdclog_write(MDCLOG_DEBUG, "Finish Read from SCTP %d fd message length = %ld", - message.peerInfo->fileDescriptor, message.message.asnLength); + message.peerInfo->fileDescriptor, message.message.asnLength); } - message.peerInfo->rcvMsgs++; + memcpy(message.message.enodbName, message.peerInfo->enodbName, sizeof(message.peerInfo->enodbName)); + message.statCollector->incRecvMessage(string(message.message.enodbName)); message.message.direction = 'U'; message.message.time.tv_nsec = ts.tv_nsec; message.message.time.tv_sec = ts.tv_sec; @@ -1072,7 +1097,6 @@ int receiveDataFromSctp(struct epoll_event *events, break; } - asn_dec_rval_t rval; if (loglevel >= MDCLOG_DEBUG) { char printBuffer[4096]{}; char *tmp = printBuffer; @@ -1089,11 +1113,12 @@ int receiveDataFromSctp(struct epoll_event *events, clock_gettime(CLOCK_MONOTONIC, &decodestart); } - rval = asn_decode(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **) &pdu, + auto rval = asn_decode(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **) &pdu, message.message.asndata, message.message.asnLength); if (rval.code != RC_OK) { mdclog_write(MDCLOG_ERR, "Error %d Decoding (unpack) E2AP PDU from RAN : %s", rval.code, message.peerInfo->enodbName); + //todo may need reset to pdu break; } @@ -1111,15 +1136,15 @@ int receiveDataFromSctp(struct epoll_event *events, switch (pdu->present) { case E2AP_PDU_PR_initiatingMessage: {//initiating message - asnInitiatingRequest(pdu, message, rmrMessageBuffer); + asnInitiatingRequest(pdu, sctpMap,message, rmrMessageBuffer); break; } case E2AP_PDU_PR_successfulOutcome: { //successful outcome - asnSuccsesfulMsg(pdu, message, rmrMessageBuffer); + asnSuccsesfulMsg(pdu, sctpMap, message, rmrMessageBuffer); break; } case E2AP_PDU_PR_unsuccessfulOutcome: { //Unsuccessful Outcome - asnUnSuccsesfulMsg(pdu, message, rmrMessageBuffer); + asnUnSuccsesfulMsg(pdu, sctpMap, message, rmrMessageBuffer); break; } default: @@ -1137,17 +1162,18 @@ int receiveDataFromSctp(struct epoll_event *events, //break; if (pdu != nullptr) { //TODO need to test ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); to get better performance - //ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); - ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); - pdu = nullptr; + ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); + //ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + //pdu = nullptr; } //clock_gettime(CLOCK_MONOTONIC, &start); } // in case of break to avoid memory leak - if (pdu != nullptr) { - ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); - pdu = nullptr; - } +// if (pdu != nullptr) { +// //ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); +// ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu); +// //pdu = nullptr; +// } if (done) { if (loglevel >= MDCLOG_INFO) { @@ -1155,9 +1181,9 @@ int receiveDataFromSctp(struct epoll_event *events, } message.message.asnLength = rmrMessageBuffer.sendMessage->len = snprintf((char *)rmrMessageBuffer.sendMessage->payload, - 256, - "%s|CU disconnected unexpectedly", - message.peerInfo->enodbName); + 256, + "%s|CU disconnected unexpectedly", + message.peerInfo->enodbName); message.message.asndata = rmrMessageBuffer.sendMessage->payload; if (sendRequestToXapp(message, @@ -1180,29 +1206,21 @@ int receiveDataFromSctp(struct epoll_event *events, } static void buildAndsendSetupRequest(ReportingMessages_t &message, - E2setupRequestIEs_t *ie, RmrMessagesBuffer_t &rmrMessageBuffer, E2AP_PDU_t *pdu) { auto logLevel = mdclog_level_get(); - - if (buildRanName(message.peerInfo->enodbName, ie) < 0) { - mdclog_write(MDCLOG_ERR, "Bad param in E2setupRequestIEs GlobalE2node_ID.\n"); - } else { - memcpy(message.message.enodbName, message.peerInfo->enodbName, strlen(message.peerInfo->enodbName)); - } // now we can send the data to e2Mgr - auto buffer_size = RECEIVE_SCTP_BUFFER_SIZE; + auto buffer_size = RECEIVE_SCTP_BUFFER_SIZE * 2; auto *rmrMsg = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, buffer_size); // add addrees to message - auto j = snprintf((char *)rmrMsg->payload, 256, "%s:%d|", message.peerInfo->sctpParams->myIP.c_str(), message.peerInfo->sctpParams->rmrPort); - unsigned char *buffer = &rmrMsg->payload[j]; + // unsigned char *buffer = &rmrMsg->payload[j]; + unsigned char buffer[RECEIVE_SCTP_BUFFER_SIZE * 2]; // encode to xml - asn_enc_rval_t er; - er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, pdu, buffer, buffer_size - j); + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, pdu, buffer, buffer_size); if (er.encoded == -1) { mdclog_write(MDCLOG_ERR, "encoding of %s failed, %s", asn_DEF_E2AP_PDU.name, strerror(errno)); } else if (er.encoded > (ssize_t) buffer_size) { @@ -1210,8 +1228,12 @@ static void buildAndsendSetupRequest(ReportingMessages_t &message, (int) buffer_size, asn_DEF_E2AP_PDU.name); } else { + rmrMsg->len = snprintf((char *)rmrMsg->payload, RECEIVE_SCTP_BUFFER_SIZE * 2, "%s:%d|%s", + message.peerInfo->sctpParams->myIP.c_str(), + message.peerInfo->sctpParams->rmrPort, + buffer); if (logLevel >= MDCLOG_DEBUG) { - mdclog_write(MDCLOG_DEBUG, "Buffer of size %d, data = %s", (int) er.encoded, buffer); + mdclog_write(MDCLOG_DEBUG, "Setup request of size %d :\n %s\n", rmrMsg->len, rmrMsg->payload); } // send to RMR message.message.messageType = rmrMsg->mtype = RIC_E2_SETUP_REQ; @@ -1251,6 +1273,9 @@ static void buildAndsendSetupRequest(ReportingMessages_t &message, } message.peerInfo->gotSetup = true; buildJsonMessage(message); + if (rmrMsg != nullptr) { + rmr_free_msg(rmrMsg); + } } } @@ -1261,6 +1286,7 @@ static void buildAndsendSetupRequest(ReportingMessages_t &message, * @param rmrMessageBuffer */ void asnInitiatingRequest(E2AP_PDU_t *pdu, + Sctp_Map_t *sctpMap, ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer) { auto logLevel = mdclog_level_get(); @@ -1274,16 +1300,103 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu, mdclog_write(MDCLOG_DEBUG, "Got E2setup\n"); } + // first get the message as XML buffer + auto setup_xml_buffer_size = RECEIVE_SCTP_BUFFER_SIZE * 2; + unsigned char setup_xml_buffer[RECEIVE_SCTP_BUFFER_SIZE * 2]; + //unsigned char *tmp_buff_cursor = setup_xml_buffer; + + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, pdu, setup_xml_buffer, setup_xml_buffer_size); + if (er.encoded == -1) { + mdclog_write(MDCLOG_ERR, "encoding of %s failed, %s", asn_DEF_E2AP_PDU.name, strerror(errno)); + } else if (er.encoded > (ssize_t) setup_xml_buffer_size) { + mdclog_write(MDCLOG_ERR, "Buffer of size %d is to small for %s", + (int)setup_xml_buffer_size, + asn_DEF_E2AP_PDU.name); + } + std::string xmlString(setup_xml_buffer_size, setup_xml_buffer_size + er.encoded); + + auto failed = false; memset(message.peerInfo->enodbName, 0 , MAX_ENODB_NAME_SIZE); for (auto i = 0; i < pdu->choice.initiatingMessage->value.choice.E2setupRequest.protocolIEs.list.count; i++) { auto *ie = pdu->choice.initiatingMessage->value.choice.E2setupRequest.protocolIEs.list.array[i]; if (ie->id == ProtocolIE_ID_id_GlobalE2node_ID) { + // get the ran name for meid if (ie->value.present == E2setupRequestIEs__value_PR_GlobalE2node_ID) { - buildAndsendSetupRequest(message, ie, rmrMessageBuffer, pdu); - break; + if (buildRanName(message.peerInfo->enodbName, ie) < 0) { + mdclog_write(MDCLOG_ERR, "Bad param in E2setupRequestIEs GlobalE2node_ID.\n"); + // no mesage will be sent + break; + } + memcpy(message.message.enodbName, message.peerInfo->enodbName, strlen(message.peerInfo->enodbName)); + sctpMap->setkey(message.message.enodbName, message.peerInfo); + } + } + // reformat RANFUNCTION Definition to XML + if (ie->id == ProtocolIE_ID_id_RANfunctionsAdded) { + if (ie->value.present == E2setupRequestIEs__value_PR_RANfunctions_List) { + for (auto j = 0; i < ie->value.choice.RANfunctions_List.list.count; i++) { + auto *raNfunctionItemIEs = (RANfunction_ItemIEs_t *)ie->value.choice.RANfunctions_List.list.array[j]; + if (raNfunctionItemIEs->id == ProtocolIE_ID_id_RANfunction_Item) { + auto buffer_size = RECEIVE_SCTP_BUFFER_SIZE * 2; + unsigned char buffer[RECEIVE_SCTP_BUFFER_SIZE * 2]; + // encode to xml + E2SM_gNB_NRT_RANfunction_Definition_t *ranFunDef = nullptr; + auto rval = asn_decode(nullptr, ATS_ALIGNED_BASIC_PER, + &asn_DEF_E2SM_gNB_NRT_RANfunction_Definition, + (void **)&ranFunDef, + buffer, + buffer_size); + if (rval.code != RC_OK) { + mdclog_write(MDCLOG_ERR, "Error %d Decoding (unpack) E2AP PDU from E2MGR : %s", + rval.code, + asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name); + failed = true; + break; + } + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + char *printBuffer; + size_t size; + FILE *stream = open_memstream(&printBuffer, &size); + asn_fprint(stream, &asn_DEF_E2AP_PDU, pdu); + mdclog_write(MDCLOG_DEBUG, "Encoding E2AP PDU past : %s", printBuffer); + } + auto xml_buffer_size = RECEIVE_SCTP_BUFFER_SIZE * 2; + unsigned char xml_buffer[RECEIVE_SCTP_BUFFER_SIZE * 2]; + // encode to xml + er = asn_encode_to_buffer(nullptr, + ATS_BASIC_XER, + &asn_DEF_E2SM_gNB_NRT_RANfunction_Definition, + ranFunDef, + xml_buffer, + xml_buffer_size); + if (er.encoded == -1) { + mdclog_write(MDCLOG_ERR, "encoding of %s failed, %s", + asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name, + strerror(errno)); + } else if (er.encoded > (ssize_t) buffer_size) { + mdclog_write(MDCLOG_ERR, "Buffer of size %d is to small for %s", + (int) xml_buffer_size, + asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name); + } else { + // we have the xml + } + + } + } + if (failed) { + break; + } } } } + if (failed) { + break; + } + + //build all parts and send the XML (need to copy the XML with the header to the rmrMessageBuffer payload + //TODO replace with new function + buildAndsendSetupRequest(message, rmrMessageBuffer, pdu); break; } case ProcedureCode_id_ErrorIndication: { @@ -1395,7 +1508,10 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu, * @param message * @param rmrMessageBuffer */ -void asnSuccsesfulMsg(E2AP_PDU_t *pdu, ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer) { +void asnSuccsesfulMsg(E2AP_PDU_t *pdu, + Sctp_Map_t *sctpMap, + ReportingMessages_t &message, + RmrMessagesBuffer_t &rmrMessageBuffer) { auto procedureCode = pdu->choice.successfulOutcome->procedureCode; auto logLevel = mdclog_level_get(); if (logLevel >= MDCLOG_INFO) { @@ -1556,6 +1672,7 @@ void asnSuccsesfulMsg(E2AP_PDU_t *pdu, ReportingMessages_t &message, RmrMessages * @param rmrMessageBuffer */ void asnUnSuccsesfulMsg(E2AP_PDU_t *pdu, + Sctp_Map_t *sctpMap, ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer) { auto procedureCode = pdu->choice.unsuccessfulOutcome->procedureCode; @@ -1776,6 +1893,31 @@ void getRmrContext(sctp_params_t &pSctpParams) { } } +int BuildPERSetupResponseMessaeFromXML(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer) { + E2AP_PDU_t *pdu; + auto rval = asn_decode(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, (void **) &pdu, + rmrMessageBuffer.rcvMessage->payload, rmrMessageBuffer.rcvMessage->len); + if (rval.code != RC_OK) { + mdclog_write(MDCLOG_ERR, "Error %d Decoding (unpack) E2AP PDU from E2MGR : %s", + rval.code, + message.message.enodbName); + return -1; + } + + auto er = asn_encode_to_buffer(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, pdu, + rmrMessageBuffer.rcvMessage->payload, rmrMessageBuffer.rcvMessage->len); + if (er.encoded == -1) { + mdclog_write(MDCLOG_ERR, "encoding of %s failed, %s", asn_DEF_E2AP_PDU.name, strerror(errno)); + return -1; + } else if (er.encoded > (ssize_t)rmrMessageBuffer.rcvMessage->len) { + mdclog_write(MDCLOG_ERR, "Buffer of size %d is to small for %s", + (int)rmrMessageBuffer.rcvMessage->len, + asn_DEF_E2AP_PDU.name); + return -1; + } + return 0; +} + /** * * @param sctpMap @@ -1812,8 +1954,13 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, mdclog_write(MDCLOG_ERR, "RMR Receving message with stat = %d", rmrMessageBuffer.rcvMessage->state); return -1; } + rmr_get_meid(rmrMessageBuffer.rcvMessage, (unsigned char *)message.message.enodbName); switch (rmrMessageBuffer.rcvMessage->mtype) { case RIC_E2_SETUP_RESP : { + if (BuildPERSetupResponseMessaeFromXML(message, rmrMessageBuffer) != 0) { + break; + } + if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) { mdclog_write(MDCLOG_ERR, "Failed to send RIC_E2_SETUP_RESP"); return -6; @@ -1821,6 +1968,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, break; } case RIC_E2_SETUP_FAILURE : { + if (BuildPERSetupResponseMessaeFromXML(message, rmrMessageBuffer) != 0) { + break; + } if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) { mdclog_write(MDCLOG_ERR, "Failed to send RIC_E2_SETUP_FAILURE"); return -6; @@ -1909,9 +2059,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, message.message.asnLength = rmrMessageBuffer.sendMessage->len = snprintf((char *)rmrMessageBuffer.sendMessage->payload, - 256, - "%s|RIC_SCTP_CLEAR_ALL", - peerInfo->enodbName); + 256, + "%s|RIC_SCTP_CLEAR_ALL", + peerInfo->enodbName); message.message.asndata = rmrMessageBuffer.sendMessage->payload; mdclog_write(MDCLOG_INFO, "%s", message.message.asndata); if (sendRequestToXapp(message, RIC_SCTP_CONNECTION_FAILURE, rmrMessageBuffer) != 0) { @@ -1928,8 +2078,8 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, case E2_TERM_KEEP_ALIVE_REQ: { // send message back rmr_bytes2payload(rmrMessageBuffer.sendMessage, - (unsigned char *)rmrMessageBuffer.ka_message, - rmrMessageBuffer.ka_message_len); + (unsigned char *)rmrMessageBuffer.ka_message, + rmrMessageBuffer.ka_message_len); rmrMessageBuffer.sendMessage->mtype = E2_TERM_KEEP_ALIVE_RESP; rmrMessageBuffer.sendMessage->state = 0; static unsigned char tx[32]; @@ -1941,9 +2091,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, mdclog_write(MDCLOG_ERR, "Failed to send E2_TERM_KEEP_ALIVE_RESP RMR message returned NULL"); } else if (rmrMessageBuffer.sendMessage->state != 0) { mdclog_write(MDCLOG_ERR, "Failed to send E2_TERM_KEEP_ALIVE_RESP, on RMR state = %d ( %s)", - rmrMessageBuffer.sendMessage->state, translateRmrErrorMessages(rmrMessageBuffer.sendMessage->state).c_str()); - } else if (mdclog_level_get() >= MDCLOG_INFO) { - mdclog_write(MDCLOG_INFO, "Got Keep Alive Request send : %s", rmrMessageBuffer.ka_message); + rmrMessageBuffer.sendMessage->state, translateRmrErrorMessages(rmrMessageBuffer.sendMessage->state).c_str()); + } else if (mdclog_level_get() >= MDCLOG_DEBUG) { + mdclog_write(MDCLOG_DEBUG, "Got Keep Alive Request send : %s", rmrMessageBuffer.ka_message); } break; @@ -2123,7 +2273,7 @@ int modifyToEpoll(int epoll_fd, if (mdclog_level_get() >= MDCLOG_DEBUG) { mdclog_write(MDCLOG_DEBUG, "remove key = %s from %s at line %d", key, __FUNCTION__, __LINE__); } - auto tmp = sctpMap->find(key); + auto tmp = sctpMap->find(key); if (tmp) { free(tmp); } @@ -2193,19 +2343,19 @@ void buildJsonMessage(ReportingMessages_t &message) { } snprintf(message.buffer, sizeof(message.buffer), - "{\"header\": {\"ts\": \"%ld.%09ld\"," - "\"ranName\": \"%s\"," - "\"messageType\": %d," - "\"direction\": \"%c\"}," - "\"base64Length\": %d," - "\"asnBase64\": \"%s\"}", - message.message.time.tv_sec, - message.message.time.tv_nsec, - message.message.enodbName, - message.message.messageType, - message.message.direction, - (int) message.outLen, - message.base64Data); + "{\"header\": {\"ts\": \"%ld.%09ld\"," + "\"ranName\": \"%s\"," + "\"messageType\": %d," + "\"direction\": \"%c\"}," + "\"base64Length\": %d," + "\"asnBase64\": \"%s\"}", + message.message.time.tv_sec, + message.message.time.tv_nsec, + message.message.enodbName, + message.message.messageType, + message.message.direction, + (int) message.outLen, + message.base64Data); static src::logger_mt &lg = my_logger::get(); BOOST_LOG(lg) << message.buffer;