PcapPlusPlus  Next
pcpp::PostgresLayer Class Reference

#include <PostgresLayer.h>

Inheritance diagram for pcpp::PostgresLayer:
pcpp::Layer pcpp::IDataContainer

Public Member Functions

 ~PostgresLayer () override=default
 A d'tor for this layer.
 
PostgresMessageOrigin getPostgresOrigin () const
 
const PointerVector< PostgresMessage > & getPostgresMessages () const
 
const PostgresMessage * getPostgresMessage (const PostgresMessageType &messageType) const
 Get a PostgreSQL message by its type. More...
 
template<class TMessage , std::enable_if_t< std::is_base_of< PostgresMessage, TMessage >::value, bool > = nullptr>
const TMessage * getPostgresMessage () const
 Get a PostgreSQL message by its type (template version) More...
 
size_t getHeaderLen () const override
 
void parseNextLayer () override
 Does nothing for this layer, Postgres is always last.
 
void computeCalculateFields () override
 Does nothing for this layer.
 
OsiModelLayer getOsiModelLayer () const override
 
std::string toString () const override
 
- Public Member Functions inherited from pcpp::Layer
 ~Layer () override
 
Layer * getNextLayer () const
 
Layer * getPrevLayer () const
 
ProtocolType getProtocol () const
 
bool isMemberOfProtocolFamily (ProtocolTypeFamily protocolTypeFamily) const
 
uint8_t * getData () const
 
size_t getDataLen () const
 
uint8_t * getLayerPayload () const
 
size_t getLayerPayloadSize () const
 
bool isAllocatedToPacket () const
 
void copyData (uint8_t *toArr) const
 Copy the raw data of this layer to another array. More...
 
size_t copyData (uint8_t *dest, size_t destSize) const
 Copy the raw data of this layer to another array, with a specified maximum size. More...
 
void serialize (ISerializer &serializer) const
 
uint8_t * getDataPtr (size_t offset=0) const override
 

Static Public Member Functions

static bool isPostgresPort (uint16_t port)
 
static PostgresLayer * parsePostgresBackendMessages (uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
 
static PostgresLayer * parsePostgresFrontendMessages (uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
 

Additional Inherited Members

- Protected Member Functions inherited from pcpp::Layer
Packet * getAttachedPacket ()
 Get a pointer to the Packet this layer is attached to (if any). More...
 
Packet const * getAttachedPacket () const
 Get a pointer to the Packet this layer is attached to (if any). More...
 
void allocData (size_t dataLen, bool zeroInit=true)
 Requests the layer to allocate a new data buffer of the specified length. More...
 
template<typename T , typename... Args>
Layer * constructNextLayer (uint8_t *data, size_t dataLen, Args &&... extraArgs)
 Construct the next layer in the protocol stack. No validation is performed on the data. More...
 
template<typename T , typename... Args>
Layer * constructNextLayer (uint8_t *data, size_t dataLen, Packet *packet, Args &&... extraArgs)
 
template<typename TFactory , typename... Args>
Layer * constructNextLayerFromFactory (TFactory factoryFn, uint8_t *data, size_t dataLen, Args &&... extraArgs)
 Construct the next layer in the protocol stack using a factory functor. More...
 
template<typename TFactory , typename... Args>
Layer * constructNextLayerFromFactory (TFactory factoryFn, uint8_t *data, size_t dataLen, Packet *packet, Args &&... extraArgs)
 Construct the next layer in the protocol stack using a factory functor. More...
 
template<typename T , typename... Args>
Layer * tryConstructNextLayer (uint8_t *data, size_t dataLen, Args &&... extraArgs)
 
template<typename T , typename... Args>
Layer * tryConstructNextLayer (uint8_t *data, size_t dataLen, Packet *packet, Args &&... extraArgs)
 
template<typename T , typename TFallback , typename... Args>
Layer * tryConstructNextLayerWithFallback (uint8_t *data, size_t dataLen, Args &&... extraArgs)
 Try to construct the next layer in the protocol stack with a fallback option. More...
 
template<typename T , typename TFallback , typename... Args>
Layer * tryConstructNextLayerWithFallback (uint8_t *data, size_t dataLen, Packet *packet, Args &&... extraArgs)
 
template<typename TFallback , typename TFactory , typename... Args>
Layer * tryConstructNextLayerFromFactoryWithFallback (TFactory factoryFn, uint8_t *data, size_t dataLen, Args &&... extraArgs)
 Try to construct the next layer in the protocol stack using a factory functor with a fallback option. More...
 
template<typename TFallback , typename TFactory , typename... Args>
Layer * tryConstructNextLayerFromFactoryWithFallback (TFactory factoryFn, uint8_t *data, size_t dataLen, Packet *packet, Args &&... extraArgs)
 Try to construct the next layer in the protocol stack using a factory functor with a fallback option. More...
 
virtual void serializeLayer (ObjectScope &serializer) const
 
- Static Protected Member Functions inherited from pcpp::Layer
template<typename T >
static bool canReinterpretAs (const uint8_t *data, size_t dataLen)
 Check if the data is large enough to reinterpret as a type. More...
 

Detailed Description

Represents a PostgreSQL protocol layer

Member Function Documentation

◆ getHeaderLen()

size_t pcpp::PostgresLayer::getHeaderLen ( ) const
inlineoverridevirtual
Returns
The size of the Postgres layer header

Implements pcpp::Layer.

◆ getOsiModelLayer()

OsiModelLayer pcpp::PostgresLayer::getOsiModelLayer ( ) const
inlineoverridevirtual
Returns
The OSI layer level of Postgres (Application Layer).

Implements pcpp::Layer.

◆ getPostgresMessage() [1/2]

template<class TMessage , std::enable_if_t< std::is_base_of< PostgresMessage, TMessage >::value, bool > = nullptr>
const TMessage* pcpp::PostgresLayer::getPostgresMessage ( ) const
inline

Get a PostgreSQL message by its type (template version)

Template Parameters
TMessageThe message type to retrieve (must derive from PostgresMessage)
Returns
A pointer to the message of the specified type, or nullptr if not found

◆ getPostgresMessage() [2/2]

const PostgresMessage* pcpp::PostgresLayer::getPostgresMessage ( const PostgresMessageType &  messageType) const

Get a PostgreSQL message by its type.

Parameters
[in]messageTypeThe type of message to retrieve
Returns
A pointer to the message, or nullptr if not found

◆ getPostgresMessages()

const PointerVector<PostgresMessage>& pcpp::PostgresLayer::getPostgresMessages ( ) const
Returns
A vector of all PostgreSQL messages in this layer

◆ getPostgresOrigin()

PostgresMessageOrigin pcpp::PostgresLayer::getPostgresOrigin ( ) const
inline
Returns
The message origin (frontend or backend)

◆ isPostgresPort()

static bool pcpp::PostgresLayer::isPostgresPort ( uint16_t  port)
inlinestatic

A static method that checks whether the port is considered as PostgreSQL

Parameters
[in]portThe port number to be checked

◆ parsePostgresBackendMessages()

static PostgresLayer* pcpp::PostgresLayer::parsePostgresBackendMessages ( uint8_t *  data,
size_t  dataLen,
Layer *  prevLayer,
Packet *  packet 
)
static

Parse a PostgreSQL backend message from raw data

Parameters
[in]dataA pointer to the raw data
[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
Returns
A pointer to the parsed PostgresLayer, or nullptr if parsing fails

◆ parsePostgresFrontendMessages()

static PostgresLayer* pcpp::PostgresLayer::parsePostgresFrontendMessages ( uint8_t *  data,
size_t  dataLen,
Layer *  prevLayer,
Packet *  packet 
)
static

Parse a PostgreSQL frontend message from raw data

Parameters
[in]dataA pointer to the raw data
[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
Returns
A pointer to the parsed PostgresLayer, or nullptr if parsing fails

◆ toString()

std::string pcpp::PostgresLayer::toString ( ) const
overridevirtual
Returns
Returns the protocol info as readable string

Implements pcpp::Layer.