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, software
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 ==================================================================================
20 * e2sm_subscription.cc
22 * Created on: Jun 30, 2020
26 #include "e2sm_subscription.hpp"
30 HWEventTriggerDefinition::HWEventTriggerDefinition(void){
32 memset(&_event_fmt1, 0, sizeof(E2SM_HelloWorld_EventTriggerDefinition_Format1_t));
34 _triggerNature = 1; //Making first selection as default since enumerated type.
37 _event_trigger = ( E2SM_HelloWorld_EventTriggerDefinition_t *)calloc(1, sizeof( E2SM_HelloWorld_EventTriggerDefinition_t));
38 assert(_event_trigger != 0);
42 HWEventTriggerDefinition::~HWEventTriggerDefinition(void){
44 mdclog_write(MDCLOG_DEBUG, "Freeing event trigger object memory");
45 _event_trigger->choice.eventDefinition_Format1 = 0;
46 ASN_STRUCT_FREE(asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, _event_trigger);
50 bool HWEventTriggerDefinition::encode(unsigned char *buf, size_t *size){
52 ASN_STRUCT_RESET(asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, _event_trigger);
54 if(_event_trigger == 0){
55 _error_string = "Invalid reference for Event Trigger Definition set fields";
59 _event_trigger->present = E2SM_HelloWorld_EventTriggerDefinition_PR_eventDefinition_Format1;
60 _event_fmt1.triggerNature = this->_triggerNature;
61 _event_trigger->choice.eventDefinition_Format1 = &_event_fmt1;
64 int ret_constr = asn_check_constraints(&asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, _event_trigger, _errbuf, &_errbuf_len);
66 _error_string.assign(&_errbuf[0], _errbuf_len);
70 xer_fprint(stdout, &asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, _event_trigger);
72 asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_HelloWorld_EventTriggerDefinition, _event_trigger, buf, *size);
74 if(retval.encoded == -1){
75 _error_string.assign(strerror(errno));
78 else if (retval.encoded > *size){
80 ss <<"Error encoding event trigger definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl;
81 _error_string = ss.str();
85 *size = retval.encoded;
91 HWActionDefinition::HWActionDefinition(void){
93 _param_list = std::make_unique<std::vector<RANParamIEs>>(); _count_list = 0;
95 memset(&_action_fmt1, 0, sizeof(E2SM_HelloWorld_ActionDefinition_Format1_t));
97 int SEQOFRANPARAMS = 1;
100 _ranparam_ie = (RANparameter_Item_t*)calloc(SEQOFRANPARAMS, sizeof(RANparameter_Item_t));
101 assert(_ranparam_ie != 0);
104 _action_defn = (E2SM_HelloWorld_ActionDefinition_t*)calloc(1, sizeof(E2SM_HelloWorld_ActionDefinition_t));
105 assert(_action_defn !=0);
110 HWActionDefinition::~HWActionDefinition(void){
112 mdclog_write(MDCLOG_DEBUG, "Freeing Action Definition object memory");
113 _action_defn->choice.actionDefinition_Format1 = 0;
115 ASN_STRUCT_FREE(asn_DEF_E2SM_HelloWorld_ActionDefinition, _action_defn);
119 bool HWActionDefinition::encode(unsigned char *buf, size_t *size){
122 res = this->setfields(this->_action_defn);
127 int ret_constr = asn_check_constraints(&asn_DEF_E2SM_HelloWorld_ActionDefinition, this->_action_defn, _errbuf, &_errbuf_len);
129 _error_string.assign(&_errbuf[0], _errbuf_len);
133 xer_fprint(stdout, &asn_DEF_E2SM_HelloWorld_ActionDefinition, _action_defn);
135 asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_HelloWorld_ActionDefinition, _action_defn, buf, *size);
137 if(retval.encoded == -1){
138 _error_string.assign(strerror(errno));
141 else if (retval.encoded > *size){
142 std::stringstream ss;
143 ss <<"Error encoding action definition. Reason = encoded pdu size " << retval.encoded << " exceeds buffer size " << *size << std::endl;
144 _error_string = ss.str();
148 *size = retval.encoded;
154 bool HWActionDefinition::setfields(E2SM_HelloWorld_ActionDefinition_t *_action_defn){
156 if(_action_defn == 0){
157 _error_string = "Invalid reference for Event Action Definition set fields";
160 _action_defn->present = E2SM_HelloWorld_ActionDefinition_PR_actionDefinition_Format1;
162 _ranparam_ie = (RANparameter_Item_t*)calloc(this->_count_list, sizeof(RANparameter_Item_t));
163 assert(_ranparam_ie != 0);
165 auto paramList = this->get_list();
167 for(RANParamIEs item:*paramList){
169 _ranparam_ie[i].ranParameter_ID = item.get_param_id();
170 _ranparam_ie[i].ranParameter_Name.buf = item.get_param_name();
171 _ranparam_ie[i].ranParameter_Name.size = item.get_param_name_size();
172 _ranparam_ie[i].ranParameter_Test = item.get_param_test();
173 _ranparam_ie[i].ranParameter_Value.buf = item.get_param_value();
174 _ranparam_ie[i].ranParameter_Value.size = item.get_param_value_size();
176 const int res = ASN_SEQUENCE_ADD(&_action_fmt1.ranParameter_List, &(_ranparam_ie[i]));
178 _error_string = "Error : Unable to assign memory to add RAN PARAM item to set up list";
185 _action_defn->choice.actionDefinition_Format1 = &_action_fmt1;