blob: 2e1a131f38f58d889204469c38e7f7e9bb5096a2 [file] [log] [blame]
/*
* Copyright 2019-present Infosys Limited  
*   
* SPDX-License-Identifier: Apache-2.0    
*/
/******************************************************************************
*
* This is an auto generated file.
* Please do not edit this file.
* All edits to be made through template source file
* <TOP-DIR/scripts/GtpV2StackCodeGen/tts/ietemplate.cpp.tt>
******************************************************************************/
#include "[% tempdata.fileName %].h"
#include "dataTypeCodecUtils.h"
[% tempdata.className %]::[% tempdata.className %]()
{
ieType = [% tempdata.ieTypeVal %];
// TODO
}
[% tempdata.className %]::~[% tempdata.className %]() {
// TODO Auto-generated destructor stub
}
bool [% tempdata.className %]::encode[% tempdata.className %](MsgBuffer &buffer, [% tempdata.className %]Data const &data)
{
[% IF validationPresent == "y" -%]
if (!([% validationRule %]))
{
errorStream.add((char *)"Data validation failure at IE : [% tempdata.className %]\n");
return false;
}[% END -%]
[% FOREACH Item IN tempdata.sequence -%]
[% IF Item -%]
[% IF Item.skipType == "y" -%]
buffer.skip[% Item.bitByte %]([% Item.skipValue %]);
[% ELSE -%]
[% IF Item.presence == "optional" -%]
if (data.[% Item.fieldName %]Present)
{
[% IF Item.encodeConditional == "y" -%]
if ([% Item.encodeCondition %])
{
[% IF Item.leafType == "y" -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
[% IF Item.bitField == "y" -%]
if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% ELSE -%]
if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
[% ELSE -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
}
}
[% ELSE -%]
[% IF Item.leafType == "y" -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
[% IF Item.bitField == "y" -%]
if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% ELSE -%]
if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
[% ELSE -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
}
[% END -%]
[% ELSE -%]
[% IF Item.encodeConditional == "y" -%]
if ([% Item.encodeCondition %])
{
[% IF Item.leafType == "y" -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
[% IF Item.bitField == "y" -%]
if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% ELSE -%]
if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
[% ELSE -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
}
[% ELSE -%]
[% IF Item.leafType == "y" -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
[% IF Item.bitField == "y" -%]
if(!(buffer.writeBits(data.[% Item.fieldName %], [% Item.fieldSize %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% ELSE -%]
if (!(buffer.write[% Item.fieldType %](data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
[% ELSE -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure: [% Item.fieldName %]\n");
return false;
}
[% END -%]
if (!(DataTypeCodecUtils::encode[% Item.fieldType %](buffer, data.[% Item.fieldName %])))
{
errorStream.add((char *)"Encoding of [% Item.fieldName %] failed\n");
return false;
}
[% END -%]
[% END -%]
[% END -%]
[% END -%]
[% END -%]
[% END %]
return true;
}
bool [% tempdata.className %]::decode[% tempdata.className %](MsgBuffer &buffer, [% tempdata.className %]Data &data, Uint16 length)
{
[%- flag = 0 -%]
// TODO optimize the length checks
Uint16 ieBoundary = buffer.getCurrentIndex() + length;
[% FOREACH Item IN tempdata.sequence -%]
[% IF Item.length == "lengthLeft" -%][%- IF flag == 0 %]
Uint16 lengthLeft = length;
[%- flag = 1 %]
[% END -%][% END -%]
[% IF Item.skipType == "y" -%]
buffer.skip[% Item.bitByte %]([% Item.skipValue %]);
if (buffer.getCurrentIndex() > ieBoundary)
{
errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
return false;
}
[% ELSE -%]
[% IF Item.decodeConditional == "y" %]
if ([% Item.decodeCondition %])
{
[% IF Item.leafType == "y" -%]
[% IF Item.bitField == "y" -%]
data.[% Item.fieldName %] = buffer.readBits([% Item.fieldSize %]);
// confirm that we are not reading beyond the IE boundary
if (buffer.getCurrentIndex() > ieBoundary)
{
errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
return false;
}
[% ELSE %]
buffer.read[% Item.fieldType %](data.[% Item.fieldName %]);
if (buffer.getCurrentIndex() > ieBoundary)
{
errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
return false;
}
[% END -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
return false; //TODO need to add validations
}
[% END -%]
[% ELSE -%]
[% IF Item.length == "lengthLeft" -%]
lengthLeft = ieBoundary - buffer.getCurrentIndex();
[% END -%]
[% IF Item.arrayType == "y" -%]
if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %], [% Item.count %])))
[% ELSE -%]
if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %])))
[% END -%]
{
errorStream.add((char *)"Failed to decode: [% Item.fieldName %]\n");
return false;
}
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
return false; //TODO need to add validations
}
[% END -%]
[% END -%]
[% IF Item.presence == "optional" -%]
data.[% Item.fieldName %]Present = true;
[% END -%]
}
[% ELSE -%]
[% IF Item.leafType == "y" -%]
[% IF Item.bitField == "y" -%]
data.[% Item.fieldName %] = buffer.readBits([% Item.fieldSize %]);
// confirm that we are not reading beyond the IE boundary
if (buffer.getCurrentIndex() > ieBoundary)
{
errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
return false;
}
[% ELSE %]
buffer.read[% Item.fieldType %](data.[% Item.fieldName %]);
if (buffer.getCurrentIndex() > ieBoundary)
{
errorStream.add((char *)"Attempt to read beyond IE boundary: [% Item.fieldName %]\n");
return false;
}
[% END -%]
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
return false; //TODO need to add validations
}
[% END -%]
[% ELSE -%]
[% IF Item.length == "lengthLeft" -%]
lengthLeft = ieBoundary - buffer.getCurrentIndex();
[% END -%]
[% IF Item.arrayType == "y" -%]
if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %], [% Item.count %])))
[% ELSE -%]
if (!(DataTypeCodecUtils::decode[% Item.fieldType %](buffer, data.[% Item.fieldName %], [% Item.length %])))
[% END -%]
{
errorStream.add((char *)"Failed to decode: [% Item.fieldName %]\n");
return false;
}
[% IF Item.validationPresent == "y" -%]
if (!([% Item.validationRule %]))
{
errorStream.add((char *)"Data validation failure : [% Item.fieldName %]\n");
return false; //TODO need to add validations
}
[% END -%]
[% END -%]
[% IF Item.presence == "optional" -%]
data.[% Item.fieldName %]Present = true;
[% END -%]
[% END -%]
[% END -%]
[% END -%]
[% IF validationPresent == "y" -%]
if (!([% validationRule %]))
{
errorStream.add((char *)"Data validation failure at IE: [% tempdata.className %]\n");
return false;
}
[% END -%]
// The IE is decoded now. The buffer index should be pointing to the
// IE Boundary. If not, we have some more data left for the IE which we don't know
// how to decode
if (ieBoundary == buffer.getCurrentIndex())
{
return true;
}
else
{
errorStream.add((char *)"Unable to decode IE [% tempdata.className %]\n");
return false;
}
}
void [% tempdata.className %]::display[% tempdata.className %]_v([% tempdata.className %]Data const &data, Debug &stream)
{
stream.incrIndent();
stream.add((char *)"[% tempdata.className %]Data:");
stream.incrIndent();
stream.endOfLine();
[% FOREACH Item IN tempdata.sequence -%]
[% IF Item.skipType != "y" -%]
[% IF Item.presence == "optional" -%]
if (data.[% Item.fieldName %]Present)
{
[% IF Item.encodeConditional == "y" -%]
if ([% Item.encodeCondition %])
{
[% IF Item.leafType == "y" -%]
[% IF Item.bitField == "y" -%]
stream.add((char *) "[% Item.fieldName %]: ");
stream.add((Uint8)data.[% Item.fieldName %]);
stream.endOfLine();
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]: ");
stream.add(data.[% Item.fieldName %]);
stream.endOfLine();
[% END -%]
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]:");
stream.endOfLine();
DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
[% END -%]
}
}
[% ELSE -%]
[% IF Item.leafType == "y" -%]
[% IF Item.bitField == "y" -%]
stream.add((char *) "[% Item.fieldName %]: ");
stream.add((Uint8)data.[% Item.fieldName %]);
stream.endOfLine();
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]: ");
stream.add(data.[% Item.fieldName %]);
stream.endOfLine();
[% END -%]
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]:");
stream.endOfLine();
DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
[% END -%]
}
[% END -%]
[% ELSE -%]
[% IF Item.encodeConditional == "y" -%]
if ([% Item.encodeCondition %])
{
[% IF Item.leafType == "y" -%]
[% IF Item.bitField == "y" -%]
stream.add( (char *)"[% Item.fieldName %]: ");
stream.add((Uint8)data.[% Item.fieldName %]);
stream.endOfLine();
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]: ");
stream.add(data.[% Item.fieldName %]);
stream.endOfLine();
[% END -%]
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]:");
stream.endOfLine();
DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
[% END -%]
}
[% ELSE -%]
[% IF Item.leafType == "y" -%]
[% IF Item.bitField == "y" -%]
stream.add( (char *)"[% Item.fieldName %]: ");
stream.add((Uint8)data.[% Item.fieldName %]);
stream.endOfLine();
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]: ");
stream.add(data.[% Item.fieldName %]);
stream.endOfLine();
[% END -%]
[% ELSE -%]
stream.add((char *)"[% Item.fieldName %]:");
stream.endOfLine();
DataTypeCodecUtils::display[% Item.fieldType %]_v(data.[% Item.fieldName %], stream);
[% END -%]
[% END -%]
[% END -%]
[% END -%]
[% END -%]
stream.decrIndent();
stream.decrIndent();
}