pcpp::SipLayer Class Reference

#include <SipLayer.h>

Inheritance diagram for pcpp::SipLayer:
pcpp::TextBasedProtocolMessage pcpp::Layer pcpp::IDataContainer pcpp::SipRequestLayer pcpp::SipResponseLayer

Public Member Functions

int getContentLength ()
HeaderFieldsetContentLength (int contentLength, const std::string prevFieldName="")
OsiModelLayer getOsiModelLayer ()
void parseNextLayer ()
void computeCalculateFields ()
- Public Member Functions inherited from pcpp::TextBasedProtocolMessage
HeaderFieldgetFieldByName (std::string fieldName, int index=0)
HeaderFieldgetFirstField ()
HeaderFieldgetNextField (HeaderField *prevField)
int getFieldCount ()
virtual HeaderFieldaddField (const std::string &fieldName, const std::string &fieldValue)
virtual HeaderFieldaddField (const HeaderField &newField)
HeaderFieldaddEndOfHeader ()
virtual HeaderFieldinsertField (HeaderField *prevField, const std::string &fieldName, const std::string &fieldValue)
virtual HeaderFieldinsertField (std::string prevFieldName, const std::string &fieldName, const std::string &fieldValue)
virtual HeaderFieldinsertField (HeaderField *prevField, const HeaderField &newField)
bool removeField (HeaderField *fieldToRemove)
bool removeField (std::string fieldName, int index=0)
bool isHeaderComplete ()
size_t getHeaderLen ()
- 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)
virtual std::string toString ()=0

Detailed Description

Represents a general SIP message. It's an abstract class and cannot be instantiated. It's inherited by SipRequestLayer and SipResponseLayer

Member Function Documentation

void pcpp::SipLayer::computeCalculateFields ( )

Set the content-length only if a content-length field already exists and if its current value is different than the total length of the next layer(s)

Reimplemented from pcpp::TextBasedProtocolMessage.

int pcpp::SipLayer::getContentLength ( )

The length of the body of many SIP response messages is determined by a SIP header field called "Content-Length". This method parses this field, extracts its value and return it. If this field doesn't exist 0 is returned

SIP response body length determined by "Content-Length" field
OsiModelLayer pcpp::SipLayer::getOsiModelLayer ( )
The OSI Model layer this protocol belongs to

Implements pcpp::Layer.

void pcpp::SipLayer::parseNextLayer ( )

Currently identifies only SDP if content-length field exists and set to a value greater than zero. If content-length field doesn't exist or set to zero and still there is data after this layer, a PayloadLayer will be created

Reimplemented from pcpp::TextBasedProtocolMessage.

HeaderField* pcpp::SipLayer::setContentLength ( int  contentLength,
const std::string  prevFieldName = "" 

The length of the body of many SIP messages is determined by a header field called "Content-Length". This method sets The content-length field value. The method supports several cases:

  • If the "Content-Length" field exists - the method will only replace the existing value with the new value
  • If the "Content-Length" field doesn't exist - the method will create this field and put the value in it. Here are also 2 cases:
    • If prevFieldName is specified - the new "Content-Length" field will be created after it
    • If prevFieldName isn't specified or doesn't exist - the new "Content-Length" field will be created as the last field before end-of-header field
[in]contentLengthThe content length value to set
[in]prevFieldNameOptional parameter, if specified and "Content-Length" field doesn't exist, it will be created after this field
A pointer to the "Content-Length" field, or NULL if creation failed