PcapPlusPlus
pcpp::TcpLayer Class Reference

#include <TcpLayer.h>

Inheritance diagram for pcpp::TcpLayer:
pcpp::Layer pcpp::IDataContainer

Public Member Functions

 TcpLayer (uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
 
 TcpLayer ()
 
 TcpLayer (uint16_t portSrc, uint16_t portDst)
 
 TcpLayer (const TcpLayer &other)
 
TcpLayeroperator= (const TcpLayer &other)
 
tcphdrgetTcpHeader ()
 
TcpOption getTcpOption (TcpOptionType option)
 
TcpOption getFirstTcpOption ()
 
TcpOption getNextTcpOption (TcpOption &tcpOption)
 
size_t getTcpOptionCount ()
 
TcpOption addTcpOption (const TcpOptionBuilder &optionBuilder)
 
TcpOption addTcpOptionAfter (const TcpOptionBuilder &optionBuilder, TcpOptionType prevOptionType=TCPOPT_Unknown)
 
bool removeTcpOption (TcpOptionType optionType)
 
bool removeAllTcpOptions ()
 
uint16_t calculateChecksum (bool writeResultToPacket)
 
void parseNextLayer ()
 
size_t getHeaderLen ()
 
void computeCalculateFields ()
 
std::string toString ()
 
OsiModelLayer getOsiModelLayer ()
 
- Public Member Functions inherited from pcpp::Layer
virtual ~Layer ()
 
LayergetNextLayer ()
 
LayergetPrevLayer ()
 
ProtocolType getProtocol ()
 
uint8_t * getData ()
 
size_t getDataLen ()
 
uint8_t * getLayerPayload ()
 
size_t getLayerPayloadSize ()
 
bool isAllocatedToPacket ()
 
void copyData (uint8_t *toArr)
 
uint8_t * getDataPtr (size_t offset=0)
 

Detailed Description

Represents a TCP (Transmission Control Protocol) protocol layer

Constructor & Destructor Documentation

◆ TcpLayer() [1/4]

pcpp::TcpLayer::TcpLayer ( uint8_t *  data,
size_t  dataLen,
Layer prevLayer,
Packet packet 
)

A constructor that creates the layer from an existing packet raw data

Parameters
[in]dataA pointer to the raw data (will be casted to tcphdr)
[in]dataLenSize of the data in bytes
[in]prevLayerA pointer to the previous layer
[in]packetA pointer to the Packet instance where layer will be stored in

◆ TcpLayer() [2/4]

pcpp::TcpLayer::TcpLayer ( )

A constructor that allocates a new TCP header with zero TCP options

◆ TcpLayer() [3/4]

pcpp::TcpLayer::TcpLayer ( uint16_t  portSrc,
uint16_t  portDst 
)

A constructor that allocates a new TCP header with source port and destination port and zero TCP options

Parameters
[in]portSrcSource port
[in]portDstDestination port

◆ TcpLayer() [4/4]

pcpp::TcpLayer::TcpLayer ( const TcpLayer other)

A copy constructor that copy the entire header from the other TcpLayer (including TCP options)

Member Function Documentation

◆ addTcpOption()

TcpOption pcpp::TcpLayer::addTcpOption ( const TcpOptionBuilder optionBuilder)

Add a new TCP option at the end of the layer (after the last TCP option)

Parameters
[in]optionBuilderA TcpOptionBuilder object that contains the TCP option data to be added
Returns
A TcpOption object that contains the newly added TCP option data or logical NULL (TcpOption::isNull() == true) if addition failed. In case of a failure a corresponding error message will be printed to log

◆ addTcpOptionAfter()

TcpOption pcpp::TcpLayer::addTcpOptionAfter ( const TcpOptionBuilder optionBuilder,
TcpOptionType  prevOptionType = TCPOPT_Unknown 
)

Add a new TCP option after an existing one

Parameters
[in]optionBuilderA TcpOptionBuilder object that contains the requested TCP option data to be added
[in]prevOptionTypeThe TCP option which the newly added option should come after. This is an optional parameter which gets a default value of TCPOPT_Unknown if omitted, which means the new option will be added as the first option in the layer
Returns
A TcpOption object containing the newly added TCP option data or logical NULL (TcpOption::isNull() == true) if addition failed. In case of a failure a corresponding error message will be printed to log

◆ calculateChecksum()

uint16_t pcpp::TcpLayer::calculateChecksum ( bool  writeResultToPacket)

Calculate the checksum from header and data and possibly write the result to tcphdr::headerChecksum

Parameters
[in]writeResultToPacketIf set to true then checksum result will be written to tcphdr::headerChecksum
Returns
The checksum result

◆ computeCalculateFields()

void pcpp::TcpLayer::computeCalculateFields ( )
virtual

Calculate tcphdr::headerChecksum field

Implements pcpp::Layer.

◆ getFirstTcpOption()

TcpOption pcpp::TcpLayer::getFirstTcpOption ( )
Returns
The first TCP option in the packet. If the current layer contains no options the returned value will contain a logical NULL (TcpOption::isNull() == true)

◆ getHeaderLen()

size_t pcpp::TcpLayer::getHeaderLen ( )
inlinevirtual
Returns
Size of tcphdr + all TCP options

Implements pcpp::Layer.

◆ getNextTcpOption()

TcpOption pcpp::TcpLayer::getNextTcpOption ( TcpOption tcpOption)

Get the TCP option that comes after a given option. If the given option was the last one, the returned value will contain a logical NULL (TcpOption::isNull() == true)

Parameters
[in]tcpOptionA TCP option object that exists in the current layer
Returns
A TcpOption object that contains the TCP option data that comes next, or logical NULL if the given TCP option: (1) was the last one; or (2) contains a logical NULL; or (3) doesn't belong to this packet

◆ getOsiModelLayer()

OsiModelLayer pcpp::TcpLayer::getOsiModelLayer ( )
inlinevirtual
Returns
The OSI Model layer this protocol belongs to

Implements pcpp::Layer.

◆ getTcpHeader()

tcphdr* pcpp::TcpLayer::getTcpHeader ( )
inline

Get a pointer to the TCP header. Notice this points directly to the data, so every change will change the actual packet data

Returns
A pointer to the tcphdr

◆ getTcpOption()

TcpOption pcpp::TcpLayer::getTcpOption ( TcpOptionType  option)

Get a TCP option by type

Parameters
[in]optionTCP option type to retrieve
Returns
An TcpOption object that contains the first option that matches this type, or logical NULL (TcpOption::isNull() == true) if no such option found

◆ getTcpOptionCount()

size_t pcpp::TcpLayer::getTcpOptionCount ( )
Returns
The number of TCP options in this layer

◆ operator=()

TcpLayer& pcpp::TcpLayer::operator= ( const TcpLayer other)

An assignment operator that first delete all data from current layer and then copy the entire header from the other TcpLayer (including TCP options)

◆ parseNextLayer()

void pcpp::TcpLayer::parseNextLayer ( )
virtual

Currently identifies the following next layers: HttpRequestLayer, HttpResponseLayer. Otherwise sets PayloadLayer

Implements pcpp::Layer.

◆ removeAllTcpOptions()

bool pcpp::TcpLayer::removeAllTcpOptions ( )

Remove all TCP options in this layer

Returns
True if all TCP options were successfully removed or false if removal failed for some reason (a proper error will be written to log)

◆ removeTcpOption()

bool pcpp::TcpLayer::removeTcpOption ( TcpOptionType  optionType)

Remove an existing TCP option from the layer. TCP option is found by type

Parameters
[in]optionTypeThe TCP option type to remove
Returns
True if TCP option was removed or false if type wasn't found or if removal failed (in each case a proper error will be written to log)

◆ toString()

std::string pcpp::TcpLayer::toString ( )
virtual
Returns
A string representation of the layer most important data (should look like the layer description in Wireshark)

Implements pcpp::Layer.