| [% 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 -%] |