PcapPlusPlus
20.08
|
#include <HttpLayer.h>
Public Types | |
enum | HttpMethod { HttpGET, HttpHEAD, HttpPOST, HttpPUT, HttpDELETE, HttpTRACE, HttpOPTIONS, HttpCONNECT, HttpPATCH, HttpMethodUnknown } |
Public Member Functions | |
HttpRequestLayer (uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet) | |
HttpRequestLayer (HttpMethod method, std::string uri, HttpVersion version) | |
HttpRequestLayer (const HttpRequestLayer &other) | |
HttpRequestLayer & | operator= (const HttpRequestLayer &other) |
HttpRequestFirstLine * | getFirstLine () const |
std::string | getUrl () const |
std::string | toString () const |
![]() | |
virtual | ~Layer () |
Layer * | getNextLayer () const |
Layer * | getPrevLayer () const |
ProtocolType | getProtocol () 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 |
uint8_t * | getDataPtr (size_t offset=0) const |
Additional Inherited Members |
Represents an HTTP request header and inherits all basic functionality of HttpMessage and TextBasedProtocolMessage. The functionality that is added for this class is the HTTP first line concept. An HTTP request has the following first line: GET /bla/blabla.asp HTTP/1.1 Since it's not an "ordinary" HTTP field, it requires a special treatment and gets a class of it's own: HttpRequestFirstLine. Unlike most L2-4 protocols, an HTTP request header can spread over more than 1 packet. PcapPlusPlus currently doesn't support a header that is spread over more than 1 packet so in such cases: 1) only the first packet will be parsed as HttpRequestLayer (the other packets won't be recognized as HttpRequestLayer) and 2) the HTTP header for the first packet won't be complete (as it continues in the following packets), this why PcapPlusPlus can indicate that HTTP request header is complete or not(doesn't end with "\r\n\r\n" or "\n\n") using HttpMessage::isHeaderComplete()
pcpp::HttpRequestLayer::HttpRequestLayer | ( | uint8_t * | data, |
size_t | dataLen, | ||
Layer * | prevLayer, | ||
Packet * | packet | ||
) |
A constructor that creates the layer from an existing packet raw data
[in] | data | A pointer to the raw data |
[in] | dataLen | Size of the data in bytes |
[in] | prevLayer | A pointer to the previous layer |
[in] | packet | A pointer to the Packet instance where layer will be stored in |
pcpp::HttpRequestLayer::HttpRequestLayer | ( | HttpMethod | method, |
std::string | uri, | ||
HttpVersion | version | ||
) |
A constructor that allocates a new HTTP request header with only the first line filled. Object will be created without further fields. The user can then add fields using addField() methods
[in] | method | The HTTP method used in this HTTP request |
[in] | uri | The URI of the first line |
[in] | version | HTTP version to be used in this request |
pcpp::HttpRequestLayer::HttpRequestLayer | ( | const HttpRequestLayer & | other | ) |
A copy constructor for this layer. This copy constructor inherits base copy constructor HttpMessage::HttpMessage() and add the functionality of copying the first line as well
[in] | other | The instance to copy from |
|
inline |
std::string pcpp::HttpRequestLayer::getUrl | ( | ) | const |
The URL is hostname+uri. So given the following URL, for example: "www.cnn.com/main.html", the hostname is "www.cnn.com" and the URI is "/.main.html". URI and hostname are split to 2 different places inside the HTTP request packet: URI is in the first line and hostname is in "HOST" field. This methods concatenates the hostname and URI to the full URL
HttpRequestLayer& pcpp::HttpRequestLayer::operator= | ( | const HttpRequestLayer & | other | ) |
An assignment operator overload for this layer. This method inherits base assignment operator HttpMessage::operator=() and add the functionality of copying the first line as well
[in] | other | The instance to copy from |
|
virtual |
Implements pcpp::Layer.