PcapPlusPlus  Next
UdpLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Layer.h"
4 #include <algorithm>
5 #include <iterator>
6 
8 
11 namespace pcpp
12 {
15 #pragma pack(push, 1)
16  struct udphdr
17  {
19  uint16_t portSrc;
21  uint16_t portDst;
23  uint16_t length;
25  uint16_t headerChecksum;
26  };
27 #pragma pack(pop)
28  static_assert(sizeof(udphdr) == 8, "udphdr size is not 8 bytes");
29 
32  class UdpLayer : public Layer
33  {
34  public:
40  UdpLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
41  : Layer(data, dataLen, prevLayer, packet, UDP)
42  {}
43 
47  UdpLayer(uint16_t portSrc, uint16_t portDst);
48 
53  {
54  return reinterpret_cast<udphdr*>(m_Data);
55  }
56 
58  uint16_t getSrcPort() const;
59 
61  uint16_t getDstPort() const;
62 
67  uint16_t calculateChecksum(bool writeResultToPacket);
68 
73  static inline bool isDataValid(const uint8_t* data, size_t dataLen);
74 
75  // implement abstract methods
76 
79  void parseNextLayer() override;
80 
82  size_t getHeaderLen() const override
83  {
84  return sizeof(udphdr);
85  }
86 
88  void computeCalculateFields() override;
89 
90  std::string toString() const override;
91 
93  {
95  }
96 
101  {
103  static std::vector<FieldDescriptor> all()
104  {
105  auto result = Layer::SerializedFields::all();
106  std::initializer_list<FieldDescriptor> extra{ SrcPort, DstPort, Checksum };
107  std::copy(extra.begin(), extra.end(), std::back_inserter(result));
108  return result;
109  }
110 
112  static const FieldDescriptor SrcPort;
113 
115  static const FieldDescriptor DstPort;
116 
118  static const FieldDescriptor Checksum;
119  };
120 
121  protected:
122  void serializeLayer(ObjectScope& serializer) const override;
123  };
124 
125  bool UdpLayer::isDataValid(const uint8_t* data, size_t dataLen)
126  {
127  return data && dataLen >= sizeof(udphdr);
128  }
129 } // namespace pcpp
Definition: Layer.h:117
Definition: Serializers.h:230
Definition: Packet.h:49
Definition: UdpLayer.h:33
udphdr * getUdpHeader() const
Definition: UdpLayer.h:52
OsiModelLayer getOsiModelLayer() const override
Definition: UdpLayer.h:92
uint16_t getDstPort() const
void serializeLayer(ObjectScope &serializer) const override
void computeCalculateFields() override
Calculate udphdr::headerChecksum field.
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: UdpLayer.h:125
uint16_t getSrcPort() const
size_t getHeaderLen() const override
Definition: UdpLayer.h:82
void parseNextLayer() override
uint16_t calculateChecksum(bool writeResultToPacket)
UdpLayer(uint16_t portSrc, uint16_t portDst)
UdpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: UdpLayer.h:40
std::string toString() const override
const ProtocolType UDP
UDP protocol.
Definition: ProtocolType.h:63
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:420
@ OsiModelTransportLayer
Transport layer (layer 4)
Definition: ProtocolType.h:428
Definition: Serializers.h:18
Definition: Layer.h:212
static std::vector< FieldDescriptor > all()
Definition: Layer.h:214
Definition: UdpLayer.h:101
static const FieldDescriptor DstPort
Destination port, in host byte order.
Definition: UdpLayer.h:115
static const FieldDescriptor SrcPort
Source port, in host byte order.
Definition: UdpLayer.h:112
static std::vector< FieldDescriptor > all()
Definition: UdpLayer.h:103
static const FieldDescriptor Checksum
Checksum, as a hex string.
Definition: UdpLayer.h:118
Definition: UdpLayer.h:17
uint16_t length
Length of header and payload in bytes.
Definition: UdpLayer.h:23
uint16_t portSrc
Source port.
Definition: UdpLayer.h:19
uint16_t portDst
Destination port.
Definition: UdpLayer.h:21
uint16_t headerChecksum
Error-checking of the header and data.
Definition: UdpLayer.h:25