4 ==================================================================================
5 Copyright (c) 2018-2019 AT&T Intellectual Property.
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
11 http://www.apache.org/licenses/LICENSE-2.0
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 ==================================================================================
22 #include "subscription_delete_request.hpp"
24 subscription_delete::subscription_delete(void){
28 e2ap_pdu_obj = (E2AP_PDU_t * )calloc(1, sizeof(E2AP_PDU_t));
29 assert(e2ap_pdu_obj != 0);
31 initMsg = (InitiatingMessage_t * )calloc(1, sizeof(InitiatingMessage_t));
34 IE_array = (RICsubscriptionDeleteRequest_IEs_t *)calloc(NUM_SUBSCRIPTION_DELETE_IES, sizeof(RICsubscriptionDeleteRequest_IEs_t));
35 assert(IE_array != 0);
42 // Clear assigned protocolIE list from RIC indication IE container
43 subscription_delete::~subscription_delete(void){
45 mdclog_write(MDCLOG_INFO, "Freeing subscription delete request object memory");
46 RICsubscriptionDeleteRequest_t * subscription_delete = &(initMsg->value.choice.RICsubscriptionDeleteRequest);
48 for(int i = 0; i < subscription_delete->protocolIEs.list.size; i++){
49 subscription_delete->protocolIEs.list.array[i] = 0;
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;
61 e2ap_pdu_obj->choice.initiatingMessage = 0;
63 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, e2ap_pdu_obj);
64 mdclog_write(MDCLOG_INFO, "Freed subscription delete request object memory");
70 bool subscription_delete::encode_e2ap_subscription(unsigned char *buf, size_t *size, subscription_helper &dinput){
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);
76 //xer_fprint(stdout, &asn_DEF_E2AP_PDU, e2ap_pdu_obj);
78 int ret_constr = asn_check_constraints(&asn_DEF_E2AP_PDU, (void *) e2ap_pdu_obj, errbuf, &errbuf_len);
80 error_string.assign(errbuf, errbuf_len);
81 error_string = "Constraints failed for encoding subscription delete request. Reason = " + error_string;
85 asn_enc_rval_t res = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, e2ap_pdu_obj, buf, *size);
87 if(res.encoded == -1){
88 error_string.assign(strerror(errno));
89 error_string = "Error encoding Subscription Delete Request. Reason = " + error_string;
93 if(*size < res.encoded){
95 ss <<"Error encoding Subscription Delete Request . Reason = encoded pdu size " << res.encoded << " exceeds buffer size " << *size << std::endl;
96 error_string = ss.str();
108 bool subscription_delete::set_fields(InitiatingMessage_t *ref_initMsg, subscription_helper &helper){
109 unsigned int ie_index;
111 if (ref_initMsg == 0){
112 error_string = "Invalid reference for initating message ";
116 ref_initMsg->procedureCode = ProcedureCode_id_ricSubscriptionDelete;
117 ref_initMsg->criticality = Criticality_reject;
118 ref_initMsg->value.present = InitiatingMessage__value_PR_RICsubscriptionDeleteRequest;
120 RICsubscriptionDeleteRequest_t * subscription_delete = &(ref_initMsg->value.choice.RICsubscriptionDeleteRequest);
122 // Reset field count for protocolIEs
123 subscription_delete->protocolIEs.list.count = 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();
134 ASN_SEQUENCE_ADD(&subscription_delete->protocolIEs, ies_ricreq);
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);
151 bool subscription_delete:: get_fields(InitiatingMessage_t * init_msg, subscription_helper & dout)
155 error_string = "Invalid reference for initiating message for get string";
159 RICrequestID_t *requestid;
160 RANfunctionID_t * ranfunctionid;
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];
167 case (ProtocolIE_ID_id_RICrequestID):
168 requestid = &memb_ptr->value.choice.RICrequestID;
169 dout.set_request(requestid->ricRequestorID, requestid->ricRequestSequenceNumber);
172 case (ProtocolIE_ID_id_RANfunctionID):
173 ranfunctionid = &memb_ptr->value.choice.RANfunctionID;
174 dout.set_function_id(*ranfunctionid);
179 //asn_fprint(stdout, &asn_DEF_E2AP_PDU, e2pdu);