3 #include "OCTET_STRING.h"
6 ssize_t e2sm_encode_ric_control_header(void *buffer, size_t buf_size, void *ueIDbuf, size_t ueIDbuf_size,
7 long ricControlStyleType, long ricControlActionID)
9 E2SM_RC_ControlHeader_t *controlHeaderIE = (E2SM_RC_ControlHeader_t *)calloc(1, sizeof(E2SM_RC_ControlHeader_t));
12 fprintf(stderr, "alloc E2SM_RC_ControlHeader failed\n");
16 controlHeaderIE->present = E2SM_RC_ControlHeader_PR_controlHeader_Format1;
17 //E2SM_RC_ControlHeader_Format1_t *controlHeader_Fmt1 = controlHeaderIE->choice.controlHeader_Format1;
18 E2SM_RC_ControlHeader_Format1_t *controlHeader_Fmt1 = (E2SM_RC_ControlHeader_Format1_t *)calloc(1, sizeof(E2SM_RC_ControlHeader_Format1_t));
19 if(!controlHeader_Fmt1)
21 fprintf(stderr, "alloc E2SM_RC_ControlHeader failed\n");
25 controlHeader_Fmt1->ueId.buf = (uint8_t*)calloc(1, ueIDbuf_size);
26 memcpy(controlHeader_Fmt1->ueId.buf, ueIDbuf, ueIDbuf_size); //Check how to get ueIDbuf from string
27 controlHeader_Fmt1->ueId.size = ueIDbuf_size;
29 controlHeader_Fmt1->ric_ControlStyle_Type = ricControlStyleType;
30 controlHeader_Fmt1->ric_ControlAction_ID = ricControlActionID;
32 controlHeaderIE->choice.controlHeader_Format1 = controlHeader_Fmt1;
34 fprintf(stderr, "showing xer of asn_DEF_E2SM_RC_ControlHeader data\n");
35 xer_fprint(stderr, &asn_DEF_E2SM_RC_ControlHeader, controlHeaderIE);
36 fprintf(stderr, "\n");
37 fprintf(stderr, "After xer of asn_DEF_E2SM_RC_ControlHeader data\n");
39 asn_enc_rval_t encode_result;
40 encode_result = aper_encode_to_buffer(&asn_DEF_E2SM_RC_ControlHeader, NULL, controlHeaderIE, buffer, buf_size);
41 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlHeader, controlHeaderIE);
42 if(encode_result.encoded == -1)
44 fprintf(stderr, "Cannot encode %s: %s\n", encode_result.failed_type->name, strerror(errno));
49 return encode_result.encoded;
55 ssize_t e2sm_encode_ric_control_message(void *buffer, size_t buf_size, long targetPrimaryCell,
56 long targetCell, long nrOrEUtraCell, long nrCGIOrECGI, void* ranParameterValue, size_t ranParameterValue_size)
58 E2SM_RC_ControlMessage_t *e2smRcControlMsg = (E2SM_RC_ControlMessage_t*)calloc(1, sizeof(E2SM_RC_ControlMessage_t));
59 if(!e2smRcControlMsg) {
60 fprintf(stderr, "alloc E2SM_RC_ControlMessage_t failed\n");
64 e2smRcControlMsg->present = E2SM_RC_ControlMessage_PR_controlMessage_Format1;
66 // E2SM_RC_ControlMessage_Format1_t *e2smRcControlFormat1 = e2smRcControlMsg->choice.controlMessage_Format1;
68 E2SM_RC_ControlMessage_Format1_t *e2smRcControlFormat1 = (E2SM_RC_ControlMessage_Format1_t*)calloc(1, sizeof(E2SM_RC_ControlMessage_Format1_t));
69 if(!e2smRcControlMsg) {
70 fprintf(stderr, "alloc E2SM_RC_ControlMessage_Format1_t failed\n");
75 e2smRcControlFormat1->ranParameters_List =
76 (struct E2SM_RC_ControlMessage_Format1__ranParameters_List*)calloc(1, sizeof(struct E2SM_RC_ControlMessage_Format1__ranParameters_List));
77 if(!e2smRcControlFormat1->ranParameters_List)
79 fprintf(stderr, "alloc e2smRcControlFormat1->ranParameters_List failed\n");
80 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
84 // Start Target Primary Cell
85 RANParameter_Item_t *ranParameterItem1 = (RANParameter_Item_t*)calloc(1,sizeof(RANParameter_Item_t));
86 if(!ranParameterItem1) {
87 fprintf(stderr, "alloc RANParameter_Item_t1 failed\n");
88 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
93 ranParameterItem1->ranParameterItem_ID = targetPrimaryCell; // Target Primary Cell ID value = 1
94 RANParameter_ValueType_t *ranParameterValueType1 = (RANParameter_ValueType_t*)calloc(1, sizeof(RANParameter_ValueType_t));
95 if(!ranParameterValueType1)
97 fprintf(stderr, "alloc RANParameter_ValueType_t1 failed\n");
98 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
102 ranParameterValueType1->present = RANParameter_ValueType_PR_ranParameter_Structure;
103 RANParameter_STRUCTURE_t *ranParameterStructure1 = (RANParameter_STRUCTURE_t*)calloc(1, sizeof(RANParameter_STRUCTURE_t));
104 if(!ranParameterStructure1)
106 fprintf(stderr, "alloc RANParameter_STRUCTURE_t1 failed\n");
107 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
113 RANParameter_Item_t *ranParameterItem2 = (RANParameter_Item_t*)calloc(1,sizeof(RANParameter_Item_t));
114 if(!ranParameterItem2)
117 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
118 fprintf(stderr, "alloc RANParameter_Item_t2 failed\n");
122 ranParameterItem2->ranParameterItem_ID = targetCell; // Target Cell ID value = 2
123 RANParameter_ValueType_t *ranParameterValueType2 = (RANParameter_ValueType_t*)calloc(1, sizeof(RANParameter_ValueType_t));
124 if(!ranParameterValueType2)
126 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
127 fprintf(stderr, "alloc RANParameter_STRUCTURE_t2 failed\n");
132 ranParameterValueType2->present = RANParameter_ValueType_PR_ranParameter_Structure;
133 RANParameter_STRUCTURE_t *ranParameterStructure2 = (RANParameter_STRUCTURE_t*)calloc(1, sizeof(struct RANParameter_STRUCTURE));
134 if(!ranParameterStructure2)
136 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
137 fprintf(stderr, "alloc RANParameter_STRUCTURE_t2 failed\n");
142 // Start NR Cell (or E-UTRA Cell)
143 RANParameter_Item_t *ranParameterItem3 = (RANParameter_Item_t*)calloc(1,sizeof(RANParameter_Item_t));
144 if(!ranParameterItem3)
146 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
147 fprintf(stderr, "alloc RANParameter_Item_t3 failed\n");
151 ranParameterItem3->ranParameterItem_ID = nrOrEUtraCell; // NR Cell ID (or E-UTRA Cell ID) value =
152 RANParameter_ValueType_t *ranParameterValueType3 = (RANParameter_ValueType_t*)calloc(1, sizeof(RANParameter_ValueType_t));
153 if(!ranParameterValueType3)
155 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
156 fprintf(stderr, "alloc RANParameter_Item_t3 failed\n");
160 ranParameterValueType3->present = RANParameter_ValueType_PR_ranParameter_Structure;
161 RANParameter_STRUCTURE_t *ranParameterStructure3 = (struct RANParameter_STRUCTURE*)calloc(1, sizeof(struct RANParameter_STRUCTURE));
162 if(!ranParameterStructure3)
164 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
165 fprintf(stderr, "alloc RANParameter_Item_t3 failed\n");
169 // Start NR CGI (or ECGI)
170 RANParameter_Item_t *ranParameterItem4 = (RANParameter_Item_t*)calloc(1, sizeof(RANParameter_Item_t));
171 if(!ranParameterItem4)
173 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
174 fprintf(stderr, "alloc RANParameter_Item_t4 failed\n");
177 ranParameterItem4->ranParameterItem_ID = nrCGIOrECGI; // NR CGI ID (or ECGI ID) value =
178 RANParameter_ValueType_t *ranParameterValueType4 = (RANParameter_ValueType_t*)calloc(1, sizeof(RANParameter_ValueType_t));
179 if(!ranParameterValueType4)
181 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
182 fprintf(stderr, "alloc RANParameter_Item_t4 failed\n");
185 ranParameterValueType4->present = RANParameter_ValueType_PR_ranParameter_Element;
186 ranParameterValueType4->choice.ranParameter_Element = (RANParameter_ELEMENT_t*)calloc(1, sizeof(RANParameter_ELEMENT_t));
187 if(!ranParameterValueType4->choice.ranParameter_Element)
189 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
190 fprintf(stderr, "alloc RANParameter_Item_t4 failed\n");
193 ranParameterValueType4->choice.ranParameter_Element->keyFlag = 0;
194 ranParameterValueType4->choice.ranParameter_Element->ranParameter_Value.present = RANParameter_Value_PR_valueOctS;
196 ranParameterValueType4->choice.ranParameter_Element->ranParameter_Value.choice.valueOctS.buf =
197 (uint8_t*)calloc(1, ranParameterValue_size);
198 if(!ranParameterValueType4->choice.ranParameter_Element->ranParameter_Value.choice.valueOctS.buf)
200 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
201 fprintf(stderr, "alloc RANParameter Value failed\n");
204 memcpy(ranParameterValueType4->choice.ranParameter_Element->ranParameter_Value.choice.valueOctS.buf, ranParameterValue, ranParameterValue_size);
205 ranParameterValueType4->choice.ranParameter_Element->ranParameter_Value.choice.valueOctS.size = ranParameterValue_size;
206 ranParameterItem4->ranParameterItem_valueType = ranParameterValueType4; // NR CGI (or ECGI)
208 ASN_SEQUENCE_ADD(&ranParameterStructure3->sequence_of_ranParameters.list, ranParameterItem4); // NR CGI (or ECGI)
209 ranParameterValueType3->choice.ranParameter_Structure = ranParameterStructure3; // NR Cell (or E-UTRA Cell)
210 ranParameterItem3->ranParameterItem_valueType = ranParameterValueType3;
212 ASN_SEQUENCE_ADD(&ranParameterStructure2->sequence_of_ranParameters.list, ranParameterItem3); // NR Cell (or E-UTRA Cell)
213 ranParameterValueType2->choice.ranParameter_Structure = ranParameterStructure2; // Target Cell
214 ranParameterItem2->ranParameterItem_valueType = ranParameterValueType2;
216 ASN_SEQUENCE_ADD(&ranParameterStructure1->sequence_of_ranParameters.list, ranParameterItem2); // Target Cell
217 ranParameterValueType1->choice.ranParameter_Structure = ranParameterStructure1; // Target Primary Cell
218 ranParameterItem1->ranParameterItem_valueType = ranParameterValueType1;
220 ASN_SEQUENCE_ADD(&e2smRcControlFormat1->ranParameters_List->list, ranParameterItem1); // Target Primary Cell
221 e2smRcControlMsg->choice.controlMessage_Format1 = e2smRcControlFormat1;
224 fprintf(stderr, "showing xer of asn_DEF_E2SM_RC_ControlMessage data\n");
225 xer_fprint(stderr, &asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
226 fprintf(stderr, "\n");
227 fprintf(stderr, "After xer of asn_DEF_E2SM_RC_ControlMessage data\n");
229 asn_enc_rval_t encode_result;
230 encode_result = aper_encode_to_buffer(&asn_DEF_E2SM_RC_ControlMessage, NULL, e2smRcControlMsg, buffer, buf_size);
231 ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlMessage, e2smRcControlMsg);
232 if(encode_result.encoded == -1)
234 fprintf(stderr, "Cannot encode %s: %s\n", encode_result.failed_type->name, strerror(errno));
239 return encode_result.encoded;