51511a454f53b0619b2e6d0b9b234fda21098592
[ric-app/hw.git] / src / xapp-asn / e2sm / e2sm_subscription.cc
1 /*
2   ==================================================================================
3
4   Copyright (c) 2019-2020 AT&T Intellectual Property.
5
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
9
10   http://www.apache.org/licenses/LICENSE-2.0
11
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   ==================================================================================
18 */
19 /*
20  * e2sm_control.cc
21  *
22  *  Created on: Apr 30, 2020
23  *      Author: Shraboni Jana
24  */
25 /* Classes to handle E2 service model based on e2sm-HelloWorld-v001.asn */
26
27 #include "e2sm_subscription.hpp"
28
29  //initialize
30  e2sm_subscription::e2sm_subscription(void){
31
32         memset(&event_fmt1, 0, sizeof(E2SM_HelloWorld_EventTriggerDefinition_Format1_t));
33
34         memset(&actn_fmt1, 0, sizeof(E2SM_HelloWorld_ActionDefinition_Format1_t));
35
36
37         ran_param = 0;
38         ran_param = (RANparameter_Item_t*)calloc(1, sizeof(RANparameter_Item_t));
39         assert(ran_param != 0);
40
41     event_trigger = 0;
42     event_trigger = ( E2SM_HelloWorld_EventTriggerDefinition_t *)calloc(1, sizeof( E2SM_HelloWorld_EventTriggerDefinition_t));
43     assert(event_trigger != 0);
44
45     action_defn = 0;
46     action_defn = (E2SM_HelloWorld_ActionDefinition_t*)calloc(1, sizeof(E2SM_HelloWorld_ActionDefinition_t));
47     assert(action_defn !=0);
48
49     errbuf_len = 128;
50   };
51
52  e2sm_subscription::~e2sm_subscription(void){
53
54   mdclog_write(MDCLOG_DEBUG, "Freeing event trigger object memory");
55
56   event_trigger->choice.eventDefinition_Format1 = 0;
57
58   action_defn->choice.actionDefinition_Format1 = 0;
59
60   free(ran_param);
61
62   ASN_STRUCT_FREE(asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger);
63   ASN_STRUCT_FREE(asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn);
64
65
66 };
67
68 bool e2sm_subscription::encode_event_trigger(unsigned char *buf, size_t *size, e2sm_subscription_helper &helper){
69
70   ASN_STRUCT_RESET(asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger);
71
72   bool res;
73   res = set_fields(event_trigger, helper);
74   if (!res){
75
76     return false;
77   }
78
79   int ret_constr = asn_check_constraints(&asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger, errbuf, &errbuf_len);
80   if(ret_constr){
81     error_string.assign(&errbuf[0], errbuf_len);
82     return false;
83   }
84
85   xer_fprint(stdout, &asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger);
86
87   asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, event_trigger, buf, *size);
88
89   if(retval.encoded == -1){
90     error_string.assign(strerror(errno));
91     return false;
92   }
93   else if (retval.encoded > *size){
94     std::stringstream ss;
95     ss  <<"Error encoding event trigger definition. Reason =  encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl;
96     error_string = ss.str();
97     return false;
98   }
99   else{
100     *size = retval.encoded;
101   }
102
103   return true;
104 }
105
106 bool e2sm_subscription::encode_action_defn(unsigned char *buf, size_t *size, e2sm_subscription_helper &helper){
107
108   bool res;
109   res = set_fields(action_defn, helper);
110   if (!res){
111     return false;
112   }
113
114
115   int ret_constr = asn_check_constraints(&asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn, errbuf, &errbuf_len);
116   if(ret_constr){
117     error_string.assign(&errbuf[0], errbuf_len);
118     return false;
119   }
120
121   xer_fprint(stdout, &asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn);
122
123   asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_HelloWorld_ActionDefinition, action_defn, buf, *size);
124
125   if(retval.encoded == -1){
126     error_string.assign(strerror(errno));
127     return false;
128   }
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();
133     return false;
134   }
135   else{
136     *size = retval.encoded;
137   }
138
139   return true;
140 }
141
142 bool e2sm_subscription::set_fields(E2SM_HelloWorld_EventTriggerDefinition_t * ref_event_trigger, e2sm_subscription_helper & helper){
143
144  if(ref_event_trigger == 0){
145     error_string = "Invalid reference for Event Trigger Definition set fields";
146     return false;
147   }
148
149   ref_event_trigger->present = E2SM_HelloWorld_EventTriggerDefinition_PR_eventDefinition_Format1;
150
151   event_fmt1.triggerNature = helper.triger_nature;
152
153   ref_event_trigger->choice.eventDefinition_Format1 = &event_fmt1;
154
155   return true;
156 };
157
158 bool e2sm_subscription::set_fields(E2SM_HelloWorld_ActionDefinition_t * ref_action_defn, e2sm_subscription_helper & helper){
159
160  if(ref_action_defn == 0){
161     error_string = "Invalid reference for Event Action Definition set fields";
162     return false;
163   }
164   ref_action_defn->present = E2SM_HelloWorld_ActionDefinition_PR_actionDefinition_Format1;
165
166
167   ranparam_helper_t paramlst = helper.get_paramlist();
168
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);
177   }
178
179
180   ref_action_defn->choice.actionDefinition_Format1 = &actn_fmt1;
181
182
183   return true;
184 };
185