--- /dev/null
+/*\r
+==================================================================================\r
+\r
+ Copyright (c) 2018-2019 AT&T Intellectual Property.\r
+\r
+ Licensed under the Apache License, Version 2.0 (the "License");\r
+ you may not use this file except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+==================================================================================\r
+*/\r
+\r
+#include <e2ap_indication.hpp>\r
+\r
+// Set up the initiating message and also allocate protocolIEs in container\r
+// Note : this bypasses requirement to use ASN_SEQUENCE_ADD. We can directly\r
+// assign pointers to the array in ProtocolIE. However, this also leaves us on the\r
+// hook to manually clear the memory\r
+\r
+ric_indication::ric_indication(void){\r
+\r
+ e2ap_pdu_obj = 0;\r
+ e2ap_pdu_obj = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t));\r
+ assert(e2ap_pdu_obj != 0);\r
+\r
+ initMsg = 0;\r
+ initMsg = (InitiatingMessage_t * )calloc(1, sizeof(InitiatingMessage_t));\r
+ assert(initMsg != 0);\r
+\r
+ IE_array = 0;\r
+ IE_array = (RICindication_IEs_t *)calloc(NUM_INDICATION_IES, sizeof(RICindication_IEs_t));\r
+ assert(IE_array != 0);\r
+\r
+ e2ap_pdu_obj->present = E2AP_PDU_PR_initiatingMessage;\r
+ e2ap_pdu_obj->choice.initiatingMessage = initMsg;\r
+\r
+ RICindication_t * ric_indication = &(initMsg->value.choice.RICindication);\r
+ for(int i = 0; i < NUM_INDICATION_IES; i++){\r
+ ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[i]));\r
+ }\r
+ \r
+ \r
+ \r
+};\r
+\r
+\r
+\r
+// Clear assigned protocolIE list from RIC indication IE container\r
+ric_indication::~ric_indication(void){\r
+\r
+ mdclog_write(MDCLOG_INFO, "Freeing E2AP Indication object memory");\r
+ RICindication_t *ricIndication = &(initMsg->value.choice.RICindication);\r
+ for(int i = 0; i < ricIndication->protocolIEs.list.size; i++){\r
+ ricIndication->protocolIEs.list.array[i] = 0;\r
+ }\r
+ if (ricIndication->protocolIEs.list.size > 0){\r
+ free(ricIndication->protocolIEs.list.array);\r
+ ricIndication->protocolIEs.list.array = 0;\r
+ ricIndication->protocolIEs.list.count = 0;\r
+ ricIndication->protocolIEs.list.size = 0;\r
+ }\r
+ \r
+ free(IE_array);\r
+ ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj);\r
+ mdclog_write(MDCLOG_INFO, "Freed E2AP Indication object mempory");\r
+}\r
+\r
+bool ric_indication:: get_fields(InitiatingMessage_t * init_msg, E2APRicIndication &dout)\r
+{\r
+ if (init_msg == 0){\r
+ error_string = "Invalid reference for E2AP Indication message in get_fields";\r
+ return false;\r
+ }\r
+ \r
+ \r
+ for(int edx = 0; edx < init_msg->value.choice.RICindication.protocolIEs.list.count; edx++) {\r
+ RICindication_IEs_t *memb_ptr = init_msg->value.choice.RICindication.protocolIEs.list.array[edx];\r
+ \r
+ switch(memb_ptr->id)\r
+ {\r
+ case (ProtocolIE_ID_id_RICindicationHeader):\r
+ dout.indication_header = memb_ptr->value.choice.RICindicationHeader.buf;\r
+ dout.indication_header_size = memb_ptr->value.choice.RICindicationHeader.size;\r
+ break;\r
+ \r
+ case (ProtocolIE_ID_id_RICindicationMessage):\r
+ dout.indication_msg = memb_ptr->value.choice.RICindicationMessage.buf;\r
+ dout.indication_msg_size = memb_ptr->value.choice.RICindicationMessage.size;\r
+ break;\r
+ \r
+ case (ProtocolIE_ID_id_RICrequestID):\r
+ dout.req_id = memb_ptr->value.choice.RICrequestID.ricRequestorID;\r
+ dout.req_seq_no = memb_ptr->value.choice.RICrequestID.ricRequestSequenceNumber;\r
+ break;\r
+ \r
+ case (ProtocolIE_ID_id_RANfunctionID):\r
+ dout.func_id = memb_ptr->value.choice.RANfunctionID;\r
+ break;\r
+ \r
+ case (ProtocolIE_ID_id_RICindicationSN):\r
+ dout.indication_sn = memb_ptr->value.choice.RICindicationSN;\r
+ break;\r
+ \r
+ case (ProtocolIE_ID_id_RICindicationType):\r
+ dout.indication_type = memb_ptr->value.choice.RICindicationType;\r
+ break;\r
+ \r
+ case (ProtocolIE_ID_id_RICactionID):\r
+ dout.action_id = memb_ptr->value.choice.RICactionID;\r
+ break;\r
+ \r
+ default:\r
+ break;\r
+ }\r
+ \r
+ }\r
+ \r
+ return true;\r
+\r
+}\r
+\r
+InitiatingMessage_t * ric_indication::get_message(void) {\r
+ return initMsg;\r
+}\r