Initial commit of Admission Control xAPP and E2AP/X2AP definitions
[ric-app/admin.git] / src / E2AP-c / subscription / 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 = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t));
29   assert(e2ap_pdu_obj != 0);
30
31   initMsg = (InitiatingMessage_t * )calloc(1, sizeof(InitiatingMessage_t));
32   assert(initMsg != 0);
33   
34   IE_array = (RICsubscriptionDeleteRequest_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_IES, sizeof(RICsubscriptionDeleteRequest_IEs_t));
35   assert(IE_array != 0);
36   
37   
38 };
39
40
41
42 // Clear assigned protocolIE list from RIC indication IE container
43 subscription_delete::~subscription_delete(void){
44     
45   mdclog_write(MDCLOG_INFO, "Freeing subscription delete request object memory");
46   RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest);
47   
48   for(int i = 0; i < subscription_delete->protocolIEs.list.size; i++){
49     subscription_delete->protocolIEs.list.array[i] = 0;
50   }
51
52   if (subscription_delete->protocolIEs.list.size > 0){
53     free(subscription_delete->protocolIEs.list.array);
54     subscription_delete->protocolIEs.list.count = 0;
55     subscription_delete->protocolIEs.list.size = 0;
56     subscription_delete->protocolIEs.list.array = 0;
57   }
58   
59   free(IE_array);
60   free(initMsg);
61   e2ap_pdu_obj->choice.initiatingMessage = 0;
62
63   ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj);
64   mdclog_write(MDCLOG_INFO, "Freed subscription delete request object memory");
65   
66
67 };
68
69
70 bool subscription_delete::encode_e2ap_subscription(unsigned char *buf, size_t *size,  subscription_helper &dinput){
71
72   e2ap_pdu_obj->choice.initiatingMessage = initMsg;
73   e2ap_pdu_obj->present = E2AP_PDU_PR_initiatingMessage;
74   set_fields(e2ap_pdu_obj->choice.initiatingMessage, dinput);
75   
76   //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj);
77   
78   int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len);
79   if(ret_constr){
80     error_string.assign(errbuf, errbuf_len);
81     error_string = "Constraints failed for encoding subscription delete request. Reason = " + error_string;
82     return false;
83   }
84   
85   asn_enc_rval_t res = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size);
86     
87   if(res.encoded == -1){
88     error_string.assign(strerror(errno));
89     error_string = "Error encoding Subscription Delete Request. Reason = " + error_string;
90     return false;
91   }
92   else {
93     if(*size < res.encoded){
94       std::stringstream ss;
95       ss  <<"Error encoding Subscription Delete Request . Reason =  encoded pdu size " << res.encoded << " exceeds buffer size " << *size << std::endl;
96       error_string = ss.str();
97       res.encoded = -1;
98       return false;
99     }
100   }
101     
102   *size = res.encoded;
103   return true;
104     
105 }
106
107
108 bool  subscription_delete::set_fields(InitiatingMessage_t *ref_initMsg, subscription_helper &helper){
109   unsigned int ie_index;
110
111   if (ref_initMsg == 0){
112     error_string = "Invalid reference for initating message ";
113     return false;
114   }
115   
116   ref_initMsg->procedureCode = ProcedureCode_id_ricSubscriptionDelete;
117   ref_initMsg->criticality = Criticality_reject;
118   ref_initMsg->value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
119
120   RICsubscriptionDeleteRequest_t * subscription_delete = &(ref_initMsg->value.choice.RICsubscriptionDeleteRequest);
121
122   // Reset field count for protocolIEs
123   subscription_delete->protocolIEs.list.count = 0;
124   
125   ie_index = 0;
126   RICsubscriptionDeleteRequest_IEs_t *ies_ricreq = &IE_array[ie_index];
127   ies_ricreq->criticality = Criticality_reject;
128   ies_ricreq->id = ProtocolIE_ID_id_RICrequestID;
129   ies_ricreq->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RICrequestID;
130   RICrequestID_t *ricrequest_ie = &ies_ricreq->value.choice.RICrequestID;
131   ricrequest_ie->ricRequestorID = helper.get_request_id();
132   ricrequest_ie->ricRequestSequenceNumber = helper.get_req_seq();
133
134   ASN_SEQUENCE_ADD(&subscription_delete->protocolIEs, ies_ricreq);
135   
136   ie_index = 1;
137   RICsubscriptionDeleteRequest_IEs_t *ies_ranfunc = &IE_array[ie_index];
138   ies_ranfunc->criticality = Criticality_reject;
139   ies_ranfunc->id = ProtocolIE_ID_id_RANfunctionID;
140   ies_ranfunc->value.present = RICsubscriptionDeleteRequest_IEs__value_PR_RANfunctionID;
141   RANfunctionID_t *ranfunction_ie = &ies_ranfunc->value.choice.RANfunctionID;
142   *ranfunction_ie = helper.get_function_id();
143   ASN_SEQUENCE_ADD(&subscription_delete->protocolIEs, ies_ranfunc);
144   
145   return true;
146 };
147
148
149    
150
151 bool  subscription_delete:: get_fields(InitiatingMessage_t * init_msg,  subscription_helper & dout)
152 {
153
154   if (init_msg == 0){
155     error_string = "Invalid reference for initiating message for get string";
156     return false;
157   }
158   
159   RICrequestID_t *requestid;
160   RANfunctionID_t * ranfunctionid;
161     
162   for(int edx = 0; edx < init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.count; edx++) {
163     RICsubscriptionDeleteRequest_IEs_t *memb_ptr = init_msg->value.choice.RICsubscriptionDeleteRequest.protocolIEs.list.array[edx];
164     
165     switch(memb_ptr->id)
166       {
167       case (ProtocolIE_ID_id_RICrequestID):
168         requestid = &memb_ptr->value.choice.RICrequestID;
169         dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber);
170         break;
171           
172       case (ProtocolIE_ID_id_RANfunctionID):
173         ranfunctionid = &memb_ptr->value.choice.RANfunctionID;
174         dout.set_function_id(*ranfunctionid);
175         break;
176         
177       }
178     
179   //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu);
180   }
181
182   return true;
183 }
184
185
186