WebSocket++  0.8.3-dev
C++ websocket client/server library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
websocketpp::http::parser::parser Class Reference

Base HTTP parser. More...

#include <parser.hpp>

Inheritance diagram for websocketpp::http::parser::parser:
websocketpp::http::parser::request websocketpp::http::parser::response

Public Member Functions

std::string const & get_version () const
 Get the HTTP version string. More...
 
void set_version (std::string const &version)
 Set HTTP parser Version. More...
 
std::string const & get_header (std::string const &key) const
 Get the value of an HTTP header. More...
 
bool get_header_as_plist (std::string const &key, parameter_list &out) const
 Extract an HTTP parameter list from a parser header. More...
 
header_list const & get_headers () const
 Return a list of all HTTP headers. More...
 
void append_header (std::string const &key, std::string const &val, lib::error_code &ec)
 Append a value to an existing HTTP header. More...
 
void replace_header (std::string const &key, std::string const &val, lib::error_code &ec)
 Set a value for an HTTP header, replacing an existing value. More...
 
void remove_header (std::string const &key, lib::error_code &ec)
 Remove a header from the parser. More...
 
std::string const & get_body () const
 Get HTTP body. More...
 
void set_body (std::string const &value, lib::error_code &ec)
 Set body content. More...
 
size_t get_max_body_size () const
 Get body size limit. More...
 
void set_max_body_size (size_t value)
 Set body size limit. More...
 
bool parse_parameter_list (std::string const &in, parameter_list &out) const
 Extract an HTTP parameter list from a string. More...
 

Protected Member Functions

void process_header (std::string::iterator begin, std::string::iterator end)
 Process a header line. More...
 
bool prepare_body (lib::error_code &ec)
 Prepare the parser to begin parsing body data. More...
 
size_t process_body (char const *buf, size_t len)
 Process body data. More...
 
bool body_ready () const
 Check if the parser is done parsing the body. More...
 
std::string raw_headers () const
 Generate and return the HTTP headers as a string. More...
 

Protected Attributes

std::string m_version
 
header_list m_headers
 
size_t m_header_bytes
 
std::string m_body
 
size_t m_body_bytes_needed
 
size_t m_body_bytes_max
 
body_encoding::value m_body_encoding
 

Detailed Description

Base HTTP parser.

Includes methods and data elements common to all types of HTTP messages such as headers, versions, bodies, etc.

Definition at line 398 of file parser.hpp.

Member Function Documentation

◆ append_header()

void websocketpp::http::parser::parser::append_header ( std::string const &  key,
std::string const &  val,
lib::error_code &  ec 
)
inline

Append a value to an existing HTTP header.

This method will set the value of the HTTP header key with the indicated value. If a header with the name key already exists, val will be appended to the existing value.

Note: per HTTP specs header values are compared case insensitively.

Todo:
Should there be any restrictions on which keys are allowed?
See also
replace_header
Parameters
[in]keyThe name/key of the header to append to.
[in]valThe value to append.
[out]ecA status code describing the outcome of the operation.

Definition at line 69 of file parser.hpp.

◆ body_ready()

bool websocketpp::http::parser::parser::body_ready ( ) const
inlineprotected

Check if the parser is done parsing the body.

Behavior before a call to prepare_body is undefined.

Since
0.5.0
Returns
True if the message body has been completed loaded.

Definition at line 607 of file parser.hpp.

◆ get_body()

std::string const& websocketpp::http::parser::parser::get_body ( ) const
inline

Get HTTP body.

Gets the body of the HTTP object

Returns
The body of the HTTP message.

Definition at line 510 of file parser.hpp.

◆ get_header()

std::string const & websocketpp::http::parser::parser::get_header ( std::string const &  key) const
inline

Get the value of an HTTP header.

Note: per HTTP specs header values are compared case insensitively.

Parameters
[in]keyThe name/key of the header to get.
Returns
The value associated with the given HTTP header key.

Definition at line 45 of file parser.hpp.

◆ get_header_as_plist()

bool websocketpp::http::parser::parser::get_header_as_plist ( std::string const &  key,
parameter_list out 
) const
inline

Extract an HTTP parameter list from a parser header.

If the header requested doesn't exist or exists and is empty the parameter list is valid (but empty).

Parameters
[in]keyThe name/key of the HTTP header to use as input.
[out]outThe parameter list to store extracted parameters in.
Returns
Whether or not the input was a valid parameter list.

Definition at line 57 of file parser.hpp.

◆ get_headers()

header_list const & websocketpp::http::parser::parser::get_headers ( ) const
inline

Return a list of all HTTP headers.

Return a list of all HTTP headers

Since
0.8.0
Returns
A list of all HTTP headers

Definition at line 204 of file parser.hpp.

◆ get_max_body_size()

size_t websocketpp::http::parser::parser::get_max_body_size ( ) const
inline

Get body size limit.

Retrieves the maximum number of bytes to parse & buffer before canceling a request.

Since
0.5.0
Returns
The maximum length of a message body.

Definition at line 535 of file parser.hpp.

◆ get_version()

std::string const& websocketpp::http::parser::parser::get_version ( ) const
inline

Get the HTTP version string.

Returns
The version string for this parser

Definition at line 410 of file parser.hpp.

◆ parse_parameter_list()

bool websocketpp::http::parser::parser::parse_parameter_list ( std::string const &  in,
parameter_list out 
) const
inline

Extract an HTTP parameter list from a string.

Parameters
[in]inThe input string.
[out]outThe parameter list to store extracted parameters in.
Returns
Whether or not the input was a valid parameter list.

Definition at line 132 of file parser.hpp.

◆ prepare_body()

bool websocketpp::http::parser::parser::prepare_body ( lib::error_code &  ec)
inlineprotected

Prepare the parser to begin parsing body data.

Inspects headers to determine if the message has a body that needs to be read. If so, sets up the necessary state, otherwise returns false. If this method returns true and loading the message body is desired call process_body until it returns zero bytes or an error.

Must not be called until after all headers have been processed.

Since
0.5.0 (no parameters)
0.9.0 (the ec parameter)
Parameters
[out]ecA status code describing the outcome of the operation.
Returns
True if more bytes are needed to load the body, false otherwise.

Definition at line 144 of file parser.hpp.

◆ process_body()

size_t websocketpp::http::parser::parser::process_body ( char const *  buf,
size_t  len 
)
inlineprotected

Process body data.

Parses body data.

Since
0.5.0
Parameters
[in]beginAn iterator to the beginning of the sequence.
[in]endAn iterator to the end of the sequence.
Returns
The number of bytes processed

Definition at line 170 of file parser.hpp.

◆ process_header()

void websocketpp::http::parser::parser::process_header ( std::string::iterator  begin,
std::string::iterator  end 
)
inlineprotected

Process a header line.

Todo:
Update this method to be exception free.
Parameters
[in]beginAn iterator to the beginning of the sequence.
[in]endAn iterator to the end of the sequence.

Definition at line 186 of file parser.hpp.

◆ raw_headers()

std::string websocketpp::http::parser::parser::raw_headers ( ) const
inlineprotected

Generate and return the HTTP headers as a string.

Each headers will be followed by the \r
sequence including the last one. A second \r
sequence (blank header) is not appended by this method

Returns
The HTTP headers as a string.

Definition at line 208 of file parser.hpp.

◆ remove_header()

void websocketpp::http::parser::parser::remove_header ( std::string const &  key,
lib::error_code &  ec 
)
inline

Remove a header from the parser.

Removes the header entirely from the parser. This is different than setting the value of the header to blank.

Note: per HTTP specs header values are compared case insensitively.

Parameters
[in]keyThe name/key of the header to remove.
[out]ecA status code describing the outcome of the operation.

Definition at line 97 of file parser.hpp.

◆ replace_header()

void websocketpp::http::parser::parser::replace_header ( std::string const &  key,
std::string const &  val,
lib::error_code &  ec 
)
inline

Set a value for an HTTP header, replacing an existing value.

This method will set the value of the HTTP header key with the indicated value. If a header with the name key already exists, val will replace the existing value.

Note: per HTTP specs header values are compared case insensitively.

See also
append_header
Parameters
[in]keyThe name/key of the header to append to.
[in]valThe value to append.
[out]ecA status code describing the outcome of the operation.

Definition at line 85 of file parser.hpp.

◆ set_body()

void websocketpp::http::parser::parser::set_body ( std::string const &  value,
lib::error_code &  ec 
)
inline

Set body content.

Set the body content of the HTTP response to the parameter string. Note set_body will also set the Content-Length HTTP header to the appropriate value. If you want the Content-Length header to be something else, do so via replace_header("Content-Length") after calling set_body()

Parameters
valueString data to include as the body content.
[out]ecA status code describing the outcome of the operation.

Definition at line 109 of file parser.hpp.

◆ set_max_body_size()

void websocketpp::http::parser::parser::set_max_body_size ( size_t  value)
inline

Set body size limit.

Set the maximum number of bytes to parse and buffer before canceling a request.

Since
0.5.0
Parameters
valueThe size to set the max body length to.

Definition at line 548 of file parser.hpp.

◆ set_version()

void websocketpp::http::parser::parser::set_version ( std::string const &  version)
inline

Set HTTP parser Version.

Input should be in format: HTTP/x.y where x and y are positive integers.

Todo:
Does this method need any validation?
Parameters
[in]versionThe value to set the HTTP version to.

Definition at line 41 of file parser.hpp.


The documentation for this class was generated from the following file: