8 #define PCPP_DEPRECATED_TCP_OPTION_TYPE \
9 PCPP_DEPRECATED("enum TcpOptionType is deprecated; Use enum class TcpOptionEnumType instead")
30 #if (BYTE_ORDER == LITTLE_ENDIAN)
31 uint16_t reserved : 4;
50 #elif (BYTE_ORDER == BIG_ENDIAN)
54 uint16_t reserved : 4;
72 # error "Endian is not LE nor BE..."
83 static_assert(
sizeof(
tcphdr) == 20,
"tcphdr size is not 20 bytes");
198 #define PCPP_TCPOLEN_NOP 1
200 #define PCPP_TCPOLEN_EOL 1
202 #define PCPP_TCPOLEN_MSS 4
204 #define PCPP_TCPOLEN_WINDOW 3
206 #define PCPP_TCPOLEN_SACK_PERM 2
208 #define PCPP_TCPOLEN_SACK_MIN 2
210 #define PCPP_TCPOLEN_ECHO 6
212 #define PCPP_TCPOLEN_ECHOREPLY 6
214 #define PCPP_TCPOLEN_TIMESTAMP 10
216 #define PCPP_TCPOLEN_CC 6
218 #define PCPP_TCPOLEN_CCNEW 6
220 #define PCPP_TCPOLEN_CCECHO 6
222 #define PCPP_TCPOLEN_MD5 18
224 #define PCPP_TCPOLEN_MPTCP_MIN 8
226 #define PCPP_TCPOLEN_SCPS 4
228 #define PCPP_TCPOLEN_SNACK 6
230 #define PCPP_TCPOLEN_RECBOUND 2
232 #define PCPP_TCPOLEN_CORREXP 2
234 #define PCPP_TCPOLEN_QS 8
236 #define PCPP_TCPOLEN_USER_TO 4
238 #define PCPP_TCPOLEN_RVBD_PROBE_MIN 3
240 #define PCPP_TCPOLEN_RVBD_TRPY_MIN 16
242 #define PCPP_TCPOLEN_EXP_MIN 2
259 PCPP_DEPRECATED(
"Use getTcpOptionEnumType instead")
276 static bool canAssign(
const uint8_t* recordRawData,
size_t tlvDataLen)
278 const auto* data =
reinterpret_cast<const TLVRawData*
>(recordRawData);
282 if (tlvDataLen <
sizeof(TLVRawData::recordType))
296 if (m_Data ==
nullptr)
301 return sizeof(uint8_t);
303 return static_cast<size_t>(m_Data->recordLen);
308 if (m_Data ==
nullptr)
315 return static_cast<size_t>(m_Data->recordLen) - (2 *
sizeof(uint8_t));
321 if (optionRawData ==
nullptr)
324 return static_cast<TcpOptionType>(optionRawData->recordType);
329 if (optionRawData ==
nullptr)
362 PCPP_DEPRECATED_TCP_OPTION_TYPE
364 :
TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue, optionValueLen)
374 :
TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue, optionValueLen)
378 PCPP_DEPRECATED_TCP_OPTION_TYPE
380 : TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue)
388 : TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue)
392 PCPP_DEPRECATED_TCP_OPTION_TYPE
394 : TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue)
402 : TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue)
406 PCPP_DEPRECATED_TCP_OPTION_TYPE
408 : TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue)
416 : TLVRecordBuilder(static_cast<uint8_t>(optionType), optionValue)
420 PCPP_DEPRECATED(
"enum NopEolOptionTypes is deprecated; Use enum class NopEolOptionEnumType instead")
468 return reinterpret_cast<tcphdr*
>(m_Data);
478 PCPP_DEPRECATED_TCP_OPTION_TYPE
527 PCPP_DEPRECATED_TCP_OPTION_TYPE
539 bool removeAllTcpOptions();
545 uint16_t calculateChecksum(
bool writeResultToPacket);
551 static inline
bool isDataValid(const uint8_t* data,
size_t dataLen);
557 void parseNextLayer() override;
560 size_t getHeaderLen()
const override
562 return getTcpHeader()->dataOffset * 4;
577 int m_NumOfTrailingBytes;
580 uint8_t* getOptionsBasePtr()
const
582 return m_Data +
sizeof(
tcphdr);
584 TcpOption addTcpOptionAt(
const TcpOptionBuilder& optionBuilder,
int offset);
585 void adjustTcpOptionTrailer(
size_t totalOptSize);
586 void copyLayerData(
const TcpLayer& other);
593 const tcphdr* hdr =
reinterpret_cast<const tcphdr*
>(data);
595 && dataLen >= hdr->
dataOffset *
sizeof(uint32_t);
599 #undef PCPP_DEPRECATED_TCP_OPTION_TYPE
Definition: TLVData.h:357
static bool canAssign(const uint8_t *recordRawData, size_t tlvDataLen)
Definition: TLVData.h:66
Definition: TLVData.h:204
Definition: TcpLayer.h:437
tcphdr * getTcpHeader() const
Definition: TcpLayer.h:466
OsiModelLayer getOsiModelLayer() const override
Definition: TcpLayer.h:570
uint16_t getSrcPort() const
TcpOption getTcpOption(TcpOptionEnumType option) const
TcpLayer()
A constructor that allocates a new TCP header with zero TCP options.
TcpOption getFirstTcpOption() const
TcpLayer(const TcpLayer &other)
A copy constructor that copy the entire header from the other TcpLayer (including TCP options)
TcpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
uint16_t getDstPort() const
TcpLayer & operator=(const TcpLayer &other)
TcpOption addTcpOption(const TcpOptionBuilder &optionBuilder)
void computeCalculateFields() override
Calculate tcphdr::headerChecksum field.
TcpLayer(uint16_t portSrc, uint16_t portDst)
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: TcpLayer.h:591
size_t getTcpOptionCount() const
std::string toString() const override
TcpOption getNextTcpOption(TcpOption &tcpOption) const
Definition: TcpLayer.h:340
PCPP_DEPRECATED("enum TcpOptionType is deprecated; Use enum class TcpOptionEnumType instead") TcpOptionBuilder(TcpOptionType optionType
NopEolOptionEnumType
An enum to describe NOP and EOL TCP options. Used in one of this class's c'tors.
Definition: TcpLayer.h:354
TcpOptionBuilder(NopEolOptionEnumType optionType)
NopEolOptionTypes
An enum to describe NOP and EOL TCP options. Used in one of this class's c'tors.
Definition: TcpLayer.h:345
@ EOL
EOL TCP option.
Definition: TcpLayer.h:349
@ NOP
NOP TCP option.
Definition: TcpLayer.h:347
Definition: TcpLayer.h:248
TcpOptionEnumType getTcpOptionEnumType() const
Definition: TcpLayer.h:267
TcpOptionType getTcpOptionType() const
Definition: TcpLayer.h:260
size_t getTotalSize() const override
Definition: TcpLayer.h:294
size_t getDataSize() const override
Definition: TcpLayer.h:306
~TcpOption() override=default
A d'tor for this class, currently does nothing.
static bool canAssign(const uint8_t *recordRawData, size_t tlvDataLen)
Definition: TcpLayer.h:276
TcpOption(uint8_t *optionRawData)
Definition: TcpLayer.h:252
The main namespace for the PcapPlusPlus lib.
TcpOptionEnumType
TCP options types.
Definition: TcpLayer.h:142
@ RvbdTrpy
Riverbed transparency option, non IANA registered option number.
@ RvbdProbe
Riverbed probe option, non IANA registered option number.
@ CorrExp
SCPS Corruption Experienced.
@ Mss
Segment size negotiating.
@ ExpFd
RFC3692-style Experiment 1 (also improperly used for shipping products)
@ Md5
MD5 Signature Option.
@ CcEcho
CC.ECHO(obsolete)
@ Timestamp
TCP Timestamps.
@ SackPerm
SACK Permitted.
@ Echo
Echo (obsoleted by option TcpOptionEnumType::Timestamp)
@ ExpFe
RFC3692-style Experiment 2 (also improperly used for shipping products)
@ UserTo
User Timeout Option (also, other known unauthorized use)
@ EchoReply
Echo Reply (obsoleted by option TcpOptionEnumType::Timestamp)
@ Qs
Quick-Start Response.
@ RecBound
SCPS Record Boundary.
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelTransportLayer
Transport layer (layer 4)
Definition: ProtocolType.h:233
TcpOptionType
TCP options types.
Definition: TcpLayer.h:87
@ TCPOPT_EXP_FD
RFC3692-style Experiment 1 (also improperly used for shipping products)
Definition: TcpLayer.h:129
@ TCPOPT_USER_TO
User Timeout Option (also, other known unauthorized use)
Definition: TcpLayer.h:127
@ TCPOPT_SCPS
SCPS Capabilities.
Definition: TcpLayer.h:117
@ TCPOPT_MSS
Segment size negotiating.
Definition: TcpLayer.h:93
@ PCPP_TCPOPT_NOP
Padding.
Definition: TcpLayer.h:89
@ TCPOPT_QS
Quick-Start Response.
Definition: TcpLayer.h:125
@ PCPP_TCPOPT_WINDOW
Window scaling.
Definition: TcpLayer.h:95
@ TCPOPT_CCNEW
CC.NEW (obsolete)
Definition: TcpLayer.h:109
@ TCPOPT_RVBD_TRPY
Riverbed transparency option, non IANA registered option number.
Definition: TcpLayer.h:135
@ PCPP_TCPOPT_EOL
End of options.
Definition: TcpLayer.h:91
@ TCPOPT_Unknown
Unknown option.
Definition: TcpLayer.h:137
@ TCPOPT_MPTCP
Multipath TCP.
Definition: TcpLayer.h:115
@ TCPOPT_EXP_FE
RFC3692-style Experiment 2 (also improperly used for shipping products)
Definition: TcpLayer.h:131
@ TCPOPT_CC
CC (obsolete)
Definition: TcpLayer.h:107
@ TCPOPT_ECHOREPLY
Echo Reply (obsoleted by option TcpOptionType::PCPP_TCPOPT_TIMESTAMP)
Definition: TcpLayer.h:103
@ TCPOPT_RVBD_PROBE
Riverbed probe option, non IANA registered option number.
Definition: TcpLayer.h:133
@ TCPOPT_MD5
MD5 Signature Option.
Definition: TcpLayer.h:113
@ TCPOPT_SNACK
SCPS SNACK.
Definition: TcpLayer.h:119
@ PCPP_TCPOPT_TIMESTAMP
TCP Timestamps.
Definition: TcpLayer.h:105
@ TCPOPT_CORREXP
SCPS Corruption Experienced.
Definition: TcpLayer.h:123
@ TCPOPT_RECBOUND
SCPS Record Boundary.
Definition: TcpLayer.h:121
@ TCPOPT_SACK_PERM
SACK Permitted.
Definition: TcpLayer.h:97
@ TCPOPT_CCECHO
CC.ECHO(obsolete)
Definition: TcpLayer.h:111
@ PCPP_TCPOPT_SACK
SACK Block.
Definition: TcpLayer.h:99
@ TCPOPT_ECHO
Echo (obsoleted by option TcpOptionType::PCPP_TCPOPT_TIMESTAMP)
Definition: TcpLayer.h:101
Definition: TcpLayer.h:21
uint16_t pshFlag
PSH flag.
Definition: TcpLayer.h:41
uint16_t cwrFlag
CWR flag.
Definition: TcpLayer.h:49
uint16_t urgFlag
URG flag.
Definition: TcpLayer.h:45
uint32_t sequenceNumber
Sequence number.
Definition: TcpLayer.h:27
uint16_t rstFlag
RST flag.
Definition: TcpLayer.h:39
uint16_t urgentPointer
Definition: TcpLayer.h:80
uint16_t synFlag
SYN flag.
Definition: TcpLayer.h:37
uint16_t portDst
Destination TCP port.
Definition: TcpLayer.h:25
uint16_t portSrc
Source TCP port.
Definition: TcpLayer.h:23
uint16_t dataOffset
Specifies the size of the TCP header in 32-bit words.
Definition: TcpLayer.h:33
uint16_t eceFlag
ECE flag.
Definition: TcpLayer.h:47
uint16_t windowSize
The size of the receive window, which specifies the number of window size units (by default,...
Definition: TcpLayer.h:75
uint16_t finFlag
FIN flag.
Definition: TcpLayer.h:35
uint16_t ackFlag
ACK flag.
Definition: TcpLayer.h:43
uint32_t ackNumber
Acknowledgment number.
Definition: TcpLayer.h:29
uint16_t headerChecksum
The 16-bit checksum field is used for error-checking of the header and data.
Definition: TcpLayer.h:77