Adding initial code jy.oak@samsung.com
[ric-app/kpimon.git] / src / E2AP-c / e2ap_indication.cc
diff --git a/src/E2AP-c/e2ap_indication.cc b/src/E2AP-c/e2ap_indication.cc
new file mode 100755 (executable)
index 0000000..a7aef0e
--- /dev/null
@@ -0,0 +1,131 @@
+/*\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