55 size_t m_MaxPacketLen;
57 bool m_CanReallocateData;
142 destructPacketData();
229 return insertLayer(m_LastLayer, newLayer, ownInPacket);
318 template <
class TLayer> TLayer*
getLayerOfType(
bool reverseOrder =
false)
const;
357 std::string
toString(
bool timeAsLocalTime =
true)
const;
363 void toStringList(std::vector<std::string>& result,
bool timeAsLocalTime =
true)
const;
366 void copyDataFrom(
const Packet& other);
368 void destructPacketData();
369 void destroyAllLayers();
371 bool extendLayer(
Layer* layer,
int offsetInLayer,
size_t numOfBytesToExtend);
372 bool shortenLayer(
Layer* layer,
int offsetInLayer,
size_t numOfBytesToShorten);
374 void reallocateRawData(
size_t newSize);
378 std::string printPacketInfo(
bool timeAsLocalTime)
const;
382 template <
typename TLayer,
typename NextLayerFn>
383 static TLayer* searchLayerStackForType(
Layer* startLayer, NextLayerFn nextLayerFn,
bool skipFirst);
392 return searchLayerStackForType<TLayer>(
397 return searchLayerStackForType<TLayer>(m_LastLayer, [](
Layer* layer) {
return layer->
getPrevLayer(); },
false);
402 return searchLayerStackForType<TLayer>(curLayer, [](
Layer* layer) {
return layer->
getNextLayer(); },
true);
407 return searchLayerStackForType<TLayer>(curLayer, [](
Layer* layer) {
return layer->
getPrevLayer(); },
true);
410 template <
typename TLayer,
typename NextLayerFn>
411 TLayer* Packet::searchLayerStackForType(
Layer* curLayer, NextLayerFn nextLayerFn,
bool skipFirst)
413 if (curLayer ==
nullptr)
418 curLayer = nextLayerFn(curLayer);
421 while (curLayer !=
nullptr)
423 auto* curLayerCasted =
dynamic_cast<TLayer*
>(curLayer);
424 if (curLayerCasted !=
nullptr)
425 return curLayerCasted;
427 curLayer = nextLayerFn(curLayer);
433 inline std::ostream& operator<<(std::ostream& os,
const pcpp::Packet& packet)
Layer * getNextLayer() const
Definition: Layer.h:125
Layer * getPrevLayer() const
Definition: Layer.h:131
bool isPacketOfType(ProtocolType protocolType) const
bool insertLayer(Layer *prevLayer, Layer *newLayer, bool ownInPacket=false)
Packet(const Packet &other)
Definition: Packet.h:148
const RawPacket * getRawPacketReadOnly() const
Definition: Packet.h:200
Packet & operator=(const Packet &other)
bool removeLayer(ProtocolType layerType, int index=0)
Packet(RawPacket *rawPacket, bool freeRawPacket, ProtocolTypeFamily parseUntil, OsiModelLayer parseUntilLayer=OsiModelLayerUnknown)
virtual ~Packet()
Definition: Packet.h:140
Layer * detachLayer(ProtocolType layerType, int index=0)
RawPacket * getRawPacket() const
Definition: Packet.h:163
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:405
Packet(RawPacket *rawPacket, OsiModelLayer parseUntilLayer)
Layer * getLastLayer() const
Definition: Packet.h:214
std::string toString(bool timeAsLocalTime=true) const
TLayer * getNextLayerOfType(Layer *startLayer) const
Definition: Packet.h:400
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:227
bool detachLayer(Layer *layer)
Definition: Packet.h:300
Packet(RawPacket *rawPacket, ProtocolTypeFamily parseUntilFamily)
Layer * getFirstLayer() const
Definition: Packet.h:207
Definition: RawPacket.h:290
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:267
@ OsiModelLayerUnknown
Unknown / null layer.
Definition: ProtocolType.h:283
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