| /* |
| * 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 "uliIe.h" |
| #include "dataTypeCodecUtils.h" |
| |
| UliIe::UliIe() |
| { |
| ieType = 86; |
| // TODO |
| |
| } |
| |
| UliIe::~UliIe() { |
| // TODO Auto-generated destructor stub |
| } |
| |
| bool UliIe::encodeUliIe(MsgBuffer &buffer, UliIeData const &data) |
| { |
| buffer.skipBits(2); |
| |
| if(!(buffer.writeBits(data.laipresent, 1))) |
| { |
| errorStream.add((char *)"Encoding of laipresent failed\n"); |
| return false; |
| } |
| if(!(buffer.writeBits(data.ecgipresent, 1))) |
| { |
| errorStream.add((char *)"Encoding of ecgipresent failed\n"); |
| return false; |
| } |
| if(!(buffer.writeBits(data.taipresent, 1))) |
| { |
| errorStream.add((char *)"Encoding of taipresent failed\n"); |
| return false; |
| } |
| if(!(buffer.writeBits(data.raipresent, 1))) |
| { |
| errorStream.add((char *)"Encoding of raipresent failed\n"); |
| return false; |
| } |
| if(!(buffer.writeBits(data.saipresent, 1))) |
| { |
| errorStream.add((char *)"Encoding of saipresent failed\n"); |
| return false; |
| } |
| if(!(buffer.writeBits(data.cgipresent, 1))) |
| { |
| errorStream.add((char *)"Encoding of cgipresent failed\n"); |
| return false; |
| } |
| if (data.cgipresent) |
| { |
| if (!(DataTypeCodecUtils::encodeCgiField(buffer, data.cgi))) |
| { |
| errorStream.add((char *)"Encoding of cgi failed\n"); |
| return false; |
| } |
| } |
| if (data.saipresent) |
| { |
| if (!(DataTypeCodecUtils::encodeSaiField(buffer, data.sai))) |
| { |
| errorStream.add((char *)"Encoding of sai failed\n"); |
| return false; |
| } |
| } |
| if (data.raipresent) |
| { |
| if (!(DataTypeCodecUtils::encodeRaiField(buffer, data.rai))) |
| { |
| errorStream.add((char *)"Encoding of rai failed\n"); |
| return false; |
| } |
| } |
| if (data.taipresent) |
| { |
| if (!(DataTypeCodecUtils::encodeTaiField(buffer, data.tai))) |
| { |
| errorStream.add((char *)"Encoding of tai failed\n"); |
| return false; |
| } |
| } |
| if (data.ecgipresent) |
| { |
| if (!(DataTypeCodecUtils::encodeEcgiField(buffer, data.ecgi))) |
| { |
| errorStream.add((char *)"Encoding of ecgi failed\n"); |
| return false; |
| } |
| } |
| if (data.laipresent) |
| { |
| if (!(DataTypeCodecUtils::encodeLaiField(buffer, data.lai))) |
| { |
| errorStream.add((char *)"Encoding of lai failed\n"); |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| bool UliIe::decodeUliIe(MsgBuffer &buffer, UliIeData &data, Uint16 length) |
| { |
| // TODO optimize the length checks |
| |
| Uint16 ieBoundary = buffer.getCurrentIndex() + length; |
| buffer.skipBits(2); |
| if (buffer.getCurrentIndex() > ieBoundary) |
| { |
| errorStream.add((char *)"Attempt to read beyond IE boundary: \n"); |
| return false; |
| } |
| |
| data.laipresent = buffer.readBits(1); |
| // confirm that we are not reading beyond the IE boundary |
| if (buffer.getCurrentIndex() > ieBoundary) |
| { |
| errorStream.add((char *)"Attempt to read beyond IE boundary: laipresent\n"); |
| return false; |
| } |
| data.ecgipresent = buffer.readBits(1); |
| // confirm that we are not reading beyond the IE boundary |
| if (buffer.getCurrentIndex() > ieBoundary) |
| { |
| errorStream.add((char *)"Attempt to read beyond IE boundary: ecgipresent\n"); |
| return false; |
| } |
| data.taipresent = buffer.readBits(1); |
| // confirm that we are not reading beyond the IE boundary |
| if (buffer.getCurrentIndex() > ieBoundary) |
| { |
| errorStream.add((char *)"Attempt to read beyond IE boundary: taipresent\n"); |
| return false; |
| } |
| data.raipresent = buffer.readBits(1); |
| // confirm that we are not reading beyond the IE boundary |
| if (buffer.getCurrentIndex() > ieBoundary) |
| { |
| errorStream.add((char *)"Attempt to read beyond IE boundary: raipresent\n"); |
| return false; |
| } |
| data.saipresent = buffer.readBits(1); |
| // confirm that we are not reading beyond the IE boundary |
| if (buffer.getCurrentIndex() > ieBoundary) |
| { |
| errorStream.add((char *)"Attempt to read beyond IE boundary: saipresent\n"); |
| return false; |
| } |
| data.cgipresent = buffer.readBits(1); |
| // confirm that we are not reading beyond the IE boundary |
| if (buffer.getCurrentIndex() > ieBoundary) |
| { |
| errorStream.add((char *)"Attempt to read beyond IE boundary: cgipresent\n"); |
| return false; |
| } |
| |
| Uint16 lengthLeft = length; |
| |
| if (data.cgipresent) |
| { |
| lengthLeft = ieBoundary - buffer.getCurrentIndex(); |
| if (!(DataTypeCodecUtils::decodeCgiField(buffer, data.cgi, lengthLeft))) |
| { |
| errorStream.add((char *)"Failed to decode: cgi\n"); |
| return false; |
| } |
| } |
| |
| if (data.saipresent) |
| { |
| lengthLeft = ieBoundary - buffer.getCurrentIndex(); |
| if (!(DataTypeCodecUtils::decodeSaiField(buffer, data.sai, lengthLeft))) |
| { |
| errorStream.add((char *)"Failed to decode: sai\n"); |
| return false; |
| } |
| } |
| |
| if (data.raipresent) |
| { |
| lengthLeft = ieBoundary - buffer.getCurrentIndex(); |
| if (!(DataTypeCodecUtils::decodeRaiField(buffer, data.rai, lengthLeft))) |
| { |
| errorStream.add((char *)"Failed to decode: rai\n"); |
| return false; |
| } |
| } |
| |
| if (data.taipresent) |
| { |
| lengthLeft = ieBoundary - buffer.getCurrentIndex(); |
| if (!(DataTypeCodecUtils::decodeTaiField(buffer, data.tai, lengthLeft))) |
| { |
| errorStream.add((char *)"Failed to decode: tai\n"); |
| return false; |
| } |
| } |
| |
| if (data.ecgipresent) |
| { |
| lengthLeft = ieBoundary - buffer.getCurrentIndex(); |
| if (!(DataTypeCodecUtils::decodeEcgiField(buffer, data.ecgi, lengthLeft))) |
| { |
| errorStream.add((char *)"Failed to decode: ecgi\n"); |
| return false; |
| } |
| } |
| |
| if (data.laipresent) |
| { |
| lengthLeft = ieBoundary - buffer.getCurrentIndex(); |
| if (!(DataTypeCodecUtils::decodeLaiField(buffer, data.lai, lengthLeft))) |
| { |
| errorStream.add((char *)"Failed to decode: lai\n"); |
| return false; |
| } |
| } |
| |
| // 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 UliIe\n"); |
| return false; |
| } |
| } |
| void UliIe::displayUliIe_v(UliIeData const &data, Debug &stream) |
| { |
| stream.incrIndent(); |
| stream.add((char *)"UliIeData:"); |
| stream.incrIndent(); |
| stream.endOfLine(); |
| |
| stream.add( (char *)"laipresent: "); |
| stream.add((Uint8)data.laipresent); |
| stream.endOfLine(); |
| |
| stream.add( (char *)"ecgipresent: "); |
| stream.add((Uint8)data.ecgipresent); |
| stream.endOfLine(); |
| |
| stream.add( (char *)"taipresent: "); |
| stream.add((Uint8)data.taipresent); |
| stream.endOfLine(); |
| |
| stream.add( (char *)"raipresent: "); |
| stream.add((Uint8)data.raipresent); |
| stream.endOfLine(); |
| |
| stream.add( (char *)"saipresent: "); |
| stream.add((Uint8)data.saipresent); |
| stream.endOfLine(); |
| |
| stream.add( (char *)"cgipresent: "); |
| stream.add((Uint8)data.cgipresent); |
| stream.endOfLine(); |
| |
| if (data.cgipresent) |
| { |
| stream.add((char *)"cgi:"); |
| stream.endOfLine(); |
| DataTypeCodecUtils::displayCgiField_v(data.cgi, stream); |
| } |
| |
| if (data.saipresent) |
| { |
| stream.add((char *)"sai:"); |
| stream.endOfLine(); |
| DataTypeCodecUtils::displaySaiField_v(data.sai, stream); |
| } |
| |
| if (data.raipresent) |
| { |
| stream.add((char *)"rai:"); |
| stream.endOfLine(); |
| DataTypeCodecUtils::displayRaiField_v(data.rai, stream); |
| } |
| |
| if (data.taipresent) |
| { |
| stream.add((char *)"tai:"); |
| stream.endOfLine(); |
| DataTypeCodecUtils::displayTaiField_v(data.tai, stream); |
| } |
| |
| if (data.ecgipresent) |
| { |
| stream.add((char *)"ecgi:"); |
| stream.endOfLine(); |
| DataTypeCodecUtils::displayEcgiField_v(data.ecgi, stream); |
| } |
| |
| if (data.laipresent) |
| { |
| stream.add((char *)"lai:"); |
| stream.endOfLine(); |
| DataTypeCodecUtils::displayLaiField_v(data.lai, stream); |
| } |
| stream.decrIndent(); |
| stream.decrIndent(); |
| } |