18     template <
typename TRecType, 
typename TRecLen> 
class TLVRecord 
   49             m_Data = other.m_Data;
 
   59             m_Data = 
reinterpret_cast<TLVRawData*
>(recordRawData);
 
   66         static bool canAssign(
const uint8_t* recordRawData, 
size_t tlvDataLen)
 
   68             return recordRawData != 
nullptr &&
 
   78             m_Data = other.m_Data;
 
   88             if (m_Data == rhs.m_Data)
 
   97             return (memcmp(m_Data, rhs.m_Data, 
getTotalSize()) == 0);
 
  111             if (m_Data == 
nullptr)
 
  120             if (m_Data == 
nullptr)
 
  129             return (m_Data == 
nullptr);
 
  135             return (m_Data != 
nullptr);
 
  141             return reinterpret_cast<uint8_t*
>(m_Data);
 
  167             memcpy(&result, m_Data->
recordValue + getValueOffset() + offset, 
sizeof(T));
 
  178         template <
typename T> 
bool setValue(T newValue, 
int valueOffset = 0)
 
  183             memcpy(m_Data->
recordValue + getValueOffset() + valueOffset, &newValue, 
sizeof(T));
 
  194         virtual size_t getValueOffset()
 const 
  206         mutable size_t m_RecordCount;
 
  212             m_RecordCount = 
static_cast<size_t>(-1);
 
  218             m_RecordCount = other.m_RecordCount;
 
  228             m_RecordCount = other.m_RecordCount;
 
  240             TLVRecordType resRec(
nullptr);  
 
  241             if (!TLVRecordType::canAssign(tlvDataBasePtr, tlvDataLen))
 
  244             resRec.assign(tlvDataBasePtr);
 
  246             if (resRec.getRecordBasePtr() + resRec.getTotalSize() > tlvDataBasePtr + tlvDataLen)
 
  247                 resRec.assign(
nullptr);
 
  250             if (!resRec.isNull() && (tlvDataLen == 0 || resRec.getTotalSize() == 0))
 
  251                 resRec.assign(
nullptr);
 
  263         TLVRecordType 
getNextTLVRecord(TLVRecordType& record, 
const uint8_t* tlvDataBasePtr, 
size_t tlvDataLen)
 const 
  265             TLVRecordType resRec(
nullptr);  
 
  270             if (!TLVRecordType::canAssign(record.getRecordBasePtr() + record.getTotalSize(),
 
  271                                           tlvDataBasePtr - record.getRecordBasePtr() + tlvDataLen -
 
  272                                               record.getTotalSize()))
 
  275             resRec.assign(record.getRecordBasePtr() + record.getTotalSize());
 
  277             if (resRec.getTotalSize() == 0)
 
  278                 resRec.assign(
nullptr);
 
  281             if ((resRec.getRecordBasePtr() - tlvDataBasePtr) < 0)
 
  282                 resRec.assign(
nullptr);
 
  285             if (!resRec.isNull() && resRec.getRecordBasePtr() + resRec.getTotalSize() > tlvDataBasePtr + tlvDataLen)
 
  286                 resRec.assign(
nullptr);
 
  297         TLVRecordType 
getTLVRecord(uint32_t recordType, uint8_t* tlvDataBasePtr, 
size_t tlvDataLen)
 const 
  300             while (!curRec.isNull())
 
  302                 if (curRec.getType() == recordType)
 
  310             curRec.assign(
nullptr);
 
  323             if (m_RecordCount != 
static_cast<size_t>(-1))
 
  324                 return m_RecordCount;
 
  328             while (!curRec.isNull())
 
  334             return m_RecordCount;
 
  344             if (m_RecordCount != 
static_cast<size_t>(-1))
 
  345                 m_RecordCount += changedBy;
 
  361         TLVRecordBuilder(uint32_t recType, 
const uint8_t* recValue, uint8_t recValueLen);
 
  371         TLVRecordBuilder(uint32_t recType, 
const std::string& recValue, 
bool valueIsHexString = 
false);
 
  379         void init(uint32_t recType, 
const uint8_t* recValue, 
size_t recValueLen);
 
  382         size_t m_RecValueLen;
 
Definition: IpAddress.h:28
Definition: TLVData.h:357
TLVRecord(uint8_t *recordRawData)
Definition: TLVData.h:39
TLVRecord(const TLVRecord &other)
Definition: TLVData.h:47
virtual size_t getTotalSize() const =0
virtual ~TLVRecord()=default
A d'tor for this class, currently does nothing.
TRecType getType() const
Definition: TLVData.h:109
bool setValue(T newValue, int valueOffset=0)
Definition: TLVData.h:178
bool operator!=(const TLVRecord &rhs) const
Definition: TLVData.h:103
uint8_t * getRecordBasePtr() const
Definition: TLVData.h:139
uint8_t * getValue() const
Definition: TLVData.h:118
bool operator==(const TLVRecord &rhs) const
Definition: TLVData.h:86
static bool canAssign(const uint8_t *recordRawData, size_t tlvDataLen)
Definition: TLVData.h:66
virtual size_t getDataSize() const =0
bool isNotNull() const
Definition: TLVData.h:133
bool isNull() const
Definition: TLVData.h:127
T getValueAs(size_t offset=0) const
Definition: TLVData.h:161
TLVRecord & operator=(const TLVRecord &other)
Definition: TLVData.h:76
void purgeRecordData()
Free the memory of the TLV record raw data.
Definition: TLVData.h:145
void assign(uint8_t *recordRawData)
Definition: TLVData.h:57
Definition: TLVData.h:204
void changeTLVRecordCount(int changedBy)
Definition: TLVData.h:342
TLVRecordReader & operator=(const TLVRecordReader &other)
Definition: TLVData.h:226
virtual ~TLVRecordReader()=default
A d'tor for this class which currently does nothing.
TLVRecordType getTLVRecord(uint32_t recordType, uint8_t *tlvDataBasePtr, size_t tlvDataLen) const
Definition: TLVData.h:297
TLVRecordReader(const TLVRecordReader &other)
A default copy c'tor for this class.
Definition: TLVData.h:216
TLVRecordType getNextTLVRecord(TLVRecordType &record, const uint8_t *tlvDataBasePtr, size_t tlvDataLen) const
Definition: TLVData.h:263
TLVRecordReader()
A default c'tor for this class.
Definition: TLVData.h:210
TLVRecordType getFirstTLVRecord(uint8_t *tlvDataBasePtr, size_t tlvDataLen) const
Definition: TLVData.h:238
size_t getTLVRecordCount(uint8_t *tlvDataBasePtr, size_t tlvDataLen) const
Definition: TLVData.h:321
The main namespace for the PcapPlusPlus lib.
A struct representing the TLV construct.
Definition: TLVData.h:24
uint8_t recordValue[]
Record value (variable size)
Definition: TLVData.h:30
TRecType recordType
Record type.
Definition: TLVData.h:26
TRecLen recordLen
Record length in bytes.
Definition: TLVData.h:28