blob: 1b90143363b1c90b92f4b88aca4e8ae6d9821d6f [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 "pgwsOverloadControlInformationInDeleteBearerRequest.h"
16#include "manual/gtpV2Ie.h"
17#include "gtpV2IeFactory.h"
18#include "sequenceNumberIe.h"
19#include "metricIe.h"
20#include "epcTimerIe.h"
21#include "apnIe.h"
22
23PgwsOverloadControlInformationInDeleteBearerRequest::
24PgwsOverloadControlInformationInDeleteBearerRequest()
25{
26 Uint16 mandIe;
27 mandIe = SequenceNumberIeType;
28 mandIe = (mandIe << 8) | 0; // overloadControlSequenceNumber
29 mandatoryIeSet.insert(mandIe);
30 mandIe = MetricIeType;
31 mandIe = (mandIe << 8) | 0; // overloadReductionMetric
32 mandatoryIeSet.insert(mandIe);
33 mandIe = EpcTimerIeType;
34 mandIe = (mandIe << 8) | 0; // periodOfValidity
35 mandatoryIeSet.insert(mandIe);
36
37}
38
39PgwsOverloadControlInformationInDeleteBearerRequest::
40~PgwsOverloadControlInformationInDeleteBearerRequest()
41{
42
43}
44bool PgwsOverloadControlInformationInDeleteBearerRequest::
45encodePgwsOverloadControlInformationInDeleteBearerRequest(MsgBuffer &buffer,
46 PgwsOverloadControlInformationInDeleteBearerRequestData
47 const &data)
48{
49 bool rc = false;
50 GtpV2IeHeader header;
51 Uint16 startIndex = 0;
52 Uint16 endIndex = 0;
53 Uint16 length = 0;
54
55
56
57 // Encode the Ie Header
58 header.ieType = SequenceNumberIeType;
59 header.instance = 0;
60 header.length = 0; // We will encode the IE first and then update the length
61 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
62 startIndex = buffer.getCurrentIndex();
63 SequenceNumberIe sequenceNumber=
64 dynamic_cast<
65 SequenceNumberIe&>(GtpV2IeFactory::getInstance().getIeObject(SequenceNumberIeType));
66 rc = sequenceNumber.encodeSequenceNumberIe(buffer, data.overloadControlSequenceNumber);
67 endIndex = buffer.getCurrentIndex();
68 length = endIndex - startIndex;
69
70 // encode the length value now
71 buffer.goToIndex(startIndex - 3);
72 buffer.writeUint16(length, false);
73 buffer.goToIndex(endIndex);
74 if (!(rc))
75 {
76 errorStream.add((char *)"Failed to encode IE: overloadControlSequenceNumber\n");
77 return false;
78 }
79
80
81
82 // Encode the Ie Header
83 header.ieType = MetricIeType;
84 header.instance = 0;
85 header.length = 0; // We will encode the IE first and then update the length
86 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
87 startIndex = buffer.getCurrentIndex();
88 MetricIe metric=
89 dynamic_cast<
90 MetricIe&>(GtpV2IeFactory::getInstance().getIeObject(MetricIeType));
91 rc = metric.encodeMetricIe(buffer, data.overloadReductionMetric);
92 endIndex = buffer.getCurrentIndex();
93 length = endIndex - startIndex;
94
95 // encode the length value now
96 buffer.goToIndex(startIndex - 3);
97 buffer.writeUint16(length, false);
98 buffer.goToIndex(endIndex);
99 if (!(rc))
100 {
101 errorStream.add((char *)"Failed to encode IE: overloadReductionMetric\n");
102 return false;
103 }
104
105
106
107 // Encode the Ie Header
108 header.ieType = EpcTimerIeType;
109 header.instance = 0;
110 header.length = 0; // We will encode the IE first and then update the length
111 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
112 startIndex = buffer.getCurrentIndex();
113 EpcTimerIe epcTimer=
114 dynamic_cast<
115 EpcTimerIe&>(GtpV2IeFactory::getInstance().getIeObject(EpcTimerIeType));
116 rc = epcTimer.encodeEpcTimerIe(buffer, data.periodOfValidity);
117 endIndex = buffer.getCurrentIndex();
118 length = endIndex - startIndex;
119
120 // encode the length value now
121 buffer.goToIndex(startIndex - 3);
122 buffer.writeUint16(length, false);
123 buffer.goToIndex(endIndex);
124 if (!(rc))
125 {
126 errorStream.add((char *)"Failed to encode IE: periodOfValidity\n");
127 return false;
128 }
129
130 if (data.listOfAccessPointNameIePresent)
131 {
132
133 // Encode the Ie Header
134 header.ieType = ApnIeType;
135 header.instance = 0;
136 header.length = 0; // We will encode the IE first and then update the length
137 GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
138 startIndex = buffer.getCurrentIndex();
139 ApnIe apn=
140 dynamic_cast<
141 ApnIe&>(GtpV2IeFactory::getInstance().getIeObject(ApnIeType));
142 rc = apn.encodeApnIe(buffer, data.listOfAccessPointName);
143 endIndex = buffer.getCurrentIndex();
144 length = endIndex - startIndex;
145
146 // encode the length value now
147 buffer.goToIndex(startIndex - 3);
148 buffer.writeUint16(length, false);
149 buffer.goToIndex(endIndex);
150
151 if (!(rc))
152 {
153 errorStream.add((char *)"Failed to encode IE: listOfAccessPointName\n");
154 return false;
155 }
156 }
157 return rc;
158}
159
160bool PgwsOverloadControlInformationInDeleteBearerRequest::
161decodePgwsOverloadControlInformationInDeleteBearerRequest(MsgBuffer &buffer,
162 PgwsOverloadControlInformationInDeleteBearerRequestData
163 &data, Uint16 length)
164{
165
166 bool rc = false;
167 GtpV2IeHeader ieHeader;
168 set<Uint16> mandatoryIeLocalList = mandatoryIeSet;
169 while (buffer.lengthLeft() > IE_HEADER_SIZE)
170 {
171 GtpV2Ie::decodeGtpV2IeHeader(buffer, ieHeader);
172 if (ieHeader.length > buffer.lengthLeft())
173 {
174 // We do not have enough bytes left in the message for this IE
175 errorStream.add((char *)"IE Length exceeds beyond message boundary\n");
176 errorStream.add((char *)" Offending IE Type: ");
177 errorStream.add(ieHeader.ieType);
178 errorStream.add((char *)"\n Ie Length in Header: ");
179 errorStream.add(ieHeader.length);
180 errorStream.add((char *)"\n Bytes left in message: ");
181 errorStream.add(buffer.lengthLeft());
182 errorStream.endOfLine();
183 return false;
184 }
185
186 switch (ieHeader.ieType){
187 case SequenceNumberIeType:
188 {
189 SequenceNumberIe ieObject =
190 dynamic_cast<
191 SequenceNumberIe&>(GtpV2IeFactory::getInstance().
192 getIeObject(SequenceNumberIeType));
193
194
195 if(ieHeader.instance == 0)
196 {
197
198 rc = ieObject.decodeSequenceNumberIe(buffer, data.overloadControlSequenceNumber, ieHeader.length);
199
200 if (!(rc))
201 {
202 errorStream.add((char *)"Failed to decode IE: overloadControlSequenceNumber\n");
203 return false;
204 }
205 Uint16 mandIe = SequenceNumberIeType;
206 mandIe = (mandIe << 8) | 0;
207 mandatoryIeLocalList.erase(mandIe);
208 }
209 else
210 {
211 // Unknown IE instance print error TODO
212 errorStream.add((char *)"Unknown IE Type: ");
213 errorStream.add(ieHeader.ieType);
214 errorStream.endOfLine();
215 buffer.skipBytes(ieHeader.length);
216 }
217 break;
218 }
219 case MetricIeType:
220 {
221 MetricIe ieObject =
222 dynamic_cast<
223 MetricIe&>(GtpV2IeFactory::getInstance().
224 getIeObject(MetricIeType));
225
226
227 if(ieHeader.instance == 0)
228 {
229
230 rc = ieObject.decodeMetricIe(buffer, data.overloadReductionMetric, ieHeader.length);
231
232 if (!(rc))
233 {
234 errorStream.add((char *)"Failed to decode IE: overloadReductionMetric\n");
235 return false;
236 }
237 Uint16 mandIe = MetricIeType;
238 mandIe = (mandIe << 8) | 0;
239 mandatoryIeLocalList.erase(mandIe);
240 }
241 else
242 {
243 // Unknown IE instance print error TODO
244 errorStream.add((char *)"Unknown IE Type: ");
245 errorStream.add(ieHeader.ieType);
246 errorStream.endOfLine();
247 buffer.skipBytes(ieHeader.length);
248 }
249 break;
250 }
251 case EpcTimerIeType:
252 {
253 EpcTimerIe ieObject =
254 dynamic_cast<
255 EpcTimerIe&>(GtpV2IeFactory::getInstance().
256 getIeObject(EpcTimerIeType));
257
258
259 if(ieHeader.instance == 0)
260 {
261
262 rc = ieObject.decodeEpcTimerIe(buffer, data.periodOfValidity, ieHeader.length);
263
264 if (!(rc))
265 {
266 errorStream.add((char *)"Failed to decode IE: periodOfValidity\n");
267 return false;
268 }
269 Uint16 mandIe = EpcTimerIeType;
270 mandIe = (mandIe << 8) | 0;
271 mandatoryIeLocalList.erase(mandIe);
272 }
273 else
274 {
275 // Unknown IE instance print error TODO
276 errorStream.add((char *)"Unknown IE Type: ");
277 errorStream.add(ieHeader.ieType);
278 errorStream.endOfLine();
279 buffer.skipBytes(ieHeader.length);
280 }
281 break;
282 }
283 case ApnIeType:
284 {
285 ApnIe ieObject =
286 dynamic_cast<
287 ApnIe&>(GtpV2IeFactory::getInstance().
288 getIeObject(ApnIeType));
289
290
291 if(ieHeader.instance == 0)
292 {
293
294 rc = ieObject.decodeApnIe(buffer, data.listOfAccessPointName, ieHeader.length);
295
296 data.listOfAccessPointNameIePresent = true;
297 if (!(rc))
298 {
299 errorStream.add((char *)"Failed to decode IE: listOfAccessPointName\n");
300 return false;
301 }
302 }
303 else
304 {
305 // Unknown IE instance print error TODO
306 errorStream.add((char *)"Unknown IE Type: ");
307 errorStream.add(ieHeader.ieType);
308 errorStream.endOfLine();
309 buffer.skipBytes(ieHeader.length);
310 }
311 break;
312 }
313 default:
314 {
315 // Unknown IE print error
316 errorStream.add((char *)"Unknown IE Type: ");
317 errorStream.add(ieHeader.ieType);
318 errorStream.endOfLine();
319 buffer.skipBytes(ieHeader.length);
320 }
321 }
322 }
323 if (!mandatoryIeLocalList.empty())
324 {
325 // some mandatory IEs are missing
326 errorStream.add((char *)"Missing Mandatory IEs:");
327 errorStream.endOfLine();
328 while (!mandatoryIeLocalList.empty())
329 {
330 Uint16 missingMandIe = *mandatoryIeLocalList.begin ();
331 mandatoryIeLocalList.erase (mandatoryIeLocalList.begin ());
332 Uint16 missingInstance = missingMandIe & 0x00FF;
333 Uint16 missingIeType = (missingMandIe >> 8);
334 errorStream.add ((char *)"Missing Ie type: ");
335 errorStream.add (missingIeType);
336 errorStream.add ((char *)" Instance: ");
337 errorStream.add (missingInstance);
338 errorStream.endOfLine();
339 }
340 rc = false;
341
342 }
343 return rc;
344}
345
346void PgwsOverloadControlInformationInDeleteBearerRequest::
347displayPgwsOverloadControlInformationInDeleteBearerRequestData_v
348(PgwsOverloadControlInformationInDeleteBearerRequestData const &data, Debug &stream)
349{
350 stream.incrIndent();
351 stream.add((char *)"PgwsOverloadControlInformationInDeleteBearerRequest:");
352 stream.endOfLine();
353 stream.incrIndent();
354
355
356
357
358 if (data.listOfAccessPointNameIePresent)
359 {
360
361 stream.add((char *)"listOfAccessPointName:");
362 stream.endOfLine();
363 ApnIe apn=
364 dynamic_cast<
365 ApnIe&>(GtpV2IeFactory::getInstance().getIeObject(ApnIeType));
366 apn.displayApnIe_v(data.listOfAccessPointName, stream);
367
368 }
369
370 stream.decrIndent();
371 stream.decrIndent();
372}
373
374
375
376
377