56 size_t m_MaxPacketLen;
58 bool m_CanReallocateData;
143 destructPacketData();
230 return insertLayer(m_LastLayer, newLayer, ownInPacket);
319 template <
class TLayer> TLayer*
getLayerOfType(
bool reverseOrder =
false)
const;
358 std::string
toString(
bool timeAsLocalTime =
true)
const;
364 void toStringList(std::vector<std::string>& result,
bool timeAsLocalTime =
true)
const;
377 static std::vector<FieldDescriptor>
all()
390 static std::vector<FieldDescriptor>
all()
416 void copyDataFrom(
const Packet& other);
418 void destructPacketData();
419 void destroyAllLayers();
421 bool extendLayer(
Layer* layer,
int offsetInLayer,
size_t numOfBytesToExtend);
422 bool shortenLayer(
Layer* layer,
int offsetInLayer,
size_t numOfBytesToShorten);
424 void reallocateRawData(
size_t newSize);
428 std::string printPacketInfo(
bool timeAsLocalTime)
const;
432 template <
typename TLayer,
typename NextLayerFn>
433 static TLayer* searchLayerStackForType(
Layer* startLayer, NextLayerFn nextLayerFn,
bool skipFirst);
442 return searchLayerStackForType<TLayer>(
447 return searchLayerStackForType<TLayer>(m_LastLayer, [](
Layer* layer) {
return layer->
getPrevLayer(); },
false);
452 return searchLayerStackForType<TLayer>(curLayer, [](
Layer* layer) {
return layer->
getNextLayer(); },
true);
457 return searchLayerStackForType<TLayer>(curLayer, [](
Layer* layer) {
return layer->
getPrevLayer(); },
true);
460 template <
typename TLayer,
typename NextLayerFn>
461 TLayer* Packet::searchLayerStackForType(
Layer* curLayer, NextLayerFn nextLayerFn,
bool skipFirst)
463 if (curLayer ==
nullptr)
468 curLayer = nextLayerFn(curLayer);
471 while (curLayer !=
nullptr)
473 auto* curLayerCasted =
dynamic_cast<TLayer*
>(curLayer);
474 if (curLayerCasted !=
nullptr)
475 return curLayerCasted;
477 curLayer = nextLayerFn(curLayer);
483 inline std::ostream& operator<<(std::ostream& os,
const pcpp::Packet& packet)
Definition: Serializers.h:78
Layer * getNextLayer() const
Definition: Layer.h:126
Layer * getPrevLayer() const
Definition: Layer.h:132
bool isPacketOfType(ProtocolType protocolType) const
bool insertLayer(Layer *prevLayer, Layer *newLayer, bool ownInPacket=false)
Packet(const Packet &other)
Definition: Packet.h:149
const RawPacket * getRawPacketReadOnly() const
Definition: Packet.h:201
void serialize(ISerializer &serializer) const
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:141
Layer * detachLayer(ProtocolType layerType, int index=0)
RawPacket * getRawPacket() const
Definition: Packet.h:164
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:455
Packet(RawPacket *rawPacket, OsiModelLayer parseUntilLayer)
Layer * getLastLayer() const
Definition: Packet.h:215
std::string toString(bool timeAsLocalTime=true) const
TLayer * getNextLayerOfType(Layer *startLayer) const
Definition: Packet.h:450
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:228
bool detachLayer(Layer *layer)
Definition: Packet.h:301
Packet(RawPacket *rawPacket, ProtocolTypeFamily parseUntilFamily)
Layer * getFirstLayer() const
Definition: Packet.h:208
Definition: RawPacket.h:522
uint8_t ProtocolType
Definition: ProtocolType.h:38
uint32_t ProtocolTypeFamily
Definition: ProtocolType.h:42
const ProtocolType UnknownProtocol
Unknown protocol (or unsupported by PcapPlusPlus)
Definition: ProtocolType.h:45
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:415
@ OsiModelLayerUnknown
Unknown / null layer.
Definition: ProtocolType.h:433
LinkLayerType
An enum describing all known link layer type. Taken from: http://www.tcpdump.org/linktypes....
Definition: RawPacket.h:23
@ LINKTYPE_ETHERNET
IEEE 802.3 Ethernet.
Definition: RawPacket.h:27
Definition: Serializers.h:18
Definition: Serializers.h:49
ObjectFieldDescriptor(uint16_t fieldId, std::string fieldName)
Definition: Serializers.h:53
static const FieldDescriptor Sec
Field descriptor for the timestamp seconds.
Definition: Packet.h:383
static const FieldDescriptor NSec
Field descriptor for the timestamp nanoseconds.
Definition: Packet.h:386
static std::vector< FieldDescriptor > all()
Definition: Packet.h:377
static std::vector< FieldDescriptor > all()
Definition: Packet.h:390
static const FieldDescriptor LinkLayerName
Field descriptor for the packet link layer name.
Definition: Packet.h:405
static const FieldDescriptor FrameLength
Field descriptor for the packet frame length.
Definition: Packet.h:399
static const FieldDescriptor Layers
Field descriptor for the packet layers.
Definition: Packet.h:408
static const TimestampObject Timestamp
Field descriptor for the packet timestamp.
Definition: Packet.h:396
static const FieldDescriptor LinkLayer
Field descriptor for the packet link layer type.
Definition: Packet.h:402
Options struct for configuring packet parsing behavior.
Definition: Packet.h:19
ProtocolTypeFamily parseUntilProtocol
Defines the protocol type up to and including which the packet should be parsed (inclusive).
Definition: Packet.h:30
OsiModelLayer parseUntilLayer
Defines an OSI model layer up to and including which the packet should be parsed (inclusive).
Definition: Packet.h:37