From 0793fcb4958c1d079509b49bf9a882e8cbe1ae95 Mon Sep 17 00:00:00 2001 From: "aa7133@att.com" Date: Thu, 16 Apr 2020 11:34:26 +0300 Subject: [PATCH] version 4.0.8 change typo in sub_id replace redirection cout (<<) with buffer writer to string on XML builder added parameters to messages in test Change-Id: I350fe454f31923171b0ec37a5f2c743cf56ef719 Signed-off-by: aa7133@att.com --- RIC-E2-TERMINATION/BuildXml.h | 73 ++++++-- RIC-E2-TERMINATION/TEST/T1/E2Builder.h | 49 ++++- .../TEST/testAsn/setUpMessages/SetUpMessages.cpp | 27 ++- RIC-E2-TERMINATION/container-tag.yaml | 2 +- RIC-E2-TERMINATION/sctpThread.cpp | 201 ++++++++++++--------- 5 files changed, 242 insertions(+), 110 deletions(-) diff --git a/RIC-E2-TERMINATION/BuildXml.h b/RIC-E2-TERMINATION/BuildXml.h index 7853172..457ef8b 100644 --- a/RIC-E2-TERMINATION/BuildXml.h +++ b/RIC-E2-TERMINATION/BuildXml.h @@ -28,21 +28,65 @@ #include #include - using namespace std; -void buildXmlData(vector &repValues, unsigned char *buffer) { +/* + * Copied from pugixml samples + */ +struct xml_string_writer : pugi::xml_writer { + std::string result; + + virtual void write(const void *data, size_t size) { + result.append(static_cast(data), size); + } +}; +// end::code[] + +struct xml_memory_writer : pugi::xml_writer { + char *buffer; + size_t capacity; + size_t result; + + xml_memory_writer() : buffer(0), capacity(0), result(0) { + } + + xml_memory_writer(char *buffer, size_t capacity) : buffer(buffer), capacity(capacity), result(0) { + } + + size_t written_size() const { + return result < capacity ? result : capacity; + } + + virtual void write(const void *data, size_t size) { + if (result < capacity) { + size_t chunk = (capacity - result < size) ? capacity - result : size; + + memcpy(buffer + result, data, chunk); + } + result += size; + } +}; + +std::string node_to_string(pugi::xml_node node) { + xml_string_writer writer; + node.print(writer); + + return writer.result; +} + + +void buildXmlData(const string &messageName, const string &ieName, vector &repValues, unsigned char *buffer) { pugi::xml_document doc; - pugi::xml_parse_result result = doc.load_string((const char *) buffer); + pugi::xml_parse_result result = doc.load_string((const char *)buffer); if (result) { unsigned int index = 0; for (auto tool : doc.child("E2AP-PDU") .child("initiatingMessage") .child("value") - .child("E2setupRequest") + .child(messageName.c_str()) .child("protocolIEs") - .children("E2setupRequestIEs")) { + .children(ieName.c_str())) { for (auto n : tool.child("value").child("RANfunctions-List").child( "ProtocolIE-SingleContainer").children()) { //ProtocolIE-SingleContainer @@ -73,14 +117,17 @@ void buildXmlData(vector &repValues, unsigned char *buffer) { } } - streambuf *oldCout = cout.rdbuf(); - ostringstream memCout; -// create new cout - cout.rdbuf(memCout.rdbuf()); - doc.save(std::cout); -//return to the normal cout - cout.rdbuf(oldCout); - memcpy(buffer, memCout.str().c_str(), memCout.str().length()); + auto res = node_to_string(doc); + memcpy(buffer, res.c_str(), res.length()); + +// streambuf *oldCout = cout.rdbuf(); +// ostringstream memCout; +//// create new cout +// cout.rdbuf(memCout.rdbuf()); +// doc.save(std::cout); +////return to the normal cout +// cout.rdbuf(oldCout); +// memcpy(buffer, memCout.str().c_str(), memCout.str().length()); } } diff --git a/RIC-E2-TERMINATION/TEST/T1/E2Builder.h b/RIC-E2-TERMINATION/TEST/T1/E2Builder.h index 039f7c5..3ee6305 100644 --- a/RIC-E2-TERMINATION/TEST/T1/E2Builder.h +++ b/RIC-E2-TERMINATION/TEST/T1/E2Builder.h @@ -693,18 +693,49 @@ void buildSetupUnSuccsessfulResponse(E2AP_PDU_t *pdu) { uns->criticality = Criticality_reject; uns->value.present = UnsuccessfulOutcome__value_PR_E2setupFailure; - auto *e2SetupFIE = (E2setupFailureIEs_t *)calloc(1, sizeof(E2setupFailureIEs_t)); - ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE); + ASN_STRUCT_RESET(asn_DEF_E2setupFailure, &uns->value.choice.E2setupFailure); - e2SetupFIE->criticality = Criticality_reject; - e2SetupFIE->id = ProtocolIE_ID_id_GlobalRIC_ID; - e2SetupFIE->value.present = E2setupFailureIEs__value_PR_Cause; - e2SetupFIE->value.choice.Cause.present = Cause_PR_transport; - e2SetupFIE->value.choice.Cause.choice.transport = CauseTransport_transport_resource_unavailable; + { + auto *e2SetupFIE = (E2setupFailureIEs_t *) calloc(1, sizeof(E2setupFailureIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE); - ASN_STRUCT_RESET(asn_DEF_E2setupFailure, &uns->value.choice.E2setupFailure); - ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE); + e2SetupFIE->criticality = Criticality_ignore; + e2SetupFIE->id = ProtocolIE_ID_id_Cause; + e2SetupFIE->value.present = E2setupFailureIEs__value_PR_Cause; + e2SetupFIE->value.choice.Cause.present = Cause_PR_transport; + e2SetupFIE->value.choice.Cause.choice.transport = CauseTransport_transport_resource_unavailable; + + + ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE); + } + + { + auto *e2SetupFIE = (E2setupFailureIEs_t *) calloc(1, sizeof(E2setupFailureIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE); + + e2SetupFIE->criticality = Criticality_ignore; + e2SetupFIE->id = ProtocolIE_ID_id_TimeToWait; + e2SetupFIE->value.present = E2setupFailureIEs__value_PR_TimeToWait; + e2SetupFIE->value.choice.TimeToWait = TimeToWait_v60s; + + ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE); + } + { + auto *e2SetupFIE = (E2setupFailureIEs_t *) calloc(1, sizeof(E2setupFailureIEs_t)); + ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE); + + e2SetupFIE->criticality = Criticality_ignore; + e2SetupFIE->id = ProtocolIE_ID_id_CriticalityDiagnostics; + e2SetupFIE->value.present = E2setupFailureIEs__value_PR_CriticalityDiagnostics; + e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCode = (ProcedureCode_t *)calloc(1,sizeof(ProcedureCode_t)); + *e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCode = ProcedureCode_id_E2setup; + e2SetupFIE->value.choice.CriticalityDiagnostics.triggeringMessage = (TriggeringMessage_t *)calloc(1,sizeof(TriggeringMessage_t)); + *e2SetupFIE->value.choice.CriticalityDiagnostics.triggeringMessage = TriggeringMessage_initiating_message; + e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCriticality = (Criticality_t *)calloc(1, sizeof(Criticality_t)); + *e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCriticality = Criticality_reject; + ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE); + } pdu->present = E2AP_PDU_PR_unsuccessfulOutcome; } diff --git a/RIC-E2-TERMINATION/TEST/testAsn/setUpMessages/SetUpMessages.cpp b/RIC-E2-TERMINATION/TEST/testAsn/setUpMessages/SetUpMessages.cpp index 7137401..ca18a12 100644 --- a/RIC-E2-TERMINATION/TEST/testAsn/setUpMessages/SetUpMessages.cpp +++ b/RIC-E2-TERMINATION/TEST/testAsn/setUpMessages/SetUpMessages.cpp @@ -138,6 +138,31 @@ std::string otherXml = "\n" std::string newXml = "1413 10 14101010101100110011109611621631"; +std::string setupFailure = "" + "" + "1" + "" + "" + "" + "" + "" + "1" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; + + auto main(const int argc, char **argv) -> int { E2AP_PDU_t pdu; @@ -149,7 +174,7 @@ auto main(const int argc, char **argv) -> int { E2AP_PDU_t *XERpdu = nullptr; auto rval = asn_decode(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, (void **) &XERpdu, - newXml.c_str(), newXml.length()); + setupFailure.c_str(), setupFailure.length()); if (rval.code != RC_OK) { cout << "Error " << rval.code << " (unpack) setup response " << endl; //return -1; diff --git a/RIC-E2-TERMINATION/container-tag.yaml b/RIC-E2-TERMINATION/container-tag.yaml index 5693926..fb2ad1f 100644 --- a/RIC-E2-TERMINATION/container-tag.yaml +++ b/RIC-E2-TERMINATION/container-tag.yaml @@ -1,3 +1,3 @@ # The Jenkins job requires a tag to build the Docker image. # Global-JJB script assumes this file is in the repo root. -tag: 4.0.7.1 +tag: 4.0.8 diff --git a/RIC-E2-TERMINATION/sctpThread.cpp b/RIC-E2-TERMINATION/sctpThread.cpp index b65b1be..c2ad2c5 100644 --- a/RIC-E2-TERMINATION/sctpThread.cpp +++ b/RIC-E2-TERMINATION/sctpThread.cpp @@ -1216,9 +1216,22 @@ static void buildAndsendSetupRequest(ReportingMessages_t &message, (int) buffer_size, asn_DEF_E2AP_PDU.name, __func__, __LINE__); } else { - - buildXmlData(repValues, buffer); - // we have the XML + string messageType("E2setupRequest"); + string ieName("E2setupRequestIEs"); + buildXmlData(messageType, ieName, repValues, buffer); +// string xmlStr = (char *)buffer; +// auto removeSpaces = [] (string str) -> string { +// str.erase(remove(str.begin(), str.end(), ' '), str.end()); +// str.erase(remove(str.begin(), str.end(), '\t'), str.end()); +// return str; +// }; +// +// xmlStr = removeSpaces(xmlStr); +// // we have the XML +// rmrMsg->len = snprintf((char *)rmrMsg->payload, RECEIVE_SCTP_BUFFER_SIZE * 2, "%s:%d|%s", +// message.peerInfo->sctpParams->myIP.c_str(), +// message.peerInfo->sctpParams->rmrPort, +// xmlStr.c_str()); rmrMsg->len = snprintf((char *)rmrMsg->payload, RECEIVE_SCTP_BUFFER_SIZE * 2, "%s:%d|%s", message.peerInfo->sctpParams->myIP.c_str(), message.peerInfo->sctpParams->rmrPort, @@ -1271,6 +1284,67 @@ static void buildAndsendSetupRequest(ReportingMessages_t &message, } +int RAN_Function_list_To_Vector(RANfunctions_List_t& list, vector &runFunXML_v) { + auto index = 0; + runFunXML_v.clear(); + for (auto j = 0; j < list.list.count; j++) { + auto *raNfunctionItemIEs = (RANfunction_ItemIEs_t *)list.list.array[j]; + if (raNfunctionItemIEs->id == ProtocolIE_ID_id_RANfunction_Item && + (raNfunctionItemIEs->value.present == RANfunction_ItemIEs__value_PR_RANfunction_Item)) { + // 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, + raNfunctionItemIEs->value.choice.RANfunction_Item.ranFunctionDefinition.buf, + raNfunctionItemIEs->value.choice.RANfunction_Item.ranFunctionDefinition.size); + if (rval.code != RC_OK) { + mdclog_write(MDCLOG_ERR, "Error %d Decoding (unpack) E2SM message from : %s", + rval.code, + asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name); + return -1; + } + +// if (mdclog_level_get() >= MDCLOG_DEBUG) { +// char *printBuffer; +// size_t size; +// FILE *stream = open_memstream(&printBuffer, &size); +// asn_fprint(stream, &asn_DEF_E2SM_gNB_NRT_RANfunction_Definition, ranFunDef); +// mdclog_write(MDCLOG_DEBUG, "Encoding E2SM %s PDU past : %s", +// asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name, +// printBuffer); +// } + auto xml_buffer_size = RECEIVE_SCTP_BUFFER_SIZE * 2; + unsigned char xml_buffer[RECEIVE_SCTP_BUFFER_SIZE * 2]; + // encode to xml + auto 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)xml_buffer_size) { + mdclog_write(MDCLOG_ERR, "Buffer of size %d is to small for %s, at %s line %d", + (int) xml_buffer_size, + asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name, __func__, __LINE__); + } else { + if (mdclog_level_get() >= MDCLOG_DEBUG) { + mdclog_write(MDCLOG_DEBUG, "Encoding E2SM %s PDU number %d : %s", + asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name, + index++, + xml_buffer); + } + string runFuncs = (char *)(xml_buffer); + runFunXML_v.emplace_back(runFuncs); + } + } + } + return 0; +} @@ -1278,7 +1352,6 @@ int collectSetupRequestData(E2AP_PDU_t *pdu, Sctp_Map_t *sctpMap, ReportingMessages_t &message, vector &runFunDEFXML_v) { - auto index = 0; 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]; @@ -1298,66 +1371,11 @@ int collectSetupRequestData(E2AP_PDU_t *pdu, if (ie->id == ProtocolIE_ID_id_RANfunctionsAdded) { if (ie->value.present == E2setupRequestIEs__value_PR_RANfunctions_List) { if (mdclog_level_get() >= MDCLOG_DEBUG) { - mdclog_write(MDCLOG_DEBUG, "Run function list have %d entries and size %d", - ie->value.choice.RANfunctions_List.list.count, - ie->value.choice.RANfunctions_List.list.size); + mdclog_write(MDCLOG_DEBUG, "Run function list have %d entries", + ie->value.choice.RANfunctions_List.list.count); } - for (auto j = 0; j < ie->value.choice.RANfunctions_List.list.count; j++) { - auto *raNfunctionItemIEs = (RANfunction_ItemIEs_t *)ie->value.choice.RANfunctions_List.list.array[j]; - if (raNfunctionItemIEs->id == ProtocolIE_ID_id_RANfunction_Item && - (raNfunctionItemIEs->value.present == RANfunction_ItemIEs__value_PR_RANfunction_Item)) { - // 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, - raNfunctionItemIEs->value.choice.RANfunction_Item.ranFunctionDefinition.buf, - raNfunctionItemIEs->value.choice.RANfunction_Item.ranFunctionDefinition.size); - if (rval.code != RC_OK) { - mdclog_write(MDCLOG_ERR, "Error %d Decoding (unpack) E2SM message from : %s", - rval.code, - asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name); - return -1; - } - -// if (mdclog_level_get() >= MDCLOG_DEBUG) { -// char *printBuffer; -// size_t size; -// FILE *stream = open_memstream(&printBuffer, &size); -// asn_fprint(stream, &asn_DEF_E2SM_gNB_NRT_RANfunction_Definition, ranFunDef); -// mdclog_write(MDCLOG_DEBUG, "Encoding E2SM %s PDU past : %s", -// asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name, -// printBuffer); -// } - auto xml_buffer_size = RECEIVE_SCTP_BUFFER_SIZE * 2; - unsigned char xml_buffer[RECEIVE_SCTP_BUFFER_SIZE * 2]; - // encode to xml - auto 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)xml_buffer_size) { - mdclog_write(MDCLOG_ERR, "Buffer of size %d is to small for %s, at %s line %d", - (int) xml_buffer_size, - asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name, __func__, __LINE__); - } else { - if (mdclog_level_get() >= MDCLOG_DEBUG) { - mdclog_write(MDCLOG_DEBUG, "Encoding E2SM %s PDU number %d : %s", - asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name, - index++, - xml_buffer); - } - string runFuncs = (char *)(xml_buffer); - runFunDEFXML_v.emplace_back(runFuncs); - } - - } + if (RAN_Function_list_To_Vector(ie->value.choice.RANfunctions_List, runFunDEFXML_v) != 0 ) { + return -1; } } } @@ -1386,37 +1404,43 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu, switch (procedureCode) { case ProcedureCode_id_E2setup: { if (logLevel >= MDCLOG_DEBUG) { - mdclog_write(MDCLOG_DEBUG, "Got E2setup\n"); + mdclog_write(MDCLOG_DEBUG, "Got E2setup"); } // 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)); + break; } else if (er.encoded > (ssize_t) setup_xml_buffer_size) { mdclog_write(MDCLOG_ERR, "Buffer of size %d is to small for %s, at %s line %d", (int)setup_xml_buffer_size, asn_DEF_E2AP_PDU.name, __func__, __LINE__); + break; } std::string xmlString(setup_xml_buffer_size, setup_xml_buffer_size + er.encoded); vector runFunDEFXML_v; runFunDEFXML_v.clear(); - - auto ret = collectSetupRequestData(pdu, sctpMap, message, runFunDEFXML_v); - if (ret != 0) { + if (collectSetupRequestData(pdu, sctpMap, message, runFunDEFXML_v) != 0) { 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, runFunDEFXML_v); break; } + case ProcedureCode_id_RICserviceUpdate: { + if (logLevel >= MDCLOG_DEBUG) { + mdclog_write(MDCLOG_DEBUG, "Got RICserviceUpdate %s", message.message.enodbName); + } + if (sendRequestToXapp(message, RIC_SERVICE_UPDATE, rmrMessageBuffer) != 0) { + mdclog_write(MDCLOG_ERR, "RIC_SERVICE_UPDATE message failed to send to xAPP"); + } + break; + } case ProcedureCode_id_ErrorIndication: { if (logLevel >= MDCLOG_DEBUG) { mdclog_write(MDCLOG_DEBUG, "Got ErrorIndication %s", message.message.enodbName); @@ -1492,15 +1516,6 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu, } break; } - case ProcedureCode_id_RICserviceUpdate: { - if (logLevel >= MDCLOG_DEBUG) { - mdclog_write(MDCLOG_DEBUG, "Got RICserviceUpdate %s", message.message.enodbName); - } - if (sendRequestToXapp(message, RIC_SERVICE_UPDATE, rmrMessageBuffer) != 0) { - mdclog_write(MDCLOG_ERR, "RIC_SERVICE_UPDATE message failed to send to xAPP"); - } - break; - } case ProcedureCode_id_RICsubscription: { if (logLevel >= MDCLOG_DEBUG) { mdclog_write(MDCLOG_DEBUG, "Got RICsubscription %s", message.message.enodbName); @@ -1582,7 +1597,9 @@ void asnSuccsesfulMsg(E2AP_PDU_t *pdu, if (ie->value.present == RICcontrolAcknowledge_IEs__value_PR_RICrequestID) { message.message.messageType = rmrMessageBuffer.sendMessage->mtype = RIC_CONTROL_ACK; rmrMessageBuffer.sendMessage->state = 0; - rmrMessageBuffer.sendMessage->sub_id = (int) ie->value.choice.RICrequestID.ricRequestorID; +// rmrMessageBuffer.sendMessage->sub_id = (int) ie->value.choice.RICrequestID.ricRequestorID; + rmrMessageBuffer.sendMessage->sub_id = (int)ie->value.choice.RICrequestID.ricInstanceID; + static unsigned char tx[32]; snprintf((char *) tx, sizeof tx, "%15ld", transactionCounter++); rmr_bytes2xact(rmrMessageBuffer.sendMessage, tx, strlen((const char *) tx)); @@ -1626,7 +1643,8 @@ void asnSuccsesfulMsg(E2AP_PDU_t *pdu, (unsigned char *)message.message.enodbName, strlen(message.message.enodbName)); rmrMessageBuffer.sendMessage->state = 0; - rmrMessageBuffer.sendMessage->sub_id = (int) ie->value.choice.RICrequestID.ricRequestorID; +// rmrMessageBuffer.sendMessage->sub_id = (int)ie->value.choice.RICrequestID.ricRequestorID; + rmrMessageBuffer.sendMessage->sub_id = (int)ie->value.choice.RICrequestID.ricInstanceID; if (mdclog_level_get() >= MDCLOG_DEBUG) { mdclog_write(MDCLOG_DEBUG, "RIC sub id = %d, message type = %d", rmrMessageBuffer.sendMessage->sub_id, @@ -1745,7 +1763,8 @@ void asnUnSuccsesfulMsg(E2AP_PDU_t *pdu, if (ie->value.present == RICcontrolFailure_IEs__value_PR_RICrequestID) { message.message.messageType = rmrMessageBuffer.sendMessage->mtype = RIC_CONTROL_FAILURE; rmrMessageBuffer.sendMessage->state = 0; - rmrMessageBuffer.sendMessage->sub_id = (int) ie->value.choice.RICrequestID.ricRequestorID; +// rmrMessageBuffer.sendMessage->sub_id = (int)ie->value.choice.RICrequestID.ricRequestorID; + rmrMessageBuffer.sendMessage->sub_id = (int)ie->value.choice.RICrequestID.ricInstanceID; static unsigned char tx[32]; snprintf((char *) tx, sizeof tx, "%15ld", transactionCounter++); rmr_bytes2xact(rmrMessageBuffer.sendMessage, tx, strlen((const char *) tx)); @@ -1786,7 +1805,8 @@ void asnUnSuccsesfulMsg(E2AP_PDU_t *pdu, (unsigned char *)message.message.enodbName, strlen(message.message.enodbName)); rmrMessageBuffer.sendMessage->state = 0; - rmrMessageBuffer.sendMessage->sub_id = (int) ie->value.choice.RICrequestID.ricRequestorID; +// rmrMessageBuffer.sendMessage->sub_id = (int)ie->value.choice.RICrequestID.ricRequestorID; + rmrMessageBuffer.sendMessage->sub_id = (int)ie->value.choice.RICrequestID.ricInstanceID; if (mdclog_level_get() >= MDCLOG_DEBUG) { mdclog_write(MDCLOG_DEBUG, "RIC sub id = %d, message type = %d", rmrMessageBuffer.sendMessage->sub_id, @@ -1915,7 +1935,7 @@ void getRmrContext(sctp_params_t &pSctpParams) { } } -int BuildPERSetupResponseMessaeFromXML(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer) { +int PER_FromXML(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer) { E2AP_PDU_t *pdu; if (mdclog_level_get() >= MDCLOG_DEBUG) { @@ -1987,7 +2007,7 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, rmr_get_meid(rmrMessageBuffer.rcvMessage, (unsigned char *)message.message.enodbName); switch (rmrMessageBuffer.rcvMessage->mtype) { case RIC_E2_SETUP_RESP : { - if (BuildPERSetupResponseMessaeFromXML(message, rmrMessageBuffer) != 0) { + if (PER_FromXML(message, rmrMessageBuffer) != 0) { break; } @@ -1998,7 +2018,7 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, break; } case RIC_E2_SETUP_FAILURE : { - if (BuildPERSetupResponseMessaeFromXML(message, rmrMessageBuffer) != 0) { + if (PER_FromXML(message, rmrMessageBuffer) != 0) { break; } if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) { @@ -2036,6 +2056,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, break; } case RIC_SERVICE_QUERY: { + if (PER_FromXML(message, rmrMessageBuffer) != 0) { + break; + } if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) { mdclog_write(MDCLOG_ERR, "Failed to send RIC_SERVICE_QUERY"); return -6; @@ -2043,6 +2066,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, break; } case RIC_SERVICE_UPDATE_ACK: { + if (PER_FromXML(message, rmrMessageBuffer) != 0) { + break; + } if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) { mdclog_write(MDCLOG_ERR, "Failed to send RIC_SERVICE_UPDATE_ACK"); return -6; @@ -2050,6 +2076,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap, break; } case RIC_SERVICE_UPDATE_FAILURE: { + if (PER_FromXML(message, rmrMessageBuffer) != 0) { + break; + } if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) { mdclog_write(MDCLOG_ERR, "Failed to send RIC_SERVICE_UPDATE_FAILURE"); return -6; -- 2.16.6