RICPLT-3016 Remove indication codes from e2ap
[ric-plt/submgr.git] / e2ap / libe2ap_wrapper / E2AP_tests.c
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
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, 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 ==================================================================================
18 */
19
20 #if DEBUG
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25
26 #include "E2AP_if.h"
27
28 const size_t cDataBufferSize = 2048;
29
30 typedef union {
31     uint32_t  nodeID;
32     uint8_t   octets[4];
33 } IdOctects_t;
34
35 //////////////////////////////////////////////////////////////////////
36 bool TestRICSubscriptionRequest() {
37     RICSubscriptionRequest_t ricSubscriptionRequest;
38     ricSubscriptionRequest.ricRequestID.ricRequestorID = 1;
39     ricSubscriptionRequest.ricRequestID.ricRequestSequenceNumber = 22;
40     ricSubscriptionRequest.ranFunctionID = 33;
41
42     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.octetString.contentLength = 0;
43
44     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBIDPresent = true;
45     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalGNBIDPresent = false;
46     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.contentLength = 3;
47     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[0] = 1;
48     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[1] = 2;
49     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.pLMNIdentity.pLMNIdentityVal[2] = 3;
50
51 //    ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.eNBID.bits = cMacroENBIDP_20Bits;
52 //    ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.eNBID.bits = cHomeENBID_28Bits;
53 //    ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.eNBID.bits = cShortMacroENBID_18Bits;
54     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.bits = clongMacroENBIDP_21Bits;
55
56     IdOctects_t eNBOctects;
57     memset(eNBOctects.octets, 0, sizeof(eNBOctects));
58     eNBOctects.octets[0] = 11;
59     eNBOctects.octets[1] = 22;
60     eNBOctects.octets[2] = 31;
61     eNBOctects.octets[3] = 1;
62     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = eNBOctects.nodeID;
63     printf("eNBOctects.nodeID = %u\n\n",eNBOctects.nodeID);
64
65     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceDirection = InterfaceDirection__incoming;
66     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceMessageType.procedureCode = 35;  // id-rRCTransfer
67     ricSubscriptionRequest.ricSubscription.ricEventTriggerDefinition.interfaceMessageType.typeOfMessage = cE2InitiatingMessage;
68
69     ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.contentLength = 1;
70     uint64_t index = 0;
71     while (index < ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.contentLength) {
72         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID = 255; //index;
73         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType = RICActionType_insert;
74
75         // ricActionDefinition, OPTIONAL. Not used in RIC
76         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = false; //true;
77         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.styleID = 255;
78         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.sequenceOfActionParameters.parameterID = 222;
79
80         // ricSubsequentActionPresent, OPTIONAL
81         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = true;
82         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType = RICSubsequentActionType_Continue;
83         ricSubscriptionRequest.ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait = RICTimeToWait_w100ms;
84         index++;
85     }
86
87     printRICSubscriptionRequest(&ricSubscriptionRequest);
88
89     uint64_t logBufferSize = 1024;
90     char logBuffer[logBufferSize];
91     uint64_t dataBufferSize = cDataBufferSize;
92     byte dataBuffer[dataBufferSize];
93     if (packRICSubscriptionRequest(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionRequest) == e2err_OK)
94     {
95         memset(&ricSubscriptionRequest,0, sizeof ricSubscriptionRequest);
96         uint64_t returnCode;
97         E2MessageInfo_t messageInfo;
98         e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
99         if (pE2AP_PDU != 0) {
100             if (messageInfo.messageType == cE2InitiatingMessage) {
101                 if (messageInfo.messageId == cRICSubscriptionRequest) {
102                     if ((returnCode = getRICSubscriptionRequestData(pE2AP_PDU, &ricSubscriptionRequest)) == e2err_OK) {
103                         printRICSubscriptionRequest(&ricSubscriptionRequest);
104                         return true;
105                     }
106                     else
107                         printf("Error in getRICSubscriptionRequestData. ReturnCode = %s",getE2ErrorString(returnCode));
108                 }
109                 else
110                     printf("Not RICSubscriptionRequest\n");
111             }
112             else
113                 printf("Not InitiatingMessage\n");
114         }
115         else
116             printf("%s",logBuffer);
117     }
118     else
119         printf("%s",logBuffer);
120     return false;
121 }
122
123 //////////////////////////////////////////////////////////////////////
124 bool TestRICSubscriptionResponse() {
125     // Test RICSubscribeResponse
126     RICSubscriptionResponse_t ricSubscriptionResponse;
127     ricSubscriptionResponse.ricRequestID.ricRequestorID = 1;
128     ricSubscriptionResponse.ricRequestID.ricRequestSequenceNumber = 22;
129     ricSubscriptionResponse.ranFunctionID = 33;
130     ricSubscriptionResponse.ricActionAdmittedList.contentLength = 16;
131     uint64_t index = 0;
132     while (index < ricSubscriptionResponse.ricActionAdmittedList.contentLength) {
133         ricSubscriptionResponse.ricActionAdmittedList.ricActionID[index] = index;
134         index++;
135     }
136     ricSubscriptionResponse.ricActionNotAdmittedListPresent = true;
137     ricSubscriptionResponse.ricActionNotAdmittedList.contentLength = 16;
138     index = 0;
139     while (index < ricSubscriptionResponse.ricActionNotAdmittedList.contentLength) {
140         ricSubscriptionResponse.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = index;
141         ricSubscriptionResponse.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = cRICCauseRadioNetwork;
142         ricSubscriptionResponse.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = index;
143         index++;
144     }
145
146     printRICSubscriptionResponse(&ricSubscriptionResponse);
147
148     uint64_t logBufferSize = 1024;
149     char logBuffer[logBufferSize];
150     uint64_t dataBufferSize = cDataBufferSize;
151     byte dataBuffer[dataBufferSize];
152     if (packRICSubscriptionResponse(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionResponse) == e2err_OK)
153     {
154         memset(&ricSubscriptionResponse,0, sizeof ricSubscriptionResponse);
155         uint64_t returnCode;
156         E2MessageInfo_t messageInfo;
157         e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
158         if (pE2AP_PDU != 0) {
159             if (messageInfo.messageType == cE2SuccessfulOutcome) {
160                 if (messageInfo.messageId == cRICSubscriptionResponse) {
161                     if ((returnCode = getRICSubscriptionResponseData(pE2AP_PDU, &ricSubscriptionResponse)) == e2err_OK) {
162                         printRICSubscriptionResponse(&ricSubscriptionResponse);
163                         return true;
164                     }
165                     else
166                         printf("Error in getRICSubscriptionResponseData. ReturnCode = %s",getE2ErrorString(returnCode));
167                 }
168                 else
169                     printf("Not RICSubscriptionResponse\n");
170             }
171             else
172                 printf("Not SuccessfulOutcome\n");
173         }
174         else
175             printf("%s",logBuffer);
176     }
177     else
178         printf("%s",logBuffer);
179     return false;
180 }
181
182 //////////////////////////////////////////////////////////////////////
183 bool TestRICSubscriptionFailure() {
184     // Test RICSubscribeFailure
185     RICSubscriptionFailure_t ricSubscriptionFailure;
186     ricSubscriptionFailure.ricRequestID.ricRequestorID = 1;
187     ricSubscriptionFailure.ricRequestID.ricRequestSequenceNumber = 22;
188     ricSubscriptionFailure.ranFunctionID = 33;
189     ricSubscriptionFailure.ricActionNotAdmittedList.contentLength = 16;
190     uint64_t index = 0;
191     while (index < ricSubscriptionFailure.ricActionNotAdmittedList.contentLength) {
192         ricSubscriptionFailure.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = index;
193         ricSubscriptionFailure.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = cRICCauseRadioNetwork;
194         ricSubscriptionFailure.ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = index;
195         index++;
196     }
197     // CriticalityDiagnostics, OPTIONAL. Not used in RIC
198     ricSubscriptionFailure.criticalityDiagnosticsPresent = false;
199     ricSubscriptionFailure.criticalityDiagnostics.procedureCodePresent = true;
200     ricSubscriptionFailure.criticalityDiagnostics.procedureCode = 1;
201     ricSubscriptionFailure.criticalityDiagnostics.triggeringMessagePresent = true;
202     ricSubscriptionFailure.criticalityDiagnostics.triggeringMessage = TriggeringMessage__initiating_message;
203     ricSubscriptionFailure.criticalityDiagnostics.procedureCriticalityPresent = true;
204     ricSubscriptionFailure.criticalityDiagnostics.procedureCriticality = Criticality__reject;
205
206     ricSubscriptionFailure.criticalityDiagnostics.iEsCriticalityDiagnosticsPresent = false;
207     ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIELength = 256;
208     uint16_t index2 = 0;
209     while (index2 < ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIELength) {
210         ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iECriticality = Criticality__reject;
211         ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].iE_ID = index2;
212         ricSubscriptionFailure.criticalityDiagnostics.criticalityDiagnosticsIEListItem[index2].typeOfError = TypeOfError_missing;
213         index2++;
214     }
215
216     printRICSubscriptionFailure(&ricSubscriptionFailure);
217
218     uint64_t logBufferSize = 1024;
219     char logBuffer[logBufferSize];
220     uint64_t dataBufferSize = cDataBufferSize;
221     byte dataBuffer[dataBufferSize];
222     if (packRICSubscriptionFailure(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionFailure) == e2err_OK)
223     {
224         memset(&ricSubscriptionFailure,0, sizeof ricSubscriptionFailure);
225         uint64_t returnCode;
226         E2MessageInfo_t messageInfo;
227         e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
228         if (pE2AP_PDU != 0) {
229             if (messageInfo.messageType == cE2UnsuccessfulOutcome) {
230                 if (messageInfo.messageId == cRICSubscriptionFailure) {
231                     if ((returnCode = getRICSubscriptionFailureData(pE2AP_PDU, &ricSubscriptionFailure)) == e2err_OK) {
232                         printRICSubscriptionFailure(&ricSubscriptionFailure);
233                         return true;
234                     }
235                     else
236                         printf("Error in getRICSubscriptionFailureData. ReturnCode = %s",getE2ErrorString(returnCode));
237                 }
238                 else
239                     printf("Not RICSubscriptionFailure\n");
240             }
241             else
242                 printf("Not UnuccessfulOutcome\n");
243         }
244         else
245             printf("%s",logBuffer);
246     }
247     else
248         printf("%s",logBuffer);
249     return false;
250 }
251
252 //////////////////////////////////////////////////////////////////////
253 bool TestRICSubscriptionDeleteRequest() {
254
255     RICSubscriptionDeleteRequest_t ricSubscriptionDeleteRequest;
256     ricSubscriptionDeleteRequest.ricRequestID.ricRequestorID = 1;
257     ricSubscriptionDeleteRequest.ricRequestID.ricRequestSequenceNumber = 22;
258     ricSubscriptionDeleteRequest.ranFunctionID = 33;
259
260     printRICSubscriptionDeleteRequest(&ricSubscriptionDeleteRequest);
261
262     uint64_t logBufferSize = 1024;
263     char logBuffer[logBufferSize];
264     uint64_t dataBufferSize = cDataBufferSize;
265     byte dataBuffer[cDataBufferSize];
266     if ((packRICSubscriptionDeleteRequest(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionDeleteRequest)) == e2err_OK)
267     {
268         memset(&ricSubscriptionDeleteRequest,0, sizeof ricSubscriptionDeleteRequest);
269         uint64_t returnCode;
270         E2MessageInfo_t messageInfo;
271         e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
272         if (pE2AP_PDU != 0) {
273             if (messageInfo.messageType == cE2InitiatingMessage) {
274                 if (messageInfo.messageId == cRICSubscriptionDeleteRequest) {
275                     if ((returnCode = getRICSubscriptionDeleteRequestData(pE2AP_PDU, &ricSubscriptionDeleteRequest)) == e2err_OK) {
276                         printRICSubscriptionDeleteRequest(&ricSubscriptionDeleteRequest);
277                         return true;
278                     }
279                     else
280                         printf("Error in getRICSubscriptionDeleteRequestData. ReturnCode = %s",getE2ErrorString(returnCode));
281                 }
282                 else
283                     printf("Not RICSubscriptionDeleteRequest\n");
284             }
285             else
286                 printf("Not InitiatingMessage\n");
287         }
288         else
289             printf("%s",logBuffer);
290     }
291     else
292         printf("%s",logBuffer);
293     return false;
294 }
295
296 //////////////////////////////////////////////////////////////////////
297 bool TestRICSubscriptionDeleteResponse() {
298
299     RICSubscriptionDeleteResponse_t ricSubscriptionDeleteResponse;
300     ricSubscriptionDeleteResponse.ricRequestID.ricRequestorID = 1;
301     ricSubscriptionDeleteResponse.ricRequestID.ricRequestSequenceNumber = 22;
302     ricSubscriptionDeleteResponse.ranFunctionID = 33;
303
304     printRICSubscriptionDeleteResponse(&ricSubscriptionDeleteResponse);
305
306     uint64_t logBufferSize = 1024;
307     char logBuffer[logBufferSize];
308     uint64_t dataBufferSize = cDataBufferSize;
309     byte dataBuffer[dataBufferSize];
310     if ((packRICSubscriptionDeleteResponse(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionDeleteResponse)) == e2err_OK)
311     {
312         memset(&ricSubscriptionDeleteResponse,0, sizeof ricSubscriptionDeleteResponse);
313         uint64_t returnCode;
314         E2MessageInfo_t messageInfo;
315         e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
316         if (pE2AP_PDU != 0) {
317             if (messageInfo.messageType == cE2SuccessfulOutcome) {
318                 if (messageInfo.messageId == cRICsubscriptionDeleteResponse) {
319                     if ((returnCode = getRICSubscriptionDeleteResponseData(pE2AP_PDU, &ricSubscriptionDeleteResponse)) == e2err_OK) {
320                         printRICSubscriptionDeleteResponse(&ricSubscriptionDeleteResponse);
321                         return true;
322                     }
323                     else
324                         printf("Error in getRICSubscriptionDeleteResponseData. ReturnCode = %s",getE2ErrorString(returnCode));
325                 }
326                 else
327                     printf("Not RICSubscriptionDeleteResponse\n");
328             }
329             else
330                 printf("Not SuccessfulOutcome\n");
331         }
332         else
333             printf("%s",logBuffer);
334     }
335     else
336         printf("%s",logBuffer);
337     return false;
338 }
339
340 //////////////////////////////////////////////////////////////////////
341 bool TestRICSubscriptionDeleteFailure() {
342
343     RICSubscriptionDeleteFailure_t ricSubscriptionDeleteFailure;
344     ricSubscriptionDeleteFailure.ricRequestID.ricRequestorID = 1;
345     ricSubscriptionDeleteFailure.ricRequestID.ricRequestSequenceNumber = 22;
346     ricSubscriptionDeleteFailure.ranFunctionID = 33;
347     ricSubscriptionDeleteFailure.ricCause.content = cRICCauseRadioNetwork;
348     ricSubscriptionDeleteFailure.ricCause.cause = 3;
349
350     printRICSubscriptionDeleteFailure(&ricSubscriptionDeleteFailure);
351
352     uint64_t logBufferSize = 1024;
353     char logBuffer[logBufferSize];
354     uint64_t dataBufferSize = cDataBufferSize;
355     byte dataBuffer[dataBufferSize];
356     if ((packRICSubscriptionDeleteFailure(&dataBufferSize, dataBuffer, logBuffer, &ricSubscriptionDeleteFailure)) == e2err_OK)
357     {
358         memset(&ricSubscriptionDeleteFailure,0, sizeof ricSubscriptionDeleteFailure);
359         uint64_t returnCode;
360         E2MessageInfo_t messageInfo;
361         e2ap_pdu_ptr_t* pE2AP_PDU = unpackE2AP_pdu(dataBufferSize, dataBuffer, logBuffer, &messageInfo);
362         if (pE2AP_PDU != 0) {
363             if (messageInfo.messageType == cE2UnsuccessfulOutcome) {
364                 if (messageInfo.messageId == cRICsubscriptionDeleteFailure) {
365                     if ((returnCode = getRICSubscriptionDeleteFailureData(pE2AP_PDU, &ricSubscriptionDeleteFailure)) == e2err_OK) {
366                         printRICSubscriptionDeleteFailure(&ricSubscriptionDeleteFailure);
367                         return true;
368                     }
369                     else
370                         printf("Error in getRICSubscriptionDeleteFailureData. ReturnCode = %s",getE2ErrorString(returnCode));
371                 }
372                 else
373                     printf("Not RICSubscriptionDeleteFailure\n");
374             }
375             else
376                 printf("Not UnuccessfulOutcome\n");
377         }
378         else
379             printf("%s",logBuffer);
380     }
381     else
382         printf("%s",logBuffer);
383     return false;
384 }
385
386 //////////////////////////////////////////////////////////////////////
387 void printDataBuffer(const size_t byteCount, const uint8_t* pData) {
388
389     uint64_t index = 0;
390     while (index < byteCount) {
391         if (index % 50 == 0) {
392             printf("\n");
393         }
394         printf("%u ",pData[index]);
395         index++;
396     }
397 }
398
399 //////////////////////////////////////////////////////////////////////
400 void printRICSubscriptionRequest(const RICSubscriptionRequest_t* pRICSubscriptionRequest) {
401     printf("pRICSubscriptionRequest->ricRequestID.ricRequestorID = %u\n", pRICSubscriptionRequest->ricRequestID.ricRequestorID);
402     printf("pRICSubscriptionRequest->ricRequestID.ricRequestSequenceNumber = %u\n", pRICSubscriptionRequest->ricRequestID.ricRequestSequenceNumber);
403     printf("pRICSubscriptionRequest->ranFunctionID = %u\n",pRICSubscriptionRequest->ranFunctionID);
404
405     printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeIDbits = %u\n",
406          (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.bits);
407     printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID = %u\n",
408         (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceID.globalENBID.nodeID.nodeID);
409     printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceDirection = %u\n",
410          (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceDirection);
411     printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.procedureCode = %u\n",
412          (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.procedureCode);
413     printf("pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.typeOfMessage = %u\n",
414          (unsigned)pRICSubscriptionRequest->ricSubscription.ricEventTriggerDefinition.interfaceMessageType.typeOfMessage);
415     printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength = %u\n",
416          (unsigned)pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength);
417
418     uint64_t index = 0;
419     while (index < pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.contentLength) {
420         printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID = %li\n",
421              pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionID);
422         printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType = %li\n",
423              pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionType);
424         printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent = %i\n",
425              pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent);
426         if(pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinitionPresent)
427         {
428             printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.styleID = %li\n",
429                  pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.styleID);
430             printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.sequenceOfActionParameters.parameterID = %i\n",
431                  pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricActionDefinition.sequenceOfActionParameters.parameterID);
432         }
433         printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent = %i\n",
434           pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent);
435         if(pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentActionPresent)
436         {
437             printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType = %li\n",
438                  pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricSubsequentActionType);
439             printf("pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait = %li\n",
440                  pRICSubscriptionRequest->ricSubscription.ricActionToBeSetupItemIEs.ricActionToBeSetupItem[index].ricSubsequentAction.ricTimeToWait);
441         }
442         printf("\n\n");
443         index++;
444     }
445     printf("\n\n");
446 }
447
448 //////////////////////////////////////////////////////////////////////
449 void printRICSubscriptionResponse(const RICSubscriptionResponse_t* pRICSubscriptionResponse) {
450
451     printf("pRICSubscriptionResponse->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionResponse->ricRequestID.ricRequestorID);
452     printf("pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber = %u\n", pRICSubscriptionResponse->ricRequestID.ricRequestSequenceNumber);
453     printf("pRICSubscriptionResponse->ranFunctionID = %u\n",pRICSubscriptionResponse->ranFunctionID);
454     printf("pRICSubscriptionResponse->ricActionAdmittedList.contentLength = %u\n",(unsigned)pRICSubscriptionResponse->ricActionAdmittedList.contentLength);
455     uint64_t index = 0;
456     while (index < pRICSubscriptionResponse->ricActionAdmittedList.contentLength) {
457         printf("pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index] = %lu\n",pRICSubscriptionResponse->ricActionAdmittedList.ricActionID[index]);
458         index++;
459     }
460     printf("pRICSubscriptionResponse->ricActionNotAdmittedListPresent = %u\n",pRICSubscriptionResponse->ricActionNotAdmittedListPresent);
461     printf("pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength = %u\n",(unsigned)pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength);
462     index = 0;
463     while (index < pRICSubscriptionResponse->ricActionNotAdmittedList.contentLength) {
464         printf("pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = %lu\n",
465              pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID);
466         printf("pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = %u\n",
467              (unsigned)pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content);
468         printf("pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = %u\n",
469              (unsigned)pRICSubscriptionResponse->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause);
470         index++;
471     }
472     printf("\n");
473 }
474
475 //////////////////////////////////////////////////////////////////////
476 void printRICSubscriptionFailure(const RICSubscriptionFailure_t* pRICSubscriptionFailure) {
477
478     printf("pRICSubscriptionFailure->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionFailure->ricRequestID.ricRequestorID);
479     printf("pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionFailure->ricRequestID.ricRequestSequenceNumber);
480     printf("pRICSubscriptionFailure->ranFunctionID = %i\n",pRICSubscriptionFailure->ranFunctionID);
481     printf("pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength = %u\n",(unsigned)pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength);
482     uint64_t index = 0;
483     while (index < pRICSubscriptionFailure->ricActionNotAdmittedList.contentLength) {
484         printf("pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID = %lu\n",
485              pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricActionID);
486         printf("pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content = %u\n",
487             (unsigned)pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.content);
488         printf("pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause = %u\n",
489              (unsigned)pRICSubscriptionFailure->ricActionNotAdmittedList.RICActionNotAdmittedItem[index].ricCause.cause);
490         index++;
491     }
492     if (pRICSubscriptionFailure->criticalityDiagnosticsPresent) {
493         printf("pRICSubscriptionFailure->criticalityDiagnosticsPresent = %u\n",pRICSubscriptionFailure->criticalityDiagnosticsPresent);
494         printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCodePresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.procedureCodePresent);
495         printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCode = %u\n",(unsigned)pRICSubscriptionFailure->criticalityDiagnostics.procedureCode);
496         printf("pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessagePresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessagePresent);
497         printf("pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessage = %u\n",(unsigned)pRICSubscriptionFailure->criticalityDiagnostics.triggeringMessage);
498         printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticalityPresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticalityPresent);
499         printf("pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticality = %u\n",(unsigned)pRICSubscriptionFailure->criticalityDiagnostics.procedureCriticality);
500         printf("pRICSubscriptionFailure->criticalityDiagnostics.iEsCriticalityDiagnosticsPresent = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.iEsCriticalityDiagnosticsPresent);
501         printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIELength = %u\n",pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIELength);
502         index = 0;
503         while (index < pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIELength) {
504             printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iECriticality = %u\n",
505                  (unsigned)pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iECriticality);
506             printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iE_ID = %u\n",
507                  pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].iE_ID);
508             printf("pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].typeOfError = %u\n",
509                  (unsigned)pRICSubscriptionFailure->criticalityDiagnostics.criticalityDiagnosticsIEListItem[index].typeOfError);
510             index++;
511         }
512     }
513     printf("\n");
514 }
515
516 void printRICSubscriptionDeleteRequest(const RICSubscriptionDeleteRequest_t* pRICSubscriptionDeleteRequest) {
517
518     printf("\npRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionDeleteRequest->ricRequestID.ricRequestorID);
519     printf("pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionDeleteRequest->ricRequestID.ricRequestSequenceNumber);
520     printf("pRICSubscriptionDeleteRequest->ranFunctionID = %i\n",pRICSubscriptionDeleteRequest->ranFunctionID);
521     printf("\n");
522 }
523
524 void printRICSubscriptionDeleteResponse(const RICSubscriptionDeleteResponse_t* pRICSubscriptionDeleteResponse) {
525
526     printf("\npRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionDeleteResponse->ricRequestID.ricRequestorID);
527     printf("pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionDeleteResponse->ricRequestID.ricRequestSequenceNumber);
528     printf("pRICSubscriptionDeleteResponse->ranFunctionID = %i\n",pRICSubscriptionDeleteResponse->ranFunctionID);
529     printf("\n");
530 }
531
532 void printRICSubscriptionDeleteFailure(const RICSubscriptionDeleteFailure_t* pRICSubscriptionDeleteFailure) {
533
534     printf("\npRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID = %u\n",pRICSubscriptionDeleteFailure->ricRequestID.ricRequestorID);
535     printf("pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber = %u\n",pRICSubscriptionDeleteFailure->ricRequestID.ricRequestSequenceNumber);
536     printf("pRICSubscriptionDeleteFailure->ranFunctionID = %i\n",pRICSubscriptionDeleteFailure->ranFunctionID);
537     printf("pRICSubscriptionDeleteFailure->ricCause.content = %i\n",pRICSubscriptionDeleteFailure->ricCause.content);
538     printf("pRICSubscriptionDeleteFailure->ricCause.cause = %i\n",pRICSubscriptionDeleteFailure->ricCause.cause);
539     printf("\n");
540 }
541
542 #endif