PcapPlusPlus  Next
TpktLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "EthLayer.h"
4 #include "Layer.h"
5 
7 
10 namespace pcpp
11 {
14 #pragma pack(push, 1)
15  struct tpkthdr
16  {
18  uint8_t version;
20  uint8_t reserved;
22  uint16_t length;
23  };
24 #pragma pack(pop)
25  static_assert(sizeof(tpkthdr) == 4, "tpkthdr size is not 4 bytes");
26 
29  class TpktLayer : public Layer
30  {
31  public:
37  TpktLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
38  : Layer(data, dataLen, prevLayer, packet, TPKT)
39  {}
40 
44  TpktLayer(uint8_t version, uint16_t length);
45 
46  ~TpktLayer() override = default;
47 
49  uint8_t getReserved() const;
50 
52  uint8_t getVersion() const;
53 
55  uint16_t getLength() const;
56 
59  void setVersion(uint8_t version) const;
60 
63  void setLength(uint16_t length) const;
64 
66  size_t getHeaderLen() const override
67  {
68  return sizeof(tpkthdr);
69  }
70 
72  void computeCalculateFields() override
73  {}
74 
76  void parseNextLayer() override;
77 
82  static bool isTpktPort(uint16_t portSrc, uint16_t portDst)
83  {
84  return portSrc == 102 || portDst == 102;
85  }
86 
91  static bool isDataValid(const uint8_t* data, size_t dataSize)
92  {
93  return data && dataSize >= sizeof(tpkthdr);
94  }
95 
96  std::string toString() const override;
97 
99  {
100  return OsiModelTransportLayer;
101  }
102 
103  private:
108  tpkthdr* getTpktHeader() const
109  {
110  return reinterpret_cast<tpkthdr*>(m_Data);
111  }
112  };
113 
114 } // namespace pcpp
Definition: Layer.h:60
Definition: Packet.h:22
Definition: TpktLayer.h:30
void setVersion(uint8_t version) const
size_t getHeaderLen() const override
Definition: TpktLayer.h:66
std::string toString() const override
uint8_t getVersion() const
TpktLayer(uint8_t version, uint16_t length)
uint16_t getLength() const
static bool isTpktPort(uint16_t portSrc, uint16_t portDst)
Definition: TpktLayer.h:82
uint8_t getReserved() const
void computeCalculateFields() override
Does nothing for this layer.
Definition: TpktLayer.h:72
TpktLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: TpktLayer.h:37
static bool isDataValid(const uint8_t *data, size_t dataSize)
Definition: TpktLayer.h:91
void parseNextLayer() override
Currently parses the rest of the packet as a COTP protocol or generic payload (PayloadLayer)
void setLength(uint16_t length) const
OsiModelLayer getOsiModelLayer() const override
Definition: TpktLayer.h:98
The main namespace for the PcapPlusPlus lib.
const ProtocolType TPKT
TPKT protocol.
Definition: ProtocolType.h:188
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelTransportLayer
Transport layer (layer 4)
Definition: ProtocolType.h:233
Definition: TpktLayer.h:16
uint8_t version
message version
Definition: TpktLayer.h:18
uint8_t reserved
message reserved
Definition: TpktLayer.h:20
uint16_t length
message length
Definition: TpktLayer.h:22