Call Process ID and Control Request Acknowledge IEs are made optional
[ric-app/admin.git] / src / E2AP-c / e2ap_indication.cc
index 237c80c..d0b262e 100644 (file)
 
 #include <e2ap_indication.hpp>
 
-// Set up the initiating message and also allocate protocolIEs in container
-// Note : this bypasses requirement to use ASN_SEQUENCE_ADD. We can directly
-// assign pointers to the array in ProtocolIE. However, this also leaves us on the
-// hook to manually clear the memory
-
+// Set up memory allocations for each IE for encoding
+// We are responsible for memory management for each IE for encoding
+// Hence destructor should clear out memory
+// When decoding, we rely on asn1c macro (ASN_STRUCT_FREE to be called
+// for releasing memory by external calling function)
 ric_indication::ric_indication(void){
 
   e2ap_pdu_obj = 0;
@@ -199,6 +199,20 @@ bool ric_indication::set_fields(E2N_InitiatingMessage_t *initMsg, ric_indication
   ricmsg_ie->size = dinput.indication_msg_size;
   ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index]));
 
+
+  // optional call process id ..
+  if (dinput.call_process_id_size > 0){
+    ie_index = 7;
+    E2N_RICindication_IEs_t *ies_ind_callprocessid = &IE_array[ie_index];
+    ies_ind_callprocessid->criticality = E2N_Criticality_reject;
+    ies_ind_callprocessid->id = E2N_ProtocolIE_ID_id_RICcallProcessID;
+    ies_ind_callprocessid->value.present = E2N_RICindication_IEs__value_PR_RICcallProcessID;
+    E2N_RICcallProcessID_t *riccallprocessid_ie = &ies_ind_callprocessid->value.choice.RICcallProcessID;
+    riccallprocessid_ie->buf = dinput.indication_msg;
+    riccallprocessid_ie->size = dinput.indication_msg_size;
+    ASN_SEQUENCE_ADD(&(ric_indication->protocolIEs), &(IE_array[ie_index]));
+  }
+  
   return true;
 
 };
@@ -249,6 +263,10 @@ bool ric_indication:: get_fields(E2N_InitiatingMessage_t * init_msg,  ric_indica
       case (E2N_ProtocolIE_ID_id_RICactionID):
        dout.action_id = memb_ptr->value.choice.RICactionID;
        break;
+
+      case (E2N_ProtocolIE_ID_id_RICcallProcessID):
+       dout.call_process_id = memb_ptr->value.choice.RICcallProcessID.buf;
+       dout.call_process_id_size = memb_ptr->value.choice.RICcallProcessID.size;
        
       default:
        break;