blob: 150066240e0ace72068e777d5e5538a80f409c0c [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/msgtemplate.cpp.tt>
13 ******************************************************************************/
14
15#include "downlinkDataNotificationAcknowledgeMsg.h"
16#include "../ieClasses/manual/gtpV2Ie.h"
17#include "../ieClasses/gtpV2IeFactory.h"
18#include "../ieClasses/causeIe.h"
19#include "../ieClasses/delayValueIe.h"
20#include "../ieClasses/recoveryIe.h"
21#include "../ieClasses/throttlingIe.h"
22#include "../ieClasses/imsiIe.h"
23#include "../ieClasses/epcTimerIe.h"
24#include "../ieClasses/integerNumberIe.h"
25
26DownlinkDataNotificationAcknowledgeMsg::DownlinkDataNotificationAcknowledgeMsg()
27{
28 msgType = DownlinkDataNotificationAcknowledgeMsgType;
29 Uint16 mandIe;
30 mandIe = CauseIeType;
31 mandIe = (mandIe << 8) | 0; // cause
32 mandatoryIeSet.insert(mandIe);
33}
34
35DownlinkDataNotificationAcknowledgeMsg::~DownlinkDataNotificationAcknowledgeMsg()
36{
37
38}
39
40bool DownlinkDataNotificationAcknowledgeMsg::encodeDownlinkDataNotificationAcknowledgeMsg(MsgBuffer &buffer,
41 DownlinkDataNotificationAcknowledgeMsgData
42 const &data)
43{
44 bool rc = false;
45 GtpV2IeHeader header;
46 Uint16 startIndex = 0;
47 Uint16 endIndex = 0;
48 Uint16 length = 0;
49
50
51 // Encode the Ie Header
52 header.ieType = CauseIeType;
53 header.instance = 0;
54 header.length = 0; // We will encode the IE first and then update the length
55 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
56 startIndex = buffer.getCurrentIndex();
57 CauseIe cause=
58 dynamic_cast<
59 CauseIe&>(GtpV2IeFactory::getInstance().getIeObject(CauseIeType));
60 rc = cause.encodeCauseIe(buffer, data.cause);
61 endIndex = buffer.getCurrentIndex();
62 length = endIndex - startIndex;
63
64 // encode the length value now
65 buffer.goToIndex(startIndex - 3);
66 buffer.writeUint16(length, false);
67 buffer.goToIndex(endIndex);
68
69 if (!(rc))
70 {
71 errorStream.add((char *)"Failed to encode IE: cause\n");
72 return false;
73 }
74
75 if (data.dataNotificationDelayIePresent)
76 {
77
78 // Encode the Ie Header
79 header.ieType = DelayValueIeType;
80 header.instance = 0;
81 header.length = 0; // We will encode the IE first and then update the length
82 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
83 startIndex = buffer.getCurrentIndex();
84 DelayValueIe delayValue=
85 dynamic_cast<
86 DelayValueIe&>(GtpV2IeFactory::getInstance().getIeObject(DelayValueIeType));
87 rc = delayValue.encodeDelayValueIe(buffer, data.dataNotificationDelay);
88 endIndex = buffer.getCurrentIndex();
89 length = endIndex - startIndex;
90
91 // encode the length value now
92 buffer.goToIndex(startIndex - 3);
93 buffer.writeUint16(length, false);
94 buffer.goToIndex(endIndex);
95
96 if (!(rc))
97 {
98 errorStream.add((char *)"Failed to encode IE: dataNotificationDelay\n");
99 return false;
100 }
101 }
102
103 if (data.recoveryIePresent)
104 {
105
106 // Encode the Ie Header
107 header.ieType = RecoveryIeType;
108 header.instance = 0;
109 header.length = 0; // We will encode the IE first and then update the length
110 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
111 startIndex = buffer.getCurrentIndex();
112 RecoveryIe recovery=
113 dynamic_cast<
114 RecoveryIe&>(GtpV2IeFactory::getInstance().getIeObject(RecoveryIeType));
115 rc = recovery.encodeRecoveryIe(buffer, data.recovery);
116 endIndex = buffer.getCurrentIndex();
117 length = endIndex - startIndex;
118
119 // encode the length value now
120 buffer.goToIndex(startIndex - 3);
121 buffer.writeUint16(length, false);
122 buffer.goToIndex(endIndex);
123
124 if (!(rc))
125 {
126 errorStream.add((char *)"Failed to encode IE: recovery\n");
127 return false;
128 }
129 }
130
131 if (data.dlLowPriorityTrafficThrottlingIePresent)
132 {
133
134 // Encode the Ie Header
135 header.ieType = ThrottlingIeType;
136 header.instance = 0;
137 header.length = 0; // We will encode the IE first and then update the length
138 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
139 startIndex = buffer.getCurrentIndex();
140 ThrottlingIe throttling=
141 dynamic_cast<
142 ThrottlingIe&>(GtpV2IeFactory::getInstance().getIeObject(ThrottlingIeType));
143 rc = throttling.encodeThrottlingIe(buffer, data.dlLowPriorityTrafficThrottling);
144 endIndex = buffer.getCurrentIndex();
145 length = endIndex - startIndex;
146
147 // encode the length value now
148 buffer.goToIndex(startIndex - 3);
149 buffer.writeUint16(length, false);
150 buffer.goToIndex(endIndex);
151
152 if (!(rc))
153 {
154 errorStream.add((char *)"Failed to encode IE: dlLowPriorityTrafficThrottling\n");
155 return false;
156 }
157 }
158
159 if (data.imsiIePresent)
160 {
161
162 // Encode the Ie Header
163 header.ieType = ImsiIeType;
164 header.instance = 0;
165 header.length = 0; // We will encode the IE first and then update the length
166 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
167 startIndex = buffer.getCurrentIndex();
168 ImsiIe imsi=
169 dynamic_cast<
170 ImsiIe&>(GtpV2IeFactory::getInstance().getIeObject(ImsiIeType));
171 rc = imsi.encodeImsiIe(buffer, data.imsi);
172 endIndex = buffer.getCurrentIndex();
173 length = endIndex - startIndex;
174
175 // encode the length value now
176 buffer.goToIndex(startIndex - 3);
177 buffer.writeUint16(length, false);
178 buffer.goToIndex(endIndex);
179
180 if (!(rc))
181 {
182 errorStream.add((char *)"Failed to encode IE: imsi\n");
183 return false;
184 }
185 }
186
187 if (data.dlBufferingDurationIePresent)
188 {
189
190 // Encode the Ie Header
191 header.ieType = EpcTimerIeType;
192 header.instance = 0;
193 header.length = 0; // We will encode the IE first and then update the length
194 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
195 startIndex = buffer.getCurrentIndex();
196 EpcTimerIe epcTimer=
197 dynamic_cast<
198 EpcTimerIe&>(GtpV2IeFactory::getInstance().getIeObject(EpcTimerIeType));
199 rc = epcTimer.encodeEpcTimerIe(buffer, data.dlBufferingDuration);
200 endIndex = buffer.getCurrentIndex();
201 length = endIndex - startIndex;
202
203 // encode the length value now
204 buffer.goToIndex(startIndex - 3);
205 buffer.writeUint16(length, false);
206 buffer.goToIndex(endIndex);
207
208 if (!(rc))
209 {
210 errorStream.add((char *)"Failed to encode IE: dlBufferingDuration\n");
211 return false;
212 }
213 }
214
215 if (data.dlBufferingSuggestedPacketCountIePresent)
216 {
217
218 // Encode the Ie Header
219 header.ieType = IntegerNumberIeType;
220 header.instance = 0;
221 header.length = 0; // We will encode the IE first and then update the length
222 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
223 startIndex = buffer.getCurrentIndex();
224 IntegerNumberIe integerNumber=
225 dynamic_cast<
226 IntegerNumberIe&>(GtpV2IeFactory::getInstance().getIeObject(IntegerNumberIeType));
227 rc = integerNumber.encodeIntegerNumberIe(buffer, data.dlBufferingSuggestedPacketCount);
228 endIndex = buffer.getCurrentIndex();
229 length = endIndex - startIndex;
230
231 // encode the length value now
232 buffer.goToIndex(startIndex - 3);
233 buffer.writeUint16(length, false);
234 buffer.goToIndex(endIndex);
235
236 if (!(rc))
237 {
238 errorStream.add((char *)"Failed to encode IE: dlBufferingSuggestedPacketCount\n");
239 return false;
240 }
241 }
242 return rc;
243
244}
245
246bool DownlinkDataNotificationAcknowledgeMsg::decodeDownlinkDataNotificationAcknowledgeMsg(MsgBuffer &buffer,
247 DownlinkDataNotificationAcknowledgeMsgData
248 &data, Uint16 length)
249{
250
251 bool rc = false;
252 GtpV2IeHeader ieHeader;
253
254 set<Uint16> mandatoryIeLocalList = mandatoryIeSet;
255 while (buffer.lengthLeft() > IE_HEADER_SIZE)
256 {
257 GtpV2Ie::decodeGtpV2IeHeader(buffer, ieHeader);
258 if (ieHeader.length > buffer.lengthLeft())
259 {
260 // We do not have enough bytes left in the message for this IE
261 errorStream.add((char *)"IE Length exceeds beyond message boundary\n");
262 errorStream.add((char *)" Offending IE Type: ");
263 errorStream.add(ieHeader.ieType);
264 errorStream.add((char *)"\n Ie Length in Header: ");
265 errorStream.add(ieHeader.length);
266 errorStream.add((char *)"\n Bytes left in message: ");
267 errorStream.add(buffer.lengthLeft());
268 errorStream.endOfLine();
269 return false;
270 }
271
272 switch (ieHeader.ieType){
273
274 case CauseIeType:
275 {
276 CauseIe ieObject =
277 dynamic_cast<
278 CauseIe&>(GtpV2IeFactory::getInstance().getIeObject(CauseIeType));
279
280 if(ieHeader.instance == 0)
281 {
282 rc = ieObject.decodeCauseIe(buffer, data.cause, ieHeader.length);
283
284 if (!(rc))
285 {
286 errorStream.add((char *)"Failed to decode IE: cause\n");
287 return false;
288 }
289 }
290
291 else
292 {
293 // Unknown IE instance print error
294 errorStream.add((char *)"Unknown IE Type: ");
295 errorStream.add(ieHeader.ieType);
296 errorStream.endOfLine();
297 buffer.skipBytes(ieHeader.length);
298 }
299 break;
300 }
301
302 case DelayValueIeType:
303 {
304 DelayValueIe ieObject =
305 dynamic_cast<
306 DelayValueIe&>(GtpV2IeFactory::getInstance().getIeObject(DelayValueIeType));
307
308 if(ieHeader.instance == 0)
309 {
310 rc = ieObject.decodeDelayValueIe(buffer, data.dataNotificationDelay, ieHeader.length);
311
312 data.dataNotificationDelayIePresent = true;
313 if (!(rc))
314 {
315 errorStream.add((char *)"Failed to decode IE: dataNotificationDelay\n");
316 return false;
317 }
318 }
319
320 else
321 {
322 // Unknown IE instance print error
323 errorStream.add((char *)"Unknown IE Type: ");
324 errorStream.add(ieHeader.ieType);
325 errorStream.endOfLine();
326 buffer.skipBytes(ieHeader.length);
327 }
328 break;
329 }
330
331 case RecoveryIeType:
332 {
333 RecoveryIe ieObject =
334 dynamic_cast<
335 RecoveryIe&>(GtpV2IeFactory::getInstance().getIeObject(RecoveryIeType));
336
337 if(ieHeader.instance == 0)
338 {
339 rc = ieObject.decodeRecoveryIe(buffer, data.recovery, ieHeader.length);
340
341 data.recoveryIePresent = true;
342 if (!(rc))
343 {
344 errorStream.add((char *)"Failed to decode IE: recovery\n");
345 return false;
346 }
347 }
348
349 else
350 {
351 // Unknown IE instance print error
352 errorStream.add((char *)"Unknown IE Type: ");
353 errorStream.add(ieHeader.ieType);
354 errorStream.endOfLine();
355 buffer.skipBytes(ieHeader.length);
356 }
357 break;
358 }
359
360 case ThrottlingIeType:
361 {
362 ThrottlingIe ieObject =
363 dynamic_cast<
364 ThrottlingIe&>(GtpV2IeFactory::getInstance().getIeObject(ThrottlingIeType));
365
366 if(ieHeader.instance == 0)
367 {
368 rc = ieObject.decodeThrottlingIe(buffer, data.dlLowPriorityTrafficThrottling, ieHeader.length);
369
370 data.dlLowPriorityTrafficThrottlingIePresent = true;
371 if (!(rc))
372 {
373 errorStream.add((char *)"Failed to decode IE: dlLowPriorityTrafficThrottling\n");
374 return false;
375 }
376 }
377
378 else
379 {
380 // Unknown IE instance print error
381 errorStream.add((char *)"Unknown IE Type: ");
382 errorStream.add(ieHeader.ieType);
383 errorStream.endOfLine();
384 buffer.skipBytes(ieHeader.length);
385 }
386 break;
387 }
388
389 case ImsiIeType:
390 {
391 ImsiIe ieObject =
392 dynamic_cast<
393 ImsiIe&>(GtpV2IeFactory::getInstance().getIeObject(ImsiIeType));
394
395 if(ieHeader.instance == 0)
396 {
397 rc = ieObject.decodeImsiIe(buffer, data.imsi, ieHeader.length);
398
399 data.imsiIePresent = true;
400 if (!(rc))
401 {
402 errorStream.add((char *)"Failed to decode IE: imsi\n");
403 return false;
404 }
405 }
406
407 else
408 {
409 // Unknown IE instance print error
410 errorStream.add((char *)"Unknown IE Type: ");
411 errorStream.add(ieHeader.ieType);
412 errorStream.endOfLine();
413 buffer.skipBytes(ieHeader.length);
414 }
415 break;
416 }
417
418 case EpcTimerIeType:
419 {
420 EpcTimerIe ieObject =
421 dynamic_cast<
422 EpcTimerIe&>(GtpV2IeFactory::getInstance().getIeObject(EpcTimerIeType));
423
424 if(ieHeader.instance == 0)
425 {
426 rc = ieObject.decodeEpcTimerIe(buffer, data.dlBufferingDuration, ieHeader.length);
427
428 data.dlBufferingDurationIePresent = true;
429 if (!(rc))
430 {
431 errorStream.add((char *)"Failed to decode IE: dlBufferingDuration\n");
432 return false;
433 }
434 }
435
436 else
437 {
438 // Unknown IE instance print error
439 errorStream.add((char *)"Unknown IE Type: ");
440 errorStream.add(ieHeader.ieType);
441 errorStream.endOfLine();
442 buffer.skipBytes(ieHeader.length);
443 }
444 break;
445 }
446
447 case IntegerNumberIeType:
448 {
449 IntegerNumberIe ieObject =
450 dynamic_cast<
451 IntegerNumberIe&>(GtpV2IeFactory::getInstance().getIeObject(IntegerNumberIeType));
452
453 if(ieHeader.instance == 0)
454 {
455 rc = ieObject.decodeIntegerNumberIe(buffer, data.dlBufferingSuggestedPacketCount, ieHeader.length);
456
457 data.dlBufferingSuggestedPacketCountIePresent = true;
458 if (!(rc))
459 {
460 errorStream.add((char *)"Failed to decode IE: dlBufferingSuggestedPacketCount\n");
461 return false;
462 }
463 }
464
465 else
466 {
467 // Unknown IE instance print error
468 errorStream.add((char *)"Unknown IE Type: ");
469 errorStream.add(ieHeader.ieType);
470 errorStream.endOfLine();
471 buffer.skipBytes(ieHeader.length);
472 }
473 break;
474 }
475
476 default:
477 {
478 // Unknown IE print error
479 errorStream.add((char *)"Unknown IE Type: ");
480 errorStream.add(ieHeader.ieType);
481 errorStream.endOfLine();
482 buffer.skipBytes(ieHeader.length);
483 }
484 }
485 }
486 return rc; // TODO validations
487}
488
489void DownlinkDataNotificationAcknowledgeMsg::
490displayDownlinkDataNotificationAcknowledgeMsgData_v(DownlinkDataNotificationAcknowledgeMsgData const &data, Debug &stream)
491{
492 stream.incrIndent();
493 stream.add((char *)"DownlinkDataNotificationAcknowledgeMsg:");
494 stream.endOfLine();
495 stream.incrIndent();
496
497
498 stream.add((char *)"IE - cause:");
499 stream.endOfLine();
500 CauseIe cause=
501 dynamic_cast<
502 CauseIe&>(GtpV2IeFactory::getInstance().getIeObject(CauseIeType));
503 cause.displayCauseIe_v(data.cause, stream);
504
505 if (data.dataNotificationDelayIePresent)
506 {
507
508
509 stream.add((char *)"IE - dataNotificationDelay:");
510 stream.endOfLine();
511 DelayValueIe delayValue=
512 dynamic_cast<
513 DelayValueIe&>(GtpV2IeFactory::getInstance().getIeObject(DelayValueIeType));
514 delayValue.displayDelayValueIe_v(data.dataNotificationDelay, stream);
515
516 }
517 if (data.recoveryIePresent)
518 {
519
520
521 stream.add((char *)"IE - recovery:");
522 stream.endOfLine();
523 RecoveryIe recovery=
524 dynamic_cast<
525 RecoveryIe&>(GtpV2IeFactory::getInstance().getIeObject(RecoveryIeType));
526 recovery.displayRecoveryIe_v(data.recovery, stream);
527
528 }
529 if (data.dlLowPriorityTrafficThrottlingIePresent)
530 {
531
532
533 stream.add((char *)"IE - dlLowPriorityTrafficThrottling:");
534 stream.endOfLine();
535 ThrottlingIe throttling=
536 dynamic_cast<
537 ThrottlingIe&>(GtpV2IeFactory::getInstance().getIeObject(ThrottlingIeType));
538 throttling.displayThrottlingIe_v(data.dlLowPriorityTrafficThrottling, stream);
539
540 }
541 if (data.imsiIePresent)
542 {
543
544
545 stream.add((char *)"IE - imsi:");
546 stream.endOfLine();
547 ImsiIe imsi=
548 dynamic_cast<
549 ImsiIe&>(GtpV2IeFactory::getInstance().getIeObject(ImsiIeType));
550 imsi.displayImsiIe_v(data.imsi, stream);
551
552 }
553 if (data.dlBufferingDurationIePresent)
554 {
555
556
557 stream.add((char *)"IE - dlBufferingDuration:");
558 stream.endOfLine();
559 EpcTimerIe epcTimer=
560 dynamic_cast<
561 EpcTimerIe&>(GtpV2IeFactory::getInstance().getIeObject(EpcTimerIeType));
562 epcTimer.displayEpcTimerIe_v(data.dlBufferingDuration, stream);
563
564 }
565 if (data.dlBufferingSuggestedPacketCountIePresent)
566 {
567
568
569 stream.add((char *)"IE - dlBufferingSuggestedPacketCount:");
570 stream.endOfLine();
571 IntegerNumberIe integerNumber=
572 dynamic_cast<
573 IntegerNumberIe&>(GtpV2IeFactory::getInstance().getIeObject(IntegerNumberIeType));
574 integerNumber.displayIntegerNumberIe_v(data.dlBufferingSuggestedPacketCount, stream);
575
576 }
577
578 stream.decrIndent();
579 stream.decrIndent();
580}
581
582