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