blob: ceef7aebbb1d4f59f12bbb83cea33ad47f2fb424 [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 "[% tempdata.fileName %].h"
16#include "../ieClasses/manual/gtpV2Ie.h"
17#include "../ieClasses/gtpV2IeFactory.h"
18[% FOREACH ieData IN tempdata.ieList -%]
19#include "../ieClasses/[% ieData.ieFileName %].h"
20[% IF ieData.grouped == 'Yes'-%]
21#include "../ieClasses/[% ieData.grpIeInstFileName %].h"
22[% END -%]
23[% END -%]
24
25[% tempdata.msgClassName %]::[% tempdata.msgClassName %]()
26{
27 msgType = [% tempdata.msgClassName %]Type;
28[% PROCESS MandIeList %]
29}
30
31[% tempdata.msgClassName %]::~[% tempdata.msgClassName %]()
32{
33
34}
35
36bool [% tempdata.msgClassName %]::encode[% tempdata.msgClassName %](MsgBuffer &buffer,
37 [% tempdata.msgClassName %]Data
38 const &data)
39{
40 bool rc = false;
41 GtpV2IeHeader header;
42 Uint16 startIndex = 0;
43 Uint16 endIndex = 0;
44 Uint16 length = 0;
45[% FOREACH ieData IN tempdata.ieList -%]
46
47[% IF ieData.iePresence != 'M' -%][% IF ieData.ieCardinality == 1 -%]
48 if (data.[% ieData.ieVarName %]IePresent)
49 {
50 [% INCLUDE tts/msgEncode.tt FILTER indent%]
51 if (!(rc))
52 {
53 errorStream.add((char *)"Failed to encode IE: [% ieData.ieVarName %]\n");
54 return false;
55 }
56 }
57[% ELSE -%]
58 [% INCLUDE tts/msgEncode.tt %]
59 if (!(rc))
60 {
61 errorStream.add((char *)"Failed to encode IE: [% ieData.ieVarName %]\n");
62 return false;
63 }
64[% END -%]
65[% ELSE -%]
66 [% INCLUDE tts/msgEncode.tt %]
67 if (!(rc))
68 {
69 errorStream.add((char *)"Failed to encode IE: [% ieData.ieVarName %]\n");
70 return false;
71 }
72[% END -%]
73[% END -%]
74 return rc;
75
76}
77
78bool [% tempdata.msgClassName %]::decode[% tempdata.msgClassName %](MsgBuffer &buffer,
79 [% tempdata.msgClassName %]Data
80 &data, Uint16 length)
81{
82
83 bool rc = false;
84 GtpV2IeHeader ieHeader;
85
86 set<Uint16> mandatoryIeLocalList = mandatoryIeSet;
87 while (buffer.lengthLeft() > IE_HEADER_SIZE)
88 {
89 GtpV2Ie::decodeGtpV2IeHeader(buffer, ieHeader);
90 if (ieHeader.length > buffer.lengthLeft())
91 {
92 // We do not have enough bytes left in the message for this IE
93 errorStream.add((char *)"IE Length exceeds beyond message boundary\n");
94 errorStream.add((char *)" Offending IE Type: ");
95 errorStream.add(ieHeader.ieType);
96 errorStream.add((char *)"\n Ie Length in Header: ");
97 errorStream.add(ieHeader.length);
98 errorStream.add((char *)"\n Bytes left in message: ");
99 errorStream.add(buffer.lengthLeft());
100 errorStream.endOfLine();
101 return false;
102 }
103
104 switch (ieHeader.ieType){
105[% FOREACH ieTypeEntry IN tempdata.ieTypeList -%]
106
107 case [% ieTypeEntry %]IeType:
108 {
109 [% ieTypeEntry %]Ie ieObject =
110 dynamic_cast<
111 [% ieTypeEntry %]Ie&>(GtpV2IeFactory::getInstance().getIeObject([% ieTypeEntry %]IeType));
112[% SET first = 1 -%]
113[% FOREACH ieTypeData IN tempdata.ieList -%]
114[% IF ieTypeData.ieType == ieTypeEntry -%]
115[% IF first == 1 -%]
116[% SET first = 0 %]
117 if(ieHeader.instance == [% ieTypeData.instance %])
118[% ELSE -%]
119 else if(ieHeader.instance == [% ieTypeData.instance %])
120[% END -%]
121 {
122[% INCLUDE tts/msgDecode.tt %]
123[% IF ieTypeData.ieCardinality == 1 -%][% IF ieTypeData.iePresence != "M" -%]
124 data.[% ieTypeData.ieVarName %]IePresent = true;
125[% END -%][% END -%]
126 if (!(rc))
127 {
128 errorStream.add((char *)"Failed to decode IE: [% ieTypeData.ieVarName %]\n");
129 return false;
130 }
131 }
132[% END %][% END %]
133 else
134 {
135 // Unknown IE instance print error
136 errorStream.add((char *)"Unknown IE Type: ");
137 errorStream.add(ieHeader.ieType);
138 errorStream.endOfLine();
139 buffer.skipBytes(ieHeader.length);
140 }
141 break;
142 }
143[% END %]
144 default:
145 {
146 // Unknown IE print error
147 errorStream.add((char *)"Unknown IE Type: ");
148 errorStream.add(ieHeader.ieType);
149 errorStream.endOfLine();
150 buffer.skipBytes(ieHeader.length);
151 }
152 }
153 }
154 return rc; // TODO validations
155}
156
157void [% tempdata.msgClassName %]::
158display[% tempdata.msgClassName %]Data_v([% tempdata.msgClassName %]Data const &data, Debug &stream)
159{
160 stream.incrIndent();
161 stream.add((char *)"[% tempdata.msgClassName %]:");
162 stream.endOfLine();
163 stream.incrIndent();
164
165 [%- flag = 0 -%]
166
167
168[% FOREACH ieData IN tempdata.ieList -%]
169[% IF ieData.ieCardinality != 1 -%]
170[%- IF flag == 0 %]
171 Uint8 displayCount;
172
173[%- flag = 1 %]
174[% END -%][% END -%]
175[% IF ieData.iePresence != 'M' -%][% IF ieData.ieCardinality == 1 -%]
176 if (data.[% ieData.ieVarName %]IePresent)
177 {
178
179
180 stream.add((char *)"IE - [% ieData.ieVarName %]:");
181 stream.endOfLine();
182 [% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
183 dynamic_cast<
184 [% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().getIeObject([% ieData.ieType %]IeType));
185 [% PROCESS ieDisplay_grp %]
186 }
187[% ELSE -%]
188 displayCount = data.[% ieData.ieVarName %]Count;
189 if (displayCount > [% ieData.ieCardinality %])
190 {
191 stream.add((char *)"Invalid data more than [% ieData.ieCardinality %] instances");
192 stream.endOfLine();
193 stream.add((char *)"Displaying only [% ieData.ieCardinality %]");
194 stream.endOfLine();
195 displayCount = [% ieData.ieCardinality %];
196 }
197 for (Uint8 i = 0; i < displayCount; i++)
198 {
199 stream.add((char *)"IE - [% ieData.ieVarName %]:");
200 stream.endOfLine();
201 [% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
202 dynamic_cast<
203 [% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().getIeObject([% ieData.ieType %]IeType));
204 [% PROCESS ieDisplay_grp -%]
205 }
206
207
208
209
210[% END -%]
211[% ELSE -%]
212[% IF ieData.ieCardinality == 1 -%]
213 stream.add((char *)"IE - [% ieData.ieVarName %]:");
214 stream.endOfLine();
215 [% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
216 dynamic_cast<
217 [% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().getIeObject([% ieData.ieType %]IeType));
218 [% PROCESS ieDisplay_grp %]
219[% ELSE -%]
220 displayCount = data.[% ieData.ieVarName %]Count;
221 if (displayCount > [% ieData.ieCardinality %])
222 {
223 stream.add((char *)"Invalid data more than [% ieData.ieCardinality %] instances");
224 stream.endOfLine();
225 stream.add((char *)"Displaying only [% ieData.ieCardinality %]");
226 stream.endOfLine();
227 displayCount = [% ieData.ieCardinality %];
228 }
229 for (Uint8 i = 0; i < displayCount; i++)
230 {
231 stream.add((char *)"IE - [% ieData.ieVarName %]:");
232 stream.endOfLine();
233 [% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
234 dynamic_cast<
235 [% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().getIeObject([% ieData.ieType %]IeType));
236[% PROCESS ieDisplay_grp %]
237 }
238[% END -%]
239[% END -%]
240[% END -%]
241
242 stream.decrIndent();
243 stream.decrIndent();
244}
245
246[% BLOCK ieDisplay_grp -%]
247[% IF ieData.grouped == "Yes" -%]
248 [% ieData.grpIeInstClassName %] groupedIeInstance =
249 dynamic_cast<
250 [% ieData.grpIeInstClassName %]&>([% ieData.ieLocalVar %].getGroupedIe(msgType, [% ieData.instance %]));
251 groupedIeInstance.display[% ieData.grpIeInstClassName %]Data_v(data.[% ieData.ieVarName %][% PROCESS cardinalIndex %], stream);
252[% ELSE -%]
253 [% ieData.ieLocalVar %].display[% ieData.ieType %]Ie_v(data.[% ieData.ieVarName %][% PROCESS cardinalIndex %], stream);
254[% END -%]
255[% END -%]
256
257[% BLOCK cardinalIndex -%]
258[% IF ieData.ieCardinality != 1 %][i][% END -%]
259[% END -%]
260[% BLOCK MandIeList -%]
261[% SET first = 1 -%]
262[% FOREACH ieData IN tempdata.ieList -%]
263[% IF ieData.iePresence == 'M' -%]
264[% IF first == 1 -%]
265 Uint16 mandIe;
266[% SET first = 0 -%]
267[% END -%]
268 mandIe = [% ieData.ieType %]IeType;
269 mandIe = (mandIe << 8) | [% ieData.instance %]; // [% ieData.ieVarName %]
270 mandatoryIeSet.insert(mandIe);
271[%- END -%]
272[% END -%]
273[% END -%]