55 size_t m_MaxPacketLen;
57 bool m_CanReallocateData;
138 destructPacketData();
225 return insertLayer(m_LastLayer, newLayer, ownInPacket);
314 template <
class TLayer> TLayer*
getLayerOfType(
bool reverseOrder =
false)
const;
353 std::string
toString(
bool timeAsLocalTime =
true)
const;
359 void toStringList(std::vector<std::string>& result,
bool timeAsLocalTime =
true)
const;
362 void copyDataFrom(
const Packet& other);
364 void destructPacketData();
365 void destroyAllLayers();
367 bool extendLayer(
Layer* layer,
int offsetInLayer,
size_t numOfBytesToExtend);
368 bool shortenLayer(
Layer* layer,
int offsetInLayer,
size_t numOfBytesToShorten);
370 void reallocateRawData(
size_t newSize);
374 std::string printPacketInfo(
bool timeAsLocalTime)
const;
378 template <
typename TLayer,
typename NextLayerFn>
379 static TLayer* searchLayerStackForType(
Layer* startLayer, NextLayerFn nextLayerFn,
bool skipFirst);
388 return searchLayerStackForType<TLayer>(
393 return searchLayerStackForType<TLayer>(m_LastLayer, [](
Layer* layer) {
return layer->
getPrevLayer(); },
false);
398 return searchLayerStackForType<TLayer>(curLayer, [](
Layer* layer) {
return layer->
getNextLayer(); },
true);
403 return searchLayerStackForType<TLayer>(curLayer, [](
Layer* layer) {
return layer->
getPrevLayer(); },
true);
406 template <
typename TLayer,
typename NextLayerFn>
407 TLayer* Packet::searchLayerStackForType(
Layer* curLayer, NextLayerFn nextLayerFn,
bool skipFirst)
409 if (curLayer ==
nullptr)
414 curLayer = nextLayerFn(curLayer);
417 while (curLayer !=
nullptr)
419 auto* curLayerCasted =
dynamic_cast<TLayer*
>(curLayer);
420 if (curLayerCasted !=
nullptr)
421 return curLayerCasted;
423 curLayer = nextLayerFn(curLayer);
429 inline std::ostream& operator<<(std::ostream& os,
const pcpp::Packet& packet)
Layer * getNextLayer() const
Definition: Layer.h:124
Layer * getPrevLayer() const
Definition: Layer.h:130
bool isPacketOfType(ProtocolType protocolType) const
bool insertLayer(Layer *prevLayer, Layer *newLayer, bool ownInPacket=false)
Packet(const Packet &other)
Definition: Packet.h:144
const RawPacket * getRawPacketReadOnly() const
Definition: Packet.h:196
Packet & operator=(const Packet &other)
bool removeLayer(ProtocolType layerType, int index=0)
virtual ~Packet()
Definition: Packet.h:136
Layer * detachLayer(ProtocolType layerType, int index=0)
RawPacket * getRawPacket() const
Definition: Packet.h:159
bool isPacketOfType(ProtocolTypeFamily protocolTypeFamily) const
Packet(uint8_t *buffer, size_t bufferSize, LinkLayerType linkType=LINKTYPE_ETHERNET)
bool removeAllLayersAfter(Layer *layer)
void setRawPacket(RawPacket *rawPacket, bool freeRawPacket, ProtocolTypeFamily parseUntil=UnknownProtocol, OsiModelLayer parseUntilLayer=OsiModelLayerUnknown)
Layer * getLayerOfType(ProtocolType layerType, int index=0) const
TLayer * getPrevLayerOfType(Layer *startLayer) const
Definition: Packet.h:401
Packet(RawPacket *rawPacket, OsiModelLayer parseUntilLayer)
Layer * getLastLayer() const
Definition: Packet.h:210
std::string toString(bool timeAsLocalTime=true) const
TLayer * getNextLayerOfType(Layer *startLayer) const
Definition: Packet.h:396
Packet(RawPacket *rawPacket, ProtocolType parseUntil)
void parsePacket(PacketParseOptions options, bool incrementalParsing=true)
Parse the packet according to the provided options.
Packet(RawPacket *rawPacket, bool freeRawPacket=false, ProtocolType parseUntil=UnknownProtocol, OsiModelLayer parseUntilLayer=OsiModelLayerUnknown)
void computeCalculateFields()
void toStringList(std::vector< std::string > &result, bool timeAsLocalTime=true) const
Packet(size_t maxPacketLen=1, LinkLayerType linkType=LINKTYPE_ETHERNET)
bool addLayer(Layer *newLayer, bool ownInPacket=false)
Definition: Packet.h:223
bool detachLayer(Layer *layer)
Definition: Packet.h:296
Packet(RawPacket *rawPacket, ProtocolTypeFamily parseUntilFamily)
Layer * getFirstLayer() const
Definition: Packet.h:203
Definition: RawPacket.h:261
uint8_t ProtocolType
Definition: ProtocolType.h:35
uint32_t ProtocolTypeFamily
Definition: ProtocolType.h:39
const ProtocolType UnknownProtocol
Unknown protocol (or unsupported by PcapPlusPlus)
Definition: ProtocolType.h:42
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:261
@ OsiModelLayerUnknown
Unknown / null layer.
Definition: ProtocolType.h:277
LinkLayerType
An enum describing all known link layer type. Taken from: http://www.tcpdump.org/linktypes....
Definition: RawPacket.h:22
@ LINKTYPE_ETHERNET
IEEE 802.3 Ethernet.
Definition: RawPacket.h:26
Options struct for configuring packet parsing behavior.
Definition: Packet.h:18
ProtocolTypeFamily parseUntilProtocol
Defines the protocol type up to and including which the packet should be parsed (inclusive).
Definition: Packet.h:29
OsiModelLayer parseUntilLayer
Defines an OSI model layer up to and including which the packet should be parsed (inclusive).
Definition: Packet.h:36