blob: c1f415f1d5b6007a0229cd59c56b98fe0e03357a [file] [log] [blame]
anjana_sreekumar@infosys.com991c2062020-01-08 11:42:57 +05301/*
2 * Copyright 2019-present Infosys Limited  
3 *   
4 * SPDX-License-Identifier: Apache-2.0    
5 */
6
7/******************************************************************************
8 *
9 * This is an auto generated file.
10 * Please do not edit this file.
11 * All edits to be made through template source file
12 * <TOP-DIR/scripts/GtpV2StackCodeGen/tts/stacktemplate.cpp.tt>
13 ******************************************************************************/
14#include <cstring>
15#include <stdint.h>
16#include "gtpV2Stack.h"
17#include "msgClasses/gtpV2MsgFactory.h"
18#include "msgClasses/manual/gtpV2Message.h"
19#include "msgClasses/createSessionRequestMsg.h"
20#include "msgClasses/createSessionResponseMsg.h"
21#include "msgClasses/modifyBearerRequestMsg.h"
22#include "msgClasses/modifyBearerResponseMsg.h"
23#include "msgClasses/deleteSessionRequestMsg.h"
24#include "msgClasses/deleteSessionResponseMsg.h"
25#include "msgClasses/releaseAccessBearersRequestMsg.h"
26#include "msgClasses/releaseAccessBearersResponseMsg.h"
27#include "msgClasses/createBearerRequestMsg.h"
28#include "msgClasses/createBearerResponseMsg.h"
29#include "msgClasses/deleteBearerRequestMsg.h"
30#include "msgClasses/deleteBearerResponseMsg.h"
31#include "msgClasses/downlinkDataNotificationMsg.h"
32#include "msgClasses/downlinkDataNotificationAcknowledgeMsg.h"
33#include "msgClasses/downlinkDataNotificationFailureIndicationMsg.h"
34
35cmn::utils::Debug errorStream;
36
37GtpV2Stack::GtpV2Stack ()
38{
39 // TODO Auto-generated constructor stub
40
41}
42
43GtpV2Stack::~GtpV2Stack ()
44{
45 // TODO Auto-generated destructor stub
46}
47
48bool
49GtpV2Stack::encodeMessage (GtpV2MessageHeader & msgHeader,
50 MsgBuffer & buffer, void *data_p)
51{
52
53 //Clear the global errorStream
54 errorStream.clearStream ();
55 bool rc = false;
56 GtpV2Message & msg =
57 GtpV2MsgFactory::getInstance ().getMsgObject (msgHeader.msgType);
58
59 uint16_t gtpHeaderStartIdx = buffer.getCurrentIndex();
60 // Encode the header
61 GtpV2Message::encodeHeader (buffer, msgHeader);
62
63 Uint16 startIndex = buffer.getCurrentIndex();
64
65 switch (msgHeader.msgType)
66 {
67 case CreateSessionRequestMsgType:
68 {
69 if (data_p != NULL)
70 {
71 rc =
72 dynamic_cast<
73 CreateSessionRequestMsg & >(msg).
74 encodeCreateSessionRequestMsg(buffer,
75 *((CreateSessionRequestMsgData *)
76 data_p));
77 }
78 else
79 {
80 // Application has filled the data structure provided by the stack
81 rc =
82 dynamic_cast<
83 CreateSessionRequestMsg & >(msg).
84 encodeCreateSessionRequestMsg (buffer,
85 createSessionRequestStackData);
86 }
87 break;
88 }
89 case CreateSessionResponseMsgType:
90 {
91 if (data_p != NULL)
92 {
93 rc =
94 dynamic_cast<
95 CreateSessionResponseMsg & >(msg).
96 encodeCreateSessionResponseMsg(buffer,
97 *((CreateSessionResponseMsgData *)
98 data_p));
99 }
100 else
101 {
102 // Application has filled the data structure provided by the stack
103 rc =
104 dynamic_cast<
105 CreateSessionResponseMsg & >(msg).
106 encodeCreateSessionResponseMsg (buffer,
107 createSessionResponseStackData);
108 }
109 break;
110 }
111 case ModifyBearerRequestMsgType:
112 {
113 if (data_p != NULL)
114 {
115 rc =
116 dynamic_cast<
117 ModifyBearerRequestMsg & >(msg).
118 encodeModifyBearerRequestMsg(buffer,
119 *((ModifyBearerRequestMsgData *)
120 data_p));
121 }
122 else
123 {
124 // Application has filled the data structure provided by the stack
125 rc =
126 dynamic_cast<
127 ModifyBearerRequestMsg & >(msg).
128 encodeModifyBearerRequestMsg (buffer,
129 modifyBearerRequestStackData);
130 }
131 break;
132 }
133 case ModifyBearerResponseMsgType:
134 {
135 if (data_p != NULL)
136 {
137 rc =
138 dynamic_cast<
139 ModifyBearerResponseMsg & >(msg).
140 encodeModifyBearerResponseMsg(buffer,
141 *((ModifyBearerResponseMsgData *)
142 data_p));
143 }
144 else
145 {
146 // Application has filled the data structure provided by the stack
147 rc =
148 dynamic_cast<
149 ModifyBearerResponseMsg & >(msg).
150 encodeModifyBearerResponseMsg (buffer,
151 modifyBearerResponseStackData);
152 }
153 break;
154 }
155 case DeleteSessionRequestMsgType:
156 {
157 if (data_p != NULL)
158 {
159 rc =
160 dynamic_cast<
161 DeleteSessionRequestMsg & >(msg).
162 encodeDeleteSessionRequestMsg(buffer,
163 *((DeleteSessionRequestMsgData *)
164 data_p));
165 }
166 else
167 {
168 // Application has filled the data structure provided by the stack
169 rc =
170 dynamic_cast<
171 DeleteSessionRequestMsg & >(msg).
172 encodeDeleteSessionRequestMsg (buffer,
173 deleteSessionRequestStackData);
174 }
175 break;
176 }
177 case DeleteSessionResponseMsgType:
178 {
179 if (data_p != NULL)
180 {
181 rc =
182 dynamic_cast<
183 DeleteSessionResponseMsg & >(msg).
184 encodeDeleteSessionResponseMsg(buffer,
185 *((DeleteSessionResponseMsgData *)
186 data_p));
187 }
188 else
189 {
190 // Application has filled the data structure provided by the stack
191 rc =
192 dynamic_cast<
193 DeleteSessionResponseMsg & >(msg).
194 encodeDeleteSessionResponseMsg (buffer,
195 deleteSessionResponseStackData);
196 }
197 break;
198 }
199 case ReleaseAccessBearersRequestMsgType:
200 {
201 if (data_p != NULL)
202 {
203 rc =
204 dynamic_cast<
205 ReleaseAccessBearersRequestMsg & >(msg).
206 encodeReleaseAccessBearersRequestMsg(buffer,
207 *((ReleaseAccessBearersRequestMsgData *)
208 data_p));
209 }
210 else
211 {
212 // Application has filled the data structure provided by the stack
213 rc =
214 dynamic_cast<
215 ReleaseAccessBearersRequestMsg & >(msg).
216 encodeReleaseAccessBearersRequestMsg (buffer,
217 releaseAccessBearersRequestStackData);
218 }
219 break;
220 }
221 case ReleaseAccessBearersResponseMsgType:
222 {
223 if (data_p != NULL)
224 {
225 rc =
226 dynamic_cast<
227 ReleaseAccessBearersResponseMsg & >(msg).
228 encodeReleaseAccessBearersResponseMsg(buffer,
229 *((ReleaseAccessBearersResponseMsgData *)
230 data_p));
231 }
232 else
233 {
234 // Application has filled the data structure provided by the stack
235 rc =
236 dynamic_cast<
237 ReleaseAccessBearersResponseMsg & >(msg).
238 encodeReleaseAccessBearersResponseMsg (buffer,
239 releaseAccessBearersResponseStackData);
240 }
241 break;
242 }
243 case CreateBearerRequestMsgType:
244 {
245 if (data_p != NULL)
246 {
247 rc =
248 dynamic_cast<
249 CreateBearerRequestMsg & >(msg).
250 encodeCreateBearerRequestMsg(buffer,
251 *((CreateBearerRequestMsgData *)
252 data_p));
253 }
254 else
255 {
256 // Application has filled the data structure provided by the stack
257 rc =
258 dynamic_cast<
259 CreateBearerRequestMsg & >(msg).
260 encodeCreateBearerRequestMsg (buffer,
261 createBearerRequestStackData);
262 }
263 break;
264 }
265 case CreateBearerResponseMsgType:
266 {
267 if (data_p != NULL)
268 {
269 rc =
270 dynamic_cast<
271 CreateBearerResponseMsg & >(msg).
272 encodeCreateBearerResponseMsg(buffer,
273 *((CreateBearerResponseMsgData *)
274 data_p));
275 }
276 else
277 {
278 // Application has filled the data structure provided by the stack
279 rc =
280 dynamic_cast<
281 CreateBearerResponseMsg & >(msg).
282 encodeCreateBearerResponseMsg (buffer,
283 createBearerResponseStackData);
284 }
285 break;
286 }
287 case DeleteBearerRequestMsgType:
288 {
289 if (data_p != NULL)
290 {
291 rc =
292 dynamic_cast<
293 DeleteBearerRequestMsg & >(msg).
294 encodeDeleteBearerRequestMsg(buffer,
295 *((DeleteBearerRequestMsgData *)
296 data_p));
297 }
298 else
299 {
300 // Application has filled the data structure provided by the stack
301 rc =
302 dynamic_cast<
303 DeleteBearerRequestMsg & >(msg).
304 encodeDeleteBearerRequestMsg (buffer,
305 deleteBearerRequestStackData);
306 }
307 break;
308 }
309 case DeleteBearerResponseMsgType:
310 {
311 if (data_p != NULL)
312 {
313 rc =
314 dynamic_cast<
315 DeleteBearerResponseMsg & >(msg).
316 encodeDeleteBearerResponseMsg(buffer,
317 *((DeleteBearerResponseMsgData *)
318 data_p));
319 }
320 else
321 {
322 // Application has filled the data structure provided by the stack
323 rc =
324 dynamic_cast<
325 DeleteBearerResponseMsg & >(msg).
326 encodeDeleteBearerResponseMsg (buffer,
327 deleteBearerResponseStackData);
328 }
329 break;
330 }
331 case DownlinkDataNotificationMsgType:
332 {
333 if (data_p != NULL)
334 {
335 rc =
336 dynamic_cast<
337 DownlinkDataNotificationMsg & >(msg).
338 encodeDownlinkDataNotificationMsg(buffer,
339 *((DownlinkDataNotificationMsgData *)
340 data_p));
341 }
342 else
343 {
344 // Application has filled the data structure provided by the stack
345 rc =
346 dynamic_cast<
347 DownlinkDataNotificationMsg & >(msg).
348 encodeDownlinkDataNotificationMsg (buffer,
349 downlinkDataNotificationStackData);
350 }
351 break;
352 }
353 case DownlinkDataNotificationAcknowledgeMsgType:
354 {
355 if (data_p != NULL)
356 {
357 rc =
358 dynamic_cast<
359 DownlinkDataNotificationAcknowledgeMsg & >(msg).
360 encodeDownlinkDataNotificationAcknowledgeMsg(buffer,
361 *((DownlinkDataNotificationAcknowledgeMsgData *)
362 data_p));
363 }
364 else
365 {
366 // Application has filled the data structure provided by the stack
367 rc =
368 dynamic_cast<
369 DownlinkDataNotificationAcknowledgeMsg & >(msg).
370 encodeDownlinkDataNotificationAcknowledgeMsg (buffer,
371 downlinkDataNotificationAcknowledgeStackData);
372 }
373 break;
374 }
375 case DownlinkDataNotificationFailureIndicationMsgType:
376 {
377 if (data_p != NULL)
378 {
379 rc =
380 dynamic_cast<
381 DownlinkDataNotificationFailureIndicationMsg & >(msg).
382 encodeDownlinkDataNotificationFailureIndicationMsg(buffer,
383 *((DownlinkDataNotificationFailureIndicationMsgData *)
384 data_p));
385 }
386 else
387 {
388 // Application has filled the data structure provided by the stack
389 rc =
390 dynamic_cast<
391 DownlinkDataNotificationFailureIndicationMsg & >(msg).
392 encodeDownlinkDataNotificationFailureIndicationMsg (buffer,
393 downlinkDataNotificationFailureIndicationStackData);
394 }
395 break;
396 }
397 }
398
399 Uint16 endIndex = buffer.getCurrentIndex ();
400
401 Uint16 messageLength = (endIndex - startIndex)+8;
402
403 buffer.goToIndex (gtpHeaderStartIdx + 2); // 2 is where length is encoded in a gtp message TODO remove hardcoding
404 buffer.writeUint16 (messageLength, false);
405 buffer.goToIndex (endIndex);
406 return rc;
407}
408
409bool
410GtpV2Stack::decodeGtpMessageHeader(GtpV2MessageHeader& msgHeader, MsgBuffer& buffer)
411{
412 return GtpV2Message::decodeHeader (buffer, msgHeader);
413}
414
415
416bool
417GtpV2Stack::decodeMessage (GtpV2MessageHeader& msgHeader,
418 MsgBuffer& buffer,void* data_p)
419{
420 errorStream.clearStream();
421 // First decode the message header
422 bool rc = false;
423
424
425
426 Uint16 msgDataLength = msgHeader.msgLength;
427
428 if (msgHeader.teidPresent)
429 {
430 msgDataLength = msgDataLength - 8; //teid and sequence number
431 }
432 else
433 {
434 msgDataLength = msgDataLength - 4; //only sequence number
435 }
436
437 // Validate the length before proceeding
438 if (msgDataLength != buffer.lengthLeft() )
439 {
440 // Encoded message length does not match the number of bytes left in the message
441 errorStream.add ((char *)"Message length does not match bytes in buffer\n");
442 errorStream.add ((char *)"Computed Message length: ");
443 errorStream.add (msgDataLength);
444 errorStream.add ((char *)" Bytes Left in buffer: ");
445 errorStream.add (buffer.lengthLeft());
446 errorStream.endOfLine ();
447 return false;
448 }
449
450 GtpV2Message& msg =
451 GtpV2MsgFactory::getInstance ().getMsgObject (msgHeader.msgType);
452
453 switch (msgHeader.msgType){
454 case CreateSessionRequestMsgType:
455 {
456 if (data_p != NULL)
457 {
458 rc =
459 dynamic_cast<
460 CreateSessionRequestMsg & >(msg).
461 decodeCreateSessionRequestMsg(buffer,
462 *(CreateSessionRequestMsgData*)
463 data_p, msgDataLength);
464 }
465 else
466 {
467 // Application wants to use the data structure provided by the stack
468 // let us first clear any data present in the internal data structure
469 memset (&createSessionRequestStackData, 0,
470 sizeof (CreateSessionRequestMsgData));
471 rc =
472 dynamic_cast<
473 CreateSessionRequestMsg & >(msg).
474 decodeCreateSessionRequestMsg(buffer,
475 createSessionRequestStackData,
476 msgDataLength);
477 }
478 break;
479 }
480 case CreateSessionResponseMsgType:
481 {
482 if (data_p != NULL)
483 {
484 rc =
485 dynamic_cast<
486 CreateSessionResponseMsg & >(msg).
487 decodeCreateSessionResponseMsg(buffer,
488 *(CreateSessionResponseMsgData*)
489 data_p, msgDataLength);
490 }
491 else
492 {
493 // Application wants to use the data structure provided by the stack
494 // let us first clear any data present in the internal data structure
495 memset (&createSessionResponseStackData, 0,
496 sizeof (CreateSessionResponseMsgData));
497 rc =
498 dynamic_cast<
499 CreateSessionResponseMsg & >(msg).
500 decodeCreateSessionResponseMsg(buffer,
501 createSessionResponseStackData,
502 msgDataLength);
503 }
504 break;
505 }
506 case ModifyBearerRequestMsgType:
507 {
508 if (data_p != NULL)
509 {
510 rc =
511 dynamic_cast<
512 ModifyBearerRequestMsg & >(msg).
513 decodeModifyBearerRequestMsg(buffer,
514 *(ModifyBearerRequestMsgData*)
515 data_p, msgDataLength);
516 }
517 else
518 {
519 // Application wants to use the data structure provided by the stack
520 // let us first clear any data present in the internal data structure
521 memset (&modifyBearerRequestStackData, 0,
522 sizeof (ModifyBearerRequestMsgData));
523 rc =
524 dynamic_cast<
525 ModifyBearerRequestMsg & >(msg).
526 decodeModifyBearerRequestMsg(buffer,
527 modifyBearerRequestStackData,
528 msgDataLength);
529 }
530 break;
531 }
532 case ModifyBearerResponseMsgType:
533 {
534 if (data_p != NULL)
535 {
536 rc =
537 dynamic_cast<
538 ModifyBearerResponseMsg & >(msg).
539 decodeModifyBearerResponseMsg(buffer,
540 *(ModifyBearerResponseMsgData*)
541 data_p, msgDataLength);
542 }
543 else
544 {
545 // Application wants to use the data structure provided by the stack
546 // let us first clear any data present in the internal data structure
547 memset (&modifyBearerResponseStackData, 0,
548 sizeof (ModifyBearerResponseMsgData));
549 rc =
550 dynamic_cast<
551 ModifyBearerResponseMsg & >(msg).
552 decodeModifyBearerResponseMsg(buffer,
553 modifyBearerResponseStackData,
554 msgDataLength);
555 }
556 break;
557 }
558 case DeleteSessionRequestMsgType:
559 {
560 if (data_p != NULL)
561 {
562 rc =
563 dynamic_cast<
564 DeleteSessionRequestMsg & >(msg).
565 decodeDeleteSessionRequestMsg(buffer,
566 *(DeleteSessionRequestMsgData*)
567 data_p, msgDataLength);
568 }
569 else
570 {
571 // Application wants to use the data structure provided by the stack
572 // let us first clear any data present in the internal data structure
573 memset (&deleteSessionRequestStackData, 0,
574 sizeof (DeleteSessionRequestMsgData));
575 rc =
576 dynamic_cast<
577 DeleteSessionRequestMsg & >(msg).
578 decodeDeleteSessionRequestMsg(buffer,
579 deleteSessionRequestStackData,
580 msgDataLength);
581 }
582 break;
583 }
584 case DeleteSessionResponseMsgType:
585 {
586 if (data_p != NULL)
587 {
588 rc =
589 dynamic_cast<
590 DeleteSessionResponseMsg & >(msg).
591 decodeDeleteSessionResponseMsg(buffer,
592 *(DeleteSessionResponseMsgData*)
593 data_p, msgDataLength);
594 }
595 else
596 {
597 // Application wants to use the data structure provided by the stack
598 // let us first clear any data present in the internal data structure
599 memset (&deleteSessionResponseStackData, 0,
600 sizeof (DeleteSessionResponseMsgData));
601 rc =
602 dynamic_cast<
603 DeleteSessionResponseMsg & >(msg).
604 decodeDeleteSessionResponseMsg(buffer,
605 deleteSessionResponseStackData,
606 msgDataLength);
607 }
608 break;
609 }
610 case ReleaseAccessBearersRequestMsgType:
611 {
612 if (data_p != NULL)
613 {
614 rc =
615 dynamic_cast<
616 ReleaseAccessBearersRequestMsg & >(msg).
617 decodeReleaseAccessBearersRequestMsg(buffer,
618 *(ReleaseAccessBearersRequestMsgData*)
619 data_p, msgDataLength);
620 }
621 else
622 {
623 // Application wants to use the data structure provided by the stack
624 // let us first clear any data present in the internal data structure
625 memset (&releaseAccessBearersRequestStackData, 0,
626 sizeof (ReleaseAccessBearersRequestMsgData));
627 rc =
628 dynamic_cast<
629 ReleaseAccessBearersRequestMsg & >(msg).
630 decodeReleaseAccessBearersRequestMsg(buffer,
631 releaseAccessBearersRequestStackData,
632 msgDataLength);
633 }
634 break;
635 }
636 case ReleaseAccessBearersResponseMsgType:
637 {
638 if (data_p != NULL)
639 {
640 rc =
641 dynamic_cast<
642 ReleaseAccessBearersResponseMsg & >(msg).
643 decodeReleaseAccessBearersResponseMsg(buffer,
644 *(ReleaseAccessBearersResponseMsgData*)
645 data_p, msgDataLength);
646 }
647 else
648 {
649 // Application wants to use the data structure provided by the stack
650 // let us first clear any data present in the internal data structure
651 memset (&releaseAccessBearersResponseStackData, 0,
652 sizeof (ReleaseAccessBearersResponseMsgData));
653 rc =
654 dynamic_cast<
655 ReleaseAccessBearersResponseMsg & >(msg).
656 decodeReleaseAccessBearersResponseMsg(buffer,
657 releaseAccessBearersResponseStackData,
658 msgDataLength);
659 }
660 break;
661 }
662 case CreateBearerRequestMsgType:
663 {
664 if (data_p != NULL)
665 {
666 rc =
667 dynamic_cast<
668 CreateBearerRequestMsg & >(msg).
669 decodeCreateBearerRequestMsg(buffer,
670 *(CreateBearerRequestMsgData*)
671 data_p, msgDataLength);
672 }
673 else
674 {
675 // Application wants to use the data structure provided by the stack
676 // let us first clear any data present in the internal data structure
677 memset (&createBearerRequestStackData, 0,
678 sizeof (CreateBearerRequestMsgData));
679 rc =
680 dynamic_cast<
681 CreateBearerRequestMsg & >(msg).
682 decodeCreateBearerRequestMsg(buffer,
683 createBearerRequestStackData,
684 msgDataLength);
685 }
686 break;
687 }
688 case CreateBearerResponseMsgType:
689 {
690 if (data_p != NULL)
691 {
692 rc =
693 dynamic_cast<
694 CreateBearerResponseMsg & >(msg).
695 decodeCreateBearerResponseMsg(buffer,
696 *(CreateBearerResponseMsgData*)
697 data_p, msgDataLength);
698 }
699 else
700 {
701 // Application wants to use the data structure provided by the stack
702 // let us first clear any data present in the internal data structure
703 memset (&createBearerResponseStackData, 0,
704 sizeof (CreateBearerResponseMsgData));
705 rc =
706 dynamic_cast<
707 CreateBearerResponseMsg & >(msg).
708 decodeCreateBearerResponseMsg(buffer,
709 createBearerResponseStackData,
710 msgDataLength);
711 }
712 break;
713 }
714 case DeleteBearerRequestMsgType:
715 {
716 if (data_p != NULL)
717 {
718 rc =
719 dynamic_cast<
720 DeleteBearerRequestMsg & >(msg).
721 decodeDeleteBearerRequestMsg(buffer,
722 *(DeleteBearerRequestMsgData*)
723 data_p, msgDataLength);
724 }
725 else
726 {
727 // Application wants to use the data structure provided by the stack
728 // let us first clear any data present in the internal data structure
729 memset (&deleteBearerRequestStackData, 0,
730 sizeof (DeleteBearerRequestMsgData));
731 rc =
732 dynamic_cast<
733 DeleteBearerRequestMsg & >(msg).
734 decodeDeleteBearerRequestMsg(buffer,
735 deleteBearerRequestStackData,
736 msgDataLength);
737 }
738 break;
739 }
740 case DeleteBearerResponseMsgType:
741 {
742 if (data_p != NULL)
743 {
744 rc =
745 dynamic_cast<
746 DeleteBearerResponseMsg & >(msg).
747 decodeDeleteBearerResponseMsg(buffer,
748 *(DeleteBearerResponseMsgData*)
749 data_p, msgDataLength);
750 }
751 else
752 {
753 // Application wants to use the data structure provided by the stack
754 // let us first clear any data present in the internal data structure
755 memset (&deleteBearerResponseStackData, 0,
756 sizeof (DeleteBearerResponseMsgData));
757 rc =
758 dynamic_cast<
759 DeleteBearerResponseMsg & >(msg).
760 decodeDeleteBearerResponseMsg(buffer,
761 deleteBearerResponseStackData,
762 msgDataLength);
763 }
764 break;
765 }
766 case DownlinkDataNotificationMsgType:
767 {
768 if (data_p != NULL)
769 {
770 rc =
771 dynamic_cast<
772 DownlinkDataNotificationMsg & >(msg).
773 decodeDownlinkDataNotificationMsg(buffer,
774 *(DownlinkDataNotificationMsgData*)
775 data_p, msgDataLength);
776 }
777 else
778 {
779 // Application wants to use the data structure provided by the stack
780 // let us first clear any data present in the internal data structure
781 memset (&downlinkDataNotificationStackData, 0,
782 sizeof (DownlinkDataNotificationMsgData));
783 rc =
784 dynamic_cast<
785 DownlinkDataNotificationMsg & >(msg).
786 decodeDownlinkDataNotificationMsg(buffer,
787 downlinkDataNotificationStackData,
788 msgDataLength);
789 }
790 break;
791 }
792 case DownlinkDataNotificationAcknowledgeMsgType:
793 {
794 if (data_p != NULL)
795 {
796 rc =
797 dynamic_cast<
798 DownlinkDataNotificationAcknowledgeMsg & >(msg).
799 decodeDownlinkDataNotificationAcknowledgeMsg(buffer,
800 *(DownlinkDataNotificationAcknowledgeMsgData*)
801 data_p, msgDataLength);
802 }
803 else
804 {
805 // Application wants to use the data structure provided by the stack
806 // let us first clear any data present in the internal data structure
807 memset (&downlinkDataNotificationAcknowledgeStackData, 0,
808 sizeof (DownlinkDataNotificationAcknowledgeMsgData));
809 rc =
810 dynamic_cast<
811 DownlinkDataNotificationAcknowledgeMsg & >(msg).
812 decodeDownlinkDataNotificationAcknowledgeMsg(buffer,
813 downlinkDataNotificationAcknowledgeStackData,
814 msgDataLength);
815 }
816 break;
817 }
818 case DownlinkDataNotificationFailureIndicationMsgType:
819 {
820 if (data_p != NULL)
821 {
822 rc =
823 dynamic_cast<
824 DownlinkDataNotificationFailureIndicationMsg & >(msg).
825 decodeDownlinkDataNotificationFailureIndicationMsg(buffer,
826 *(DownlinkDataNotificationFailureIndicationMsgData*)
827 data_p, msgDataLength);
828 }
829 else
830 {
831 // Application wants to use the data structure provided by the stack
832 // let us first clear any data present in the internal data structure
833 memset (&downlinkDataNotificationFailureIndicationStackData, 0,
834 sizeof (DownlinkDataNotificationFailureIndicationMsgData));
835 rc =
836 dynamic_cast<
837 DownlinkDataNotificationFailureIndicationMsg & >(msg).
838 decodeDownlinkDataNotificationFailureIndicationMsg(buffer,
839 downlinkDataNotificationFailureIndicationStackData,
840 msgDataLength);
841 }
842 break;
843 }
844 }
845 return rc;
846}
847
848void
849GtpV2Stack::display_v(Uint8 msgType, Debug& stream, void* data_p)
850{
851 // Display the messageType
852 stream.add ((char *)"MessageType: ");
853 stream.add (msgType);
854 stream.endOfLine ();
855
856 GtpV2Message& msg = GtpV2MsgFactory::getInstance ().getMsgObject (msgType);
857
858 switch (msgType){
859 case CreateSessionRequestMsgType:
860 {
861 stream.add ((char *)"Message: CreateSessionRequestMsg");
862 stream.endOfLine ();
863 if (data_p != NULL)
864 {
865 dynamic_cast<
866 CreateSessionRequestMsg & >(msg).
867 displayCreateSessionRequestMsgData_v (*
868 ((CreateSessionRequestMsgData*) data_p), stream);
869 }
870 else
871 {
872 // Application wants to use the data structure provided by the stack
873 dynamic_cast<
874 CreateSessionRequestMsg & >(msg).
875 displayCreateSessionRequestMsgData_v
876 (createSessionRequestStackData, stream);
877 }
878 break;
879 }
880 case CreateSessionResponseMsgType:
881 {
882 stream.add ((char *)"Message: CreateSessionResponseMsg");
883 stream.endOfLine ();
884 if (data_p != NULL)
885 {
886 dynamic_cast<
887 CreateSessionResponseMsg & >(msg).
888 displayCreateSessionResponseMsgData_v (*
889 ((CreateSessionResponseMsgData*) data_p), stream);
890 }
891 else
892 {
893 // Application wants to use the data structure provided by the stack
894 dynamic_cast<
895 CreateSessionResponseMsg & >(msg).
896 displayCreateSessionResponseMsgData_v
897 (createSessionResponseStackData, stream);
898 }
899 break;
900 }
901 case ModifyBearerRequestMsgType:
902 {
903 stream.add ((char *)"Message: ModifyBearerRequestMsg");
904 stream.endOfLine ();
905 if (data_p != NULL)
906 {
907 dynamic_cast<
908 ModifyBearerRequestMsg & >(msg).
909 displayModifyBearerRequestMsgData_v (*
910 ((ModifyBearerRequestMsgData*) data_p), stream);
911 }
912 else
913 {
914 // Application wants to use the data structure provided by the stack
915 dynamic_cast<
916 ModifyBearerRequestMsg & >(msg).
917 displayModifyBearerRequestMsgData_v
918 (modifyBearerRequestStackData, stream);
919 }
920 break;
921 }
922 case ModifyBearerResponseMsgType:
923 {
924 stream.add ((char *)"Message: ModifyBearerResponseMsg");
925 stream.endOfLine ();
926 if (data_p != NULL)
927 {
928 dynamic_cast<
929 ModifyBearerResponseMsg & >(msg).
930 displayModifyBearerResponseMsgData_v (*
931 ((ModifyBearerResponseMsgData*) data_p), stream);
932 }
933 else
934 {
935 // Application wants to use the data structure provided by the stack
936 dynamic_cast<
937 ModifyBearerResponseMsg & >(msg).
938 displayModifyBearerResponseMsgData_v
939 (modifyBearerResponseStackData, stream);
940 }
941 break;
942 }
943 case DeleteSessionRequestMsgType:
944 {
945 stream.add ((char *)"Message: DeleteSessionRequestMsg");
946 stream.endOfLine ();
947 if (data_p != NULL)
948 {
949 dynamic_cast<
950 DeleteSessionRequestMsg & >(msg).
951 displayDeleteSessionRequestMsgData_v (*
952 ((DeleteSessionRequestMsgData*) data_p), stream);
953 }
954 else
955 {
956 // Application wants to use the data structure provided by the stack
957 dynamic_cast<
958 DeleteSessionRequestMsg & >(msg).
959 displayDeleteSessionRequestMsgData_v
960 (deleteSessionRequestStackData, stream);
961 }
962 break;
963 }
964 case DeleteSessionResponseMsgType:
965 {
966 stream.add ((char *)"Message: DeleteSessionResponseMsg");
967 stream.endOfLine ();
968 if (data_p != NULL)
969 {
970 dynamic_cast<
971 DeleteSessionResponseMsg & >(msg).
972 displayDeleteSessionResponseMsgData_v (*
973 ((DeleteSessionResponseMsgData*) data_p), stream);
974 }
975 else
976 {
977 // Application wants to use the data structure provided by the stack
978 dynamic_cast<
979 DeleteSessionResponseMsg & >(msg).
980 displayDeleteSessionResponseMsgData_v
981 (deleteSessionResponseStackData, stream);
982 }
983 break;
984 }
985 case ReleaseAccessBearersRequestMsgType:
986 {
987 stream.add ((char *)"Message: ReleaseAccessBearersRequestMsg");
988 stream.endOfLine ();
989 if (data_p != NULL)
990 {
991 dynamic_cast<
992 ReleaseAccessBearersRequestMsg & >(msg).
993 displayReleaseAccessBearersRequestMsgData_v (*
994 ((ReleaseAccessBearersRequestMsgData*) data_p), stream);
995 }
996 else
997 {
998 // Application wants to use the data structure provided by the stack
999 dynamic_cast<
1000 ReleaseAccessBearersRequestMsg & >(msg).
1001 displayReleaseAccessBearersRequestMsgData_v
1002 (releaseAccessBearersRequestStackData, stream);
1003 }
1004 break;
1005 }
1006 case ReleaseAccessBearersResponseMsgType:
1007 {
1008 stream.add ((char *)"Message: ReleaseAccessBearersResponseMsg");
1009 stream.endOfLine ();
1010 if (data_p != NULL)
1011 {
1012 dynamic_cast<
1013 ReleaseAccessBearersResponseMsg & >(msg).
1014 displayReleaseAccessBearersResponseMsgData_v (*
1015 ((ReleaseAccessBearersResponseMsgData*) data_p), stream);
1016 }
1017 else
1018 {
1019 // Application wants to use the data structure provided by the stack
1020 dynamic_cast<
1021 ReleaseAccessBearersResponseMsg & >(msg).
1022 displayReleaseAccessBearersResponseMsgData_v
1023 (releaseAccessBearersResponseStackData, stream);
1024 }
1025 break;
1026 }
1027 case CreateBearerRequestMsgType:
1028 {
1029 stream.add ((char *)"Message: CreateBearerRequestMsg");
1030 stream.endOfLine ();
1031 if (data_p != NULL)
1032 {
1033 dynamic_cast<
1034 CreateBearerRequestMsg & >(msg).
1035 displayCreateBearerRequestMsgData_v (*
1036 ((CreateBearerRequestMsgData*) data_p), stream);
1037 }
1038 else
1039 {
1040 // Application wants to use the data structure provided by the stack
1041 dynamic_cast<
1042 CreateBearerRequestMsg & >(msg).
1043 displayCreateBearerRequestMsgData_v
1044 (createBearerRequestStackData, stream);
1045 }
1046 break;
1047 }
1048 case CreateBearerResponseMsgType:
1049 {
1050 stream.add ((char *)"Message: CreateBearerResponseMsg");
1051 stream.endOfLine ();
1052 if (data_p != NULL)
1053 {
1054 dynamic_cast<
1055 CreateBearerResponseMsg & >(msg).
1056 displayCreateBearerResponseMsgData_v (*
1057 ((CreateBearerResponseMsgData*) data_p), stream);
1058 }
1059 else
1060 {
1061 // Application wants to use the data structure provided by the stack
1062 dynamic_cast<
1063 CreateBearerResponseMsg & >(msg).
1064 displayCreateBearerResponseMsgData_v
1065 (createBearerResponseStackData, stream);
1066 }
1067 break;
1068 }
1069 case DeleteBearerRequestMsgType:
1070 {
1071 stream.add ((char *)"Message: DeleteBearerRequestMsg");
1072 stream.endOfLine ();
1073 if (data_p != NULL)
1074 {
1075 dynamic_cast<
1076 DeleteBearerRequestMsg & >(msg).
1077 displayDeleteBearerRequestMsgData_v (*
1078 ((DeleteBearerRequestMsgData*) data_p), stream);
1079 }
1080 else
1081 {
1082 // Application wants to use the data structure provided by the stack
1083 dynamic_cast<
1084 DeleteBearerRequestMsg & >(msg).
1085 displayDeleteBearerRequestMsgData_v
1086 (deleteBearerRequestStackData, stream);
1087 }
1088 break;
1089 }
1090 case DeleteBearerResponseMsgType:
1091 {
1092 stream.add ((char *)"Message: DeleteBearerResponseMsg");
1093 stream.endOfLine ();
1094 if (data_p != NULL)
1095 {
1096 dynamic_cast<
1097 DeleteBearerResponseMsg & >(msg).
1098 displayDeleteBearerResponseMsgData_v (*
1099 ((DeleteBearerResponseMsgData*) data_p), stream);
1100 }
1101 else
1102 {
1103 // Application wants to use the data structure provided by the stack
1104 dynamic_cast<
1105 DeleteBearerResponseMsg & >(msg).
1106 displayDeleteBearerResponseMsgData_v
1107 (deleteBearerResponseStackData, stream);
1108 }
1109 break;
1110 }
1111 case DownlinkDataNotificationMsgType:
1112 {
1113 stream.add ((char *)"Message: DownlinkDataNotificationMsg");
1114 stream.endOfLine ();
1115 if (data_p != NULL)
1116 {
1117 dynamic_cast<
1118 DownlinkDataNotificationMsg & >(msg).
1119 displayDownlinkDataNotificationMsgData_v (*
1120 ((DownlinkDataNotificationMsgData*) data_p), stream);
1121 }
1122 else
1123 {
1124 // Application wants to use the data structure provided by the stack
1125 dynamic_cast<
1126 DownlinkDataNotificationMsg & >(msg).
1127 displayDownlinkDataNotificationMsgData_v
1128 (downlinkDataNotificationStackData, stream);
1129 }
1130 break;
1131 }
1132 case DownlinkDataNotificationAcknowledgeMsgType:
1133 {
1134 stream.add ((char *)"Message: DownlinkDataNotificationAcknowledgeMsg");
1135 stream.endOfLine ();
1136 if (data_p != NULL)
1137 {
1138 dynamic_cast<
1139 DownlinkDataNotificationAcknowledgeMsg & >(msg).
1140 displayDownlinkDataNotificationAcknowledgeMsgData_v (*
1141 ((DownlinkDataNotificationAcknowledgeMsgData*) data_p), stream);
1142 }
1143 else
1144 {
1145 // Application wants to use the data structure provided by the stack
1146 dynamic_cast<
1147 DownlinkDataNotificationAcknowledgeMsg & >(msg).
1148 displayDownlinkDataNotificationAcknowledgeMsgData_v
1149 (downlinkDataNotificationAcknowledgeStackData, stream);
1150 }
1151 break;
1152 }
1153 case DownlinkDataNotificationFailureIndicationMsgType:
1154 {
1155 stream.add ((char *)"Message: DownlinkDataNotificationFailureIndicationMsg");
1156 stream.endOfLine ();
1157 if (data_p != NULL)
1158 {
1159 dynamic_cast<
1160 DownlinkDataNotificationFailureIndicationMsg & >(msg).
1161 displayDownlinkDataNotificationFailureIndicationMsgData_v (*
1162 ((DownlinkDataNotificationFailureIndicationMsgData*) data_p), stream);
1163 }
1164 else
1165 {
1166 // Application wants to use the data structure provided by the stack
1167 dynamic_cast<
1168 DownlinkDataNotificationFailureIndicationMsg & >(msg).
1169 displayDownlinkDataNotificationFailureIndicationMsgData_v
1170 (downlinkDataNotificationFailureIndicationStackData, stream);
1171 }
1172 break;
1173 }
1174 }
1175}