+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 *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];
+ // 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);
+ 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) {
+ mdclog_write(MDCLOG_ERR, "Buffer of size %d is to small for %s",
+ (int) buffer_size,
+ asn_DEF_E2AP_PDU.name);
+ } else {
+ if (logLevel >= MDCLOG_DEBUG) {
+ mdclog_write(MDCLOG_DEBUG, "Buffer of size %d, data = %s", (int) er.encoded, buffer);
+ }
+ // TODO send to RMR
+ message.message.messageType = rmrMsg->mtype = RIC_X2_SETUP_REQ;
+ rmrMsg->state = 0;
+ rmr_bytes2meid(rmrMsg, (unsigned char *) message.message.enodbName, strlen(message.message.enodbName));
+
+ static unsigned char tx[32];
+ snprintf((char *) tx, sizeof tx, "%15ld", transactionCounter++);
+ rmr_bytes2xact(rmrMsg, tx, strlen((const char *) tx));
+
+ rmrMsg = rmr_send_msg(rmrMessageBuffer.rmrCtx, rmrMsg);
+ if (rmrMsg == nullptr) {
+ mdclog_write(MDCLOG_ERR, "RMR failed to send returned nullptr");
+ } else if (rmrMsg->state != 0) {
+ char meid[RMR_MAX_MEID]{};
+ if (rmrMsg->state == RMR_ERR_RETRY) {
+ usleep(5);
+ rmrMsg->state = 0;
+ mdclog_write(MDCLOG_INFO, "RETRY sending Message %d to Xapp from %s",
+ rmrMsg->mtype, rmr_get_meid(rmrMsg, (unsigned char *) meid));
+ rmrMsg = rmr_send_msg(rmrMessageBuffer.rmrCtx, rmrMsg);
+ if (rmrMsg == nullptr) {
+ mdclog_write(MDCLOG_ERR, "RMR failed send returned nullptr");
+ } else if (rmrMsg->state != 0) {
+ mdclog_write(MDCLOG_ERR,
+ "RMR Retry failed %s sending request %d to Xapp from %s",
+ translateRmrErrorMessages(rmrMsg->state).c_str(),
+ rmrMsg->mtype,
+ rmr_get_meid(rmrMsg, (unsigned char *) meid));
+ }
+ } else {
+ mdclog_write(MDCLOG_ERR, "RMR failed: %s. sending request %d to Xapp from %s",
+ translateRmrErrorMessages(rmrMsg->state).c_str(),
+ rmrMsg->mtype,
+ rmr_get_meid(rmrMsg, (unsigned char *) meid));
+ }
+ }
+ message.peerInfo->gotSetup = true;
+ buildJsonMessage(message);
+ }
+
+}