E2AP Abstraction Changes
[ric-app/hw.git] / src / xapp-formats / e2ap / subscription_delete_request.cc
1
2
3 /*
4 ==================================================================================
5         Copyright (c) 2018-2019 AT&T Intellectual Property.
6
7    Licensed under the Apache License, Version 2.0 (the "License");
8    you may not use this file except in compliance with the License.
9    You may obtain a copy of the License at
10
11        http://www.apache.org/licenses/LICENSE-2.0
12
13    Unless required by applicable law or agreed to in writing, software
14    distributed under the License is distributed on an "AS IS" BASIS,
15    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16    See the License for the specific language governing permissions and
17    limitations under the License.
18 ==================================================================================
19 */
20
21
22 #include "subscription_delete_request.hpp"
23   
24 subscription_delete::subscription_delete(void){
25
26   _name = "default";
27   
28   e2ap_pdu_obj = (E2N_E2AP_PDU_t * )calloc(1, sizeof(E2N_E2AP_PDU_t));
29   assert(e2ap_pdu_obj != 0);
30
31   initMsg = (E2N_InitiatingMessage_t * )calloc(1, sizeof(E2N_InitiatingMessage_t));
32   assert(initMsg != 0);
33   
34   IE_array = (E2N_RICsubscriptionDeleteRequest_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_IES, sizeof(E2N_RICsubscriptionDeleteRequest_IEs_t));
35   assert(IE_array != 0);
36   
37   E2N_RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest);
38   for(int i = 0; i < NUM_SUBSCRIPTION_DELETE_IES; i++){
39     ASN_SEQUENCE_ADD(&subscription_delete->protocolIEs, &(IE_array[i]));
40   }
41   
42 };
43
44
45
46 // Clear assigned protocolIE list from RIC indication IE container
47 subscription_delete::~subscription_delete(void){
48     
49   mdclog_write(MDCLOG_DEBUG, "Freeing subscription delete request object memory");
50   E2N_RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest);
51   
52   for(int i = 0; i < subscription_delete->protocolIEs.list.size; i++){
53     subscription_delete->protocolIEs.list.array[i] = 0;
54   }
55
56   if (subscription_delete->protocolIEs.list.size > 0){
57     free(subscription_delete->protocolIEs.list.array);
58     subscription_delete->protocolIEs.list.count = 0;
59     subscription_delete->protocolIEs.list.size = 0;
60     subscription_delete->protocolIEs.list.array = 0;
61   }
62   
63   free(IE_array);
64   free(initMsg);
65   e2ap_pdu_obj->choice.initiatingMessage = 0;
66
67   ASN_STRUCT_FREE(asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj);
68   mdclog_write(MDCLOG_DEBUG, "Freed subscription delete request object memory");
69   
70
71 };
72
73
74 bool subscription_delete::encode_e2ap_subscription(unsigned char *buf, size_t *size,  subscription_helper &dinput){
75
76   e2ap_pdu_obj->choice.initiatingMessage = initMsg;
77   e2ap_pdu_obj->present = E2N_E2AP_PDU_PR_initiatingMessage;
78   set_fields( dinput);
79
80   initMsg->procedureCode = E2N_ProcedureCode_id_ricSubscriptionDelete;
81   initMsg->criticality = E2N_Criticality_reject;
82   initMsg->value.present = E2N_InitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
83
84   //xer_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj);
85   
86   int ret_constr = asn_check_constraints(&asn_DEF_E2N_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len);
87   if(ret_constr){
88     error_string.assign(errbuf, errbuf_len);
89     error_string = "Constraints failed for encoding subscription delete request. Reason = " + error_string;
90     return false;
91   }
92   
93   asn_enc_rval_t res = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2N_E2AP_PDU, e2ap_pdu_obj, buf, *size);
94     
95   if(res.encoded == -1){
96     error_string.assign(strerror(errno));
97     error_string = "Error encoding Subscription Delete Request. Reason = " + error_string;
98     return false;
99   }
100   else {
101     if(*size < res.encoded){
102       std::stringstream ss;
103       ss  <<"Error encoding Subscription Delete Request . Reason =  encoded pdu size " << res.encoded << " exceeds buffer size " << *size << std::endl;
104       error_string = ss.str();
105       res.encoded = -1;
106       return false;
107     }
108   }
109     
110   *size = res.encoded;
111   return true;
112     
113 }
114
115
116 bool  subscription_delete::set_fields( subscription_helper &helper){
117   unsigned int ie_index;
118   
119   ie_index = 0;
120   E2N_RICsubscriptionDeleteRequest_IEs_t *ies_ricreq = &IE_array[ie_index];
121   ies_ricreq->criticality = E2N_Criticality_reject;
122   ies_ricreq->id = E2N_ProtocolIE_ID_id_RICrequestID;
123   ies_ricreq->value.present = E2N_RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
124   E2N_RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID;
125   ricrequest_ie->ricRequestorID = helper.get_request_id();
126   ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq();
127
128
129   
130   ie_index = 1;
131   E2N_RICsubscriptionDeleteRequest_IEs_t *ies_ranfunc = &IE_array[ie_index];
132   ies_ranfunc->criticality = E2N_Criticality_reject;
133   ies_ranfunc->id = E2N_ProtocolIE_ID_id_RANfunctionID;
134   ies_ranfunc->value.present = E2N_RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
135   E2N_RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID;
136   *ranfunction_ie = helper.get_function_id();
137
138   
139   return true;
140 };
141
142
143    
144
145 bool  subscription_delete:: get_fields(E2N_InitiatingMessage_t * init_msg,  subscription_helper & dout)
146 {
147
148   if (init_msg == 0){
149     error_string = "Invalid reference for initiating message for get string";
150     return false;
151   }
152   
153   E2N_RICrequestID_t *requestid;
154   E2N_RANfunctionID_t * ranfunctionid;
155     
156   for(int edx = 0; edx < init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.count; edx++) {
157     E2N_RICsubscriptionDeleteRequest_IEs_t *memb_ptr = init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.array[edx];
158     
159     switch(memb_ptr->id)
160       {
161       case (E2N_ProtocolIE_ID_id_RICrequestID):
162         requestid = &memb_ptr->value.choice.RICrequestID;
163         dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber);
164         break;
165           
166       case (E2N_ProtocolIE_ID_id_RANfunctionID):
167         ranfunctionid = &memb_ptr->value.choice.RANfunctionID;
168         dout.set_function_id(*ranfunctionid);
169         break;
170         
171       }
172     
173   //asn_fprint(stdout, &asn_DEF_E2N_E2AP_PDU, e2pdu);
174   }
175
176   return true;
177 }
178
179
180