2 ==================================================================================
4 Copyright (c) 2019-2020 AT&T Intellectual Property.
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, softwares
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
22 * Created on: Apr 30, 2020
23 * Author: Shraboni Jana
25 /* Classes to handle E2 service model based on e2sm-HelloWorld-v001.asn */
27 #include "e2sm_subscription.hpp"
30 e2sm_subscription::e2sm_subscription(void){
32 memset(&event_fmt1, 0, sizeof(E2SM_HelloWorld_EventTriggerDefinition_Format1_t));
34 memset(&actn_fmt1, 0, sizeof(E2SM_HelloWorld_ActionDefinition_Format1_t));
38 ran_param = (RANparameter_Item_t*)calloc(1, sizeof(RANparameter_Item_t));
39 assert(ran_param != 0);
42 event_trigger = ( E2SM_HelloWorld_EventTriggerDefinition_t *)calloc(1, sizeof( E2SM_HelloWorld_EventTriggerDefinition_t));
43 assert(event_trigger != 0);
46 action_defn = (E2SM_HelloWorld_ActionDefinition_t*)calloc(1, sizeof(E2SM_HelloWorld_ActionDefinition_t));
47 assert(action_defn !=0);
52 e2sm_subscription::~e2sm_subscription(void){
54 mdclog_write(MDCLOG_DEBUG, "Freeing event trigger object memory");
56 event_trigger->choice.eventDefinition_Format1 = 0;
58 action_defn->choice.actionDefinition_Format1 = 0;
62 ASN_STRUCT_FREE(asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger);
63 ASN_STRUCT_FREE(asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn);
68 bool e2sm_subscription::encode_event_trigger(unsigned char *buf, size_t *size, e2sm_subscription_helper &helper){
70 ASN_STRUCT_RESET(asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger);
73 res = set_fields(event_trigger, helper);
79 int ret_constr = asn_check_constraints(&asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger, errbuf, &errbuf_len);
81 error_string.assign(&errbuf[0], errbuf_len);
85 xer_fprint(stdout, &asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger);
87 asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger, buf, *size);
89 if(retval.encoded == -1){
90 error_string.assign(strerror(errno));
93 else if (retval.encoded > *size){
95 ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl;
96 error_string = ss.str();
100 *size = retval.encoded;
106 bool e2sm_subscription::encode_action_defn(unsigned char *buf, size_t *size, e2sm_subscription_helper &helper){
109 res = set_fields(action_defn, helper);
115 int ret_constr = asn_check_constraints(&asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn, errbuf, &errbuf_len);
117 error_string.assign(&errbuf[0], errbuf_len);
121 xer_fprint(stdout, &asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn);
123 asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn, buf, *size);
125 if(retval.encoded == -1){
126 error_string.assign(strerror(errno));
129 else if (retval.encoded > *size){
130 std::stringstream ss;
131 ss <<"Error encoding action definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl;
132 error_string = ss.str();
136 *size = retval.encoded;
142 bool e2sm_subscription::set_fields(E2SM_HelloWorld_EventTriggerDefinition_t * ref_event_trigger, e2sm_subscription_helper & helper){
144 if(ref_event_trigger == 0){
145 error_string = "Invalid reference for Event Trigger Definition set fields";
149 ref_event_trigger->present = E2SM_HelloWorld_EventTriggerDefinition_PR_eventDefinition_Format1;
151 event_fmt1.triggerNature = helper.triger_nature;
153 ref_event_trigger->choice.eventDefinition_Format1 = &event_fmt1;
158 bool e2sm_subscription::set_fields(E2SM_HelloWorld_ActionDefinition_t * ref_action_defn, e2sm_subscription_helper & helper){
160 if(ref_action_defn == 0){
161 error_string = "Invalid reference for Event Action Definition set fields";
164 ref_action_defn->present = E2SM_HelloWorld_ActionDefinition_PR_actionDefinition_Format1;
167 ranparam_helper_t paramlst = helper.get_paramlist();
169 for(RANParam_Helper item:paramlst){
170 ran_param->ranParameter_ID = item.getran_helper()._param_id;
171 ran_param->ranParameter_Name.buf = item.getran_helper()._param_name;
172 ran_param->ranParameter_Name.size = item.getran_helper()._param_name_len;
173 ran_param->ranParameter_Test = item.getran_helper()._param_test;
174 ran_param->ranParameter_Value.buf = item.getran_helper()._param_value;
175 ran_param->ranParameter_Value.size = item.getran_helper()._param_value_len;
176 ASN_SEQUENCE_ADD(&(actn_fmt1.ranParameter_List->list.array), ran_param);
180 ref_action_defn->choice.actionDefinition_Format1 = &actn_fmt1;