blob: b1dcd54d81494f5cf7bf8a3212fff71ba5113650 [file] [log] [blame]
[% IF ieData.ieCardinality == 1 -%]
// Encode the Ie Header
header.ieType = [% ieData.ieType %]IeType;
header.instance = [% ieData.instance %];
header.length = 0; // We will encode the IE first and then update the length
GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
startIndex = buffer.getCurrentIndex();
[% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
dynamic_cast<
[% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().getIeObject([% ieData.ieType %]IeType));
[% IF ieData.grouped == 'Yes'-%]
[% ieData.grpIeInstClassName %] groupedIeInstance =
dynamic_cast<
[% ieData.grpIeInstClassName %]&>([% ieData.ieLocalVar %].getGroupedIe(msgType, [% ieData.instance %]));
rc = groupedIeInstance.encode[% ieData.grpIeInstClassName %](buffer, data.[% ieData.ieVarName %]);
[% ELSE -%]
rc = [% ieData.ieLocalVar %].encode[% ieData.ieType %]Ie(buffer, data.[% ieData.ieVarName %]);
[% END -%]
endIndex = buffer.getCurrentIndex();
length = endIndex - startIndex;
// encode the length value now
buffer.goToIndex(startIndex - 3);
buffer.writeUint16(length, false);
buffer.goToIndex(endIndex);
[% ELSE -%]
// First validate if the applicatoin provided more than the expected cardinality
if (data.[% ieData.ieVarName %]Count > [% ieData.ieCardinality %])
{
errorStream.add((char *)"Number of entries of [% ieData.ieVarName %] exceeded\n");
errorStream.add((char *)"Expected count: [% ieData.ieCardinality %] Received count: ");
errorStream.add((char *)"data.[% ieData.ieVarName %]Count");
errorStream.endOfLine();
return false;
}
for (Uint8 i = 0; i < data.[% ieData.ieVarName %]Count; i++)
{
// Encode the Ie Header
header.ieType = [% ieData.ieType %]IeType;
header.instance = [% ieData.instance %];
header.length = 0; // We will encode the IE first and then update the length
GtpV2Ie::encodeGtpV2IeHeader(buffer, header);
startIndex = buffer.getCurrentIndex();
[% ieData.ieType %]Ie [% ieData.ieLocalVar %]=
dynamic_cast<
[% ieData.ieType %]Ie&>(GtpV2IeFactory::getInstance().
getIeObject([% ieData.ieType %]IeType));
[% IF ieData.grouped == 'Yes'-%]
[% ieData.grpIeInstClassName %] groupedIeInstance = dynamic_cast<[% ieData.grpIeInstClassName %]&>([% ieData.ieLocalVar %].getGroupedIe(msgType, [% ieData.instance %]));
rc = groupedIeInstance.encode[% ieData.grpIeInstClassName %](buffer, data.[% ieData.ieVarName %][i]);
[% ELSE -%]
rc = [% ieData.ieLocalVar %].encode[% ieData.ieType %]Ie(buffer, data.[% ieData.ieVarName %][i]);
[% END -%]
endIndex = buffer.getCurrentIndex();
length = endIndex - startIndex;
// encode the length value now
buffer.goToIndex(startIndex - 3);
buffer.writeUint16(length, false);
buffer.goToIndex(endIndex);
}
[% END -%]