blob: 2e1a131f38f58d889204469c38e7f7e9bb5096a2 [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 * This is an auto generated file.
9 * Please do not edit this file.
10 * All edits to be made through template source file
11 * <TOP-DIR/scripts/GtpV2StackCodeGen/tts/ietemplate.cpp.tt>
12 ******************************************************************************/
13
14#include "[% tempdata.fileName %].h"
15#include "dataTypeCodecUtils.h"
16
17[% tempdata.className %]::[% tempdata.className %]()
18{
19 ieType = [% tempdata.ieTypeVal %];
20 // TODO
21
22}
23
24[% tempdata.className %]::~[% tempdata.className %]() {
25 // TODO Auto-generated destructor stub
26}
27
28bool [% tempdata.className %]::encode[% tempdata.className %](MsgBuffer &buffer, [% tempdata.className %]Data const &data)
29{
30[% IF validationPresent == "y" -%]
31 if (!([% validationRule %]))
32 {
33 errorStream.add((char *)"Data validation failure at IE : [% tempdata.className %]\n");
34 return false;
35 }[% END -%]
36[% FOREACH Item IN tempdata.sequence -%]
37[% IF Item -%]
38[% IF Item.skipType == "y" -%]
39 buffer.skip[% Item.bitByte %]([% Item.skipValue %]);
40
41[% ELSE -%]
42[% IF Item.presence == "optional" -%]
43 if (data.[% Item.fieldName %]Present)
44 {
45[% IF Item.encodeConditional == "y" -%]
46 if ([% Item.encodeCondition %])
47 {
48[% IF Item.leafType == "y" -%]
49[% IF Item.validationPresent == "y" -%]
50 if (!([% Item.validationRule %]))
51 {
52 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
53 return false;
54 }
55[% END -%]
56[% IF Item.bitField == "y" -%]
57 if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
58 {
59 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
60 return false;
61 }
62[% ELSE -%]
63 if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
64 {
65 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
66 return false;
67 }
68[% END -%]
69[% ELSE -%]
70[% IF Item.validationPresent == "y" -%]
71 if (!([% Item.validationRule %]))
72 {
73 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
74 return false;
75 }
76[% END -%]
77 if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
78 {
79 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
80 return false;
81 }
82[% END -%]
83 }
84 }
85[% ELSE -%]
86[% IF Item.leafType == "y" -%]
87[% IF Item.validationPresent == "y" -%]
88 if (!([% Item.validationRule %]))
89 {
90 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
91 return false;
92 }
93[% END -%]
94[% IF Item.bitField == "y" -%]
95 if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
96 {
97 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
98 return false;
99 }
100[% ELSE -%]
101 if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
102 {
103 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
104 return false;
105 }
106[% END -%]
107[% ELSE -%]
108[% IF Item.validationPresent == "y" -%]
109 if (!([% Item.validationRule %]))
110 {
111 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
112 return false;
113 }
114[% END -%]
115 if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
116 {
117 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
118 return false;
119 }
120[% END -%]
121 }
122[% END -%]
123[% ELSE -%]
124[% IF Item.encodeConditional == "y" -%]
125 if ([% Item.encodeCondition %])
126 {
127[% IF Item.leafType == "y" -%]
128[% IF Item.validationPresent == "y" -%]
129 if (!([% Item.validationRule %]))
130 {
131 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
132 return false;
133 }
134[% END -%]
135[% IF Item.bitField == "y" -%]
136 if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
137 {
138 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
139 return false;
140 }
141[% ELSE -%]
142 if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
143 {
144 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
145 return false;
146 }
147[% END -%]
148[% ELSE -%]
149[% IF Item.validationPresent == "y" -%]
150 if (!([% Item.validationRule %]))
151 {
152 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
153 return false;
154 }
155[% END -%]
156 if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
157 {
158 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
159 return false;
160 }
161[% END -%]
162 }
163[% ELSE -%]
164[% IF Item.leafType == "y" -%]
165[% IF Item.validationPresent == "y" -%]
166 if (!([% Item.validationRule %]))
167 {
168 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
169 return false;
170 }
171[% END -%]
172[% IF Item.bitField == "y" -%]
173 if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
174 {
175 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
176 return false;
177 }
178[% ELSE -%]
179 if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
180 {
181 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
182 return false;
183 }
184[% END -%]
185[% ELSE -%]
186[% IF Item.validationPresent == "y" -%]
187 if (!([% Item.validationRule %]))
188 {
189 errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
190 return false;
191 }
192[% END -%]
193 if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
194 {
195 errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
196 return false;
197 }
198[% END -%]
199[% END -%]
200[% END -%]
201[% END -%]
202[% END -%]
203[% END %]
204 return true;
205}
206
207bool [% tempdata.className %]::decode[% tempdata.className %](MsgBuffer &buffer, [% tempdata.className %]Data &data, Uint16 length)
208{
209[%- flag = 0 -%]
210
211 // TODO optimize the length checks
212
213 Uint16 ieBoundary = buffer.getCurrentIndex() + length;
214[% FOREACH Item IN tempdata.sequence -%]
215[% IF Item.length == "lengthLeft" -%][%- IF flag == 0 %]
216 Uint16 lengthLeft = length;
217 [%- flag = 1 %]
218[% END -%][% END -%]
219[% IF Item.skipType == "y" -%]
220 buffer.skip[% Item.bitByte %]([% Item.skipValue %]);
221 if (buffer.getCurrentIndex() > ieBoundary)
222 {
223 errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
224 return false;
225 }
226
227[% ELSE -%]
228[% IF Item.decodeConditional == "y" %]
229 if ([% Item.decodeCondition %])
230 {
231[% IF Item.leafType == "y" -%]
232[% IF Item.bitField == "y" -%]
233 data.[% Item.fieldName %] = buffer.readBits([% Item.fieldSize %]);
234 // confirm that we are not reading beyond the IE boundary
235 if (buffer.getCurrentIndex() > ieBoundary)
236 {
237 errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
238 return false;
239 }
240[% ELSE %]
241 buffer.read[% Item.fieldType %](data.[% Item.fieldName %]);
242 if (buffer.getCurrentIndex() > ieBoundary)
243 {
244 errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
245 return false;
246 }
247[% END -%]
248[% IF Item.validationPresent == "y" -%]
249 if (!([% Item.validationRule %]))
250 {
251 errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
252 return false; //TODO need to add validations
253 }
254[% END -%]
255[% ELSE -%]
256[% IF Item.length == "lengthLeft" -%]
257 lengthLeft = ieBoundary - buffer.getCurrentIndex();
258[% END -%]
259[% IF Item.arrayType == "y" -%]
260 if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %], [% Item.count %])))
261[% ELSE -%]
262 if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %])))
263[% END -%]
264 {
265 errorStream.add((char *)"Failed to decode: [% Item.fieldName %]\n");
266 return false;
267 }
268[% IF Item.validationPresent == "y" -%]
269 if (!([% Item.validationRule %]))
270 {
271 errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
272 return false; //TODO need to add validations
273 }
274[% END -%]
275[% END -%]
276[% IF Item.presence == "optional" -%]
277 data.[% Item.fieldName %]Present = true;
278[% END -%]
279 }
280[% ELSE -%]
281[% IF Item.leafType == "y" -%]
282[% IF Item.bitField == "y" -%]
283 data.[% Item.fieldName %] = buffer.readBits([% Item.fieldSize %]);
284 // confirm that we are not reading beyond the IE boundary
285 if (buffer.getCurrentIndex() > ieBoundary)
286 {
287 errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
288 return false;
289 }
290[% ELSE %]
291 buffer.read[% Item.fieldType %](data.[% Item.fieldName %]);
292 if (buffer.getCurrentIndex() > ieBoundary)
293 {
294 errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
295 return false;
296 }
297[% END -%]
298[% IF Item.validationPresent == "y" -%]
299 if (!([% Item.validationRule %]))
300 {
301 errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
302 return false; //TODO need to add validations
303 }
304[% END -%]
305[% ELSE -%]
306[% IF Item.length == "lengthLeft" -%]
307 lengthLeft = ieBoundary - buffer.getCurrentIndex();
308[% END -%]
309[% IF Item.arrayType == "y" -%]
310 if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %], [% Item.count %])))
311[% ELSE -%]
312 if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %])))
313[% END -%]
314 {
315 errorStream.add((char *)"Failed to decode: [% Item.fieldName %]\n");
316 return false;
317 }
318[% IF Item.validationPresent == "y" -%]
319 if (!([% Item.validationRule %]))
320 {
321 errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
322 return false; //TODO need to add validations
323 }
324[% END -%]
325[% END -%]
326[% IF Item.presence == "optional" -%]
327 data.[% Item.fieldName %]Present = true;
328[% END -%]
329[% END -%]
330[% END -%]
331[% END -%]
332[% IF validationPresent == "y" -%]
333 if (!([% validationRule %]))
334 {
335 errorStream.add((char *)"Data validation failure at IE: [% tempdata.className %]\n");
336 return false;
337 }
338[% END -%]
339
340 // The IE is decoded now. The buffer index should be pointing to the
341 // IE Boundary. If not, we have some more data left for the IE which we don't know
342 // how to decode
343 if (ieBoundary == buffer.getCurrentIndex())
344 {
345 return true;
346 }
347 else
348 {
349 errorStream.add((char *)"Unable to decode IE [% tempdata.className %]\n");
350 return false;
351 }
352}
353void [% tempdata.className %]::display[% tempdata.className %]_v([% tempdata.className %]Data const &data, Debug &stream)
354{
355 stream.incrIndent();
356 stream.add((char *)"[% tempdata.className %]Data:");
357 stream.incrIndent();
358 stream.endOfLine();
359[% FOREACH Item IN tempdata.sequence -%]
360[% IF Item.skipType != "y" -%]
361
362[% IF Item.presence == "optional" -%]
363 if (data.[% Item.fieldName %]Present)
364 {
365[% IF Item.encodeConditional == "y" -%]
366 if ([% Item.encodeCondition %])
367 {
368[% IF Item.leafType == "y" -%]
369[% IF Item.bitField == "y" -%]
370 stream.add((char *) "[% Item.fieldName %]: ");
371 stream.add((Uint8)data.[% Item.fieldName %]);
372 stream.endOfLine();
373[% ELSE -%]
374 stream.add((char *)"[% Item.fieldName %]: ");
375 stream.add(data.[% Item.fieldName %]);
376 stream.endOfLine();
377[% END -%]
378[% ELSE -%]
379 stream.add((char *)"[% Item.fieldName %]:");
380 stream.endOfLine();
381 DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
382[% END -%]
383 }
384 }
385[% ELSE -%]
386[% IF Item.leafType == "y" -%]
387[% IF Item.bitField == "y" -%]
388 stream.add((char *) "[% Item.fieldName %]: ");
389 stream.add((Uint8)data.[% Item.fieldName %]);
390 stream.endOfLine();
391[% ELSE -%]
392 stream.add((char *)"[% Item.fieldName %]: ");
393 stream.add(data.[% Item.fieldName %]);
394 stream.endOfLine();
395[% END -%]
396[% ELSE -%]
397 stream.add((char *)"[% Item.fieldName %]:");
398 stream.endOfLine();
399 DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
400[% END -%]
401 }
402[% END -%]
403[% ELSE -%]
404[% IF Item.encodeConditional == "y" -%]
405 if ([% Item.encodeCondition %])
406 {
407[% IF Item.leafType == "y" -%]
408[% IF Item.bitField == "y" -%]
409 stream.add( (char *)"[% Item.fieldName %]: ");
410 stream.add((Uint8)data.[% Item.fieldName %]);
411 stream.endOfLine();
412[% ELSE -%]
413 stream.add((char *)"[% Item.fieldName %]: ");
414 stream.add(data.[% Item.fieldName %]);
415 stream.endOfLine();
416[% END -%]
417[% ELSE -%]
418 stream.add((char *)"[% Item.fieldName %]:");
419 stream.endOfLine();
420 DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
421[% END -%]
422 }
423[% ELSE -%]
424[% IF Item.leafType == "y" -%]
425[% IF Item.bitField == "y" -%]
426 stream.add( (char *)"[% Item.fieldName %]: ");
427 stream.add((Uint8)data.[% Item.fieldName %]);
428 stream.endOfLine();
429[% ELSE -%]
430 stream.add((char *)"[% Item.fieldName %]: ");
431 stream.add(data.[% Item.fieldName %]);
432 stream.endOfLine();
433[% END -%]
434[% ELSE -%]
435 stream.add((char *)"[% Item.fieldName %]:");
436 stream.endOfLine();
437 DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
438[% END -%]
439[% END -%]
440[% END -%]
441[% END -%]
442[% END -%]
443 stream.decrIndent();
444 stream.decrIndent();
445}