- add Pcap++ Windows build
This commit is contained in:
84
pcappp/include/pcapplusplus/PacketTrailerLayer.h
Normal file
84
pcappp/include/pcapplusplus/PacketTrailerLayer.h
Normal file
@@ -0,0 +1,84 @@
|
||||
#ifndef PACKETPP_PACKET_TRAILER_LAYER
|
||||
#define PACKETPP_PACKET_TRAILER_LAYER
|
||||
|
||||
/// @file
|
||||
|
||||
#include "Layer.h"
|
||||
|
||||
namespace pcpp
|
||||
{
|
||||
/**
|
||||
* @class PacketTrailerLayer
|
||||
* A class for representing packet tailer (a.k.a footer or padding) which refers to supplemental data placed at the end of a block of data
|
||||
* being stored or transmitted, which may contain information for the handling of the data block, or just mark its end
|
||||
* (taken from Wikipedia: https://en.wikipedia.org/wiki/Trailer_(computing) )
|
||||
*
|
||||
* There are various reasons for adding a packet trailer, one of the most famous is FCS (Frame check sequence) which refers to the extra
|
||||
* error-detecting code added to a frame. Another usage is padding which means adding data to reach a minimum required packet length.
|
||||
*
|
||||
* Although this layer inherits from the Layer class, it is not a standard layer in the sense that it can't be constructed by the user.
|
||||
* This layer may be only be constructed in the Packet class, in the process of parsing the packet and creating the layers; if at the end
|
||||
* of the parsing process there is data left that is not allocated to any layer, it's assumed to be the packet trailer and an instance of
|
||||
* this class is created. This means this layer can only exist as the last layer in a packet, if a packet trailer indeed exists.
|
||||
*
|
||||
* No layer can be added by the user after this layer (trying to do that will result with an error).
|
||||
*
|
||||
* This layer can be removed by the user or extended/shortened, as any layer.
|
||||
*
|
||||
* It also contains method to extract the trailer data
|
||||
*/
|
||||
class PacketTrailerLayer : public Layer
|
||||
{
|
||||
public:
|
||||
/** A constructor that creates the layer from an existing packet raw data
|
||||
* @param[in] data A pointer to the raw data
|
||||
* @param[in] dataLen Size of the data in bytes
|
||||
* @param[in] prevLayer A pointer to the previous layer
|
||||
* @param[in] packet A pointer to the Packet instance where layer will be stored in
|
||||
*/
|
||||
PacketTrailerLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet) : Layer(data, dataLen, prevLayer, packet) { m_Protocol = PacketTrailer; }
|
||||
|
||||
~PacketTrailerLayer() {}
|
||||
|
||||
/**
|
||||
* Get a pointer to the trailer data
|
||||
* @return A pointer to the trailer data
|
||||
*/
|
||||
uint8_t* getTrailerData() const { return m_Data; }
|
||||
|
||||
/**
|
||||
* @return Trailer data as hex string
|
||||
*/
|
||||
std::string getTrailerDataAsHexString() const;
|
||||
|
||||
/**
|
||||
* Get the trailer data length
|
||||
* @return The trailer data length in bytes
|
||||
*/
|
||||
size_t getTrailerLen() const { return m_DataLen; }
|
||||
|
||||
// implement abstract methods
|
||||
|
||||
/**
|
||||
* Does nothing for this layer (PacketTrailerLayer is always last)
|
||||
*/
|
||||
void parseNextLayer() {}
|
||||
|
||||
/**
|
||||
* @return trailer data length in bytes
|
||||
*/
|
||||
size_t getHeaderLen() const { return m_DataLen; }
|
||||
|
||||
/**
|
||||
* Does nothing for this layer
|
||||
*/
|
||||
void computeCalculateFields() {}
|
||||
|
||||
std::string toString() const;
|
||||
|
||||
OsiModelLayer getOsiModelLayer() const { return OsiModelDataLinkLayer; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // PACKETPP_PACKET_TRAILER_LAYER
|
||||
Reference in New Issue
Block a user