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