PionNetworkLibrary
|
#include <message.hpp>
Classes | |
class | content_buffer_t |
a simple helper class used to manage a fixed-size payload content buffer More... | |
struct | receive_error_t |
data type for library errors returned during receive() operations More... | |
Public Types | |
enum | data_status_t { STATUS_NONE, STATUS_TRUNCATED, STATUS_PARTIAL, STATUS_OK } |
defines message data integrity status codes More... | |
typedef std::vector < boost::asio::const_buffer > | write_buffers_t |
data type for I/O write buffers (these wrap existing data to be sent) More... | |
typedef std::vector< char > | chunk_cache_t |
used to cache chunked data More... | |
Public Member Functions | |
message (void) | |
constructs a new HTTP message object More... | |
message (const message &http_msg) | |
copy constructor More... | |
message & | operator= (const message &http_msg) |
assignment operator More... | |
virtual | ~message () |
virtual destructor More... | |
virtual void | clear (void) |
clears all message data More... | |
virtual bool | is_content_length_implied (void) const =0 |
should return true if the content length can be implied without headers More... | |
bool | is_valid (void) const |
returns true if the message is valid More... | |
bool | get_chunks_supported (void) const |
returns true if chunked transfer encodings are supported More... | |
boost::asio::ip::address & | get_remote_ip (void) |
returns IP address of the remote endpoint More... | |
boost::uint16_t | get_version_major (void) const |
returns the major HTTP version number More... | |
boost::uint16_t | get_version_minor (void) const |
returns the minor HTTP version number More... | |
std::string | get_version_string (void) const |
returns a string representation of the HTTP version (i.e. "HTTP/1.1") More... | |
size_t | get_content_length (void) const |
returns the length of the payload content (in bytes) More... | |
bool | is_chunked (void) const |
returns true if the message content is chunked More... | |
bool | is_content_buffer_allocated () const |
returns true if buffer for content is allocated More... | |
std::size_t | get_content_buffer_size () const |
returns size of allocated buffer More... | |
char * | get_content (void) |
returns a pointer to the payload content, or empty string if there is none More... | |
const char * | get_content (void) const |
returns a const pointer to the payload content, or empty string if there is none More... | |
chunk_cache_t & | get_chunk_cache (void) |
returns a reference to the chunk cache More... | |
const std::string & | get_header (const std::string &key) const |
returns a value for the header if any are defined; otherwise, an empty string More... | |
ihash_multimap & | get_headers (void) |
returns a reference to the HTTP headers More... | |
bool | has_header (const std::string &key) const |
returns true if at least one value for the header is defined More... | |
const std::string & | get_cookie (const std::string &key) const |
ihash_multimap & | get_cookies (void) |
returns the cookie parameters More... | |
bool | has_cookie (const std::string &key) const |
void | add_cookie (const std::string &key, const std::string &value) |
void | change_cookie (const std::string &key, const std::string &value) |
void | delete_cookie (const std::string &key) |
const std::string & | get_first_line (void) const |
returns a string containing the first line for the HTTP message More... | |
bool | has_missing_packets () const |
true if there were missing packets More... | |
void | set_missing_packets (bool newVal) |
set to true when missing packets detected More... | |
bool | has_data_after_missing_packets () const |
true if more data seen after the missing packets More... | |
void | set_data_after_missing_packet (bool newVal) |
void | set_is_valid (bool b=true) |
sets whether or not the message is valid More... | |
void | set_chunks_supported (bool b) |
set to true if chunked transfer encodings are supported More... | |
void | set_remote_ip (const boost::asio::ip::address &ip) |
sets IP address of the remote endpoint More... | |
void | set_version_major (const boost::uint16_t n) |
sets the major HTTP version number More... | |
void | set_version_minor (const boost::uint16_t n) |
sets the minor HTTP version number More... | |
void | set_content_length (size_t n) |
sets the length of the payload content (in bytes) More... | |
void | set_do_not_send_content_length (void) |
if called, the content-length will not be sent in the HTTP headers More... | |
data_status_t | get_status () const |
return the data receival status More... | |
void | set_status (data_status_t newVal) |
void | update_content_length_using_header (void) |
sets the length of the payload content using the Content-Length header More... | |
void | update_transfer_encoding_using_header (void) |
sets the transfer coding using the Transfer-Encoding header More... | |
char * | create_content_buffer (void) |
void | set_content (const std::string &content) |
resets payload content to match the value of a string More... | |
void | clear_content (void) |
clears payload content buffer More... | |
void | set_content_type (const std::string &type) |
sets the content type for the message payload More... | |
void | add_header (const std::string &key, const std::string &value) |
adds a value for the HTTP header named key More... | |
void | change_header (const std::string &key, const std::string &value) |
changes the value for the HTTP header named key More... | |
void | delete_header (const std::string &key) |
removes all values for the HTTP header named key More... | |
bool | check_keep_alive (void) const |
returns true if the HTTP connection may be kept alive More... | |
void | prepare_buffers_for_send (write_buffers_t &write_buffers, const bool keep_alive, const bool using_chunks) |
std::size_t | send (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false) |
std::size_t | receive (tcp::connection &tcp_conn, boost::system::error_code &ec, parser &http_parser) |
std::size_t | receive (tcp::connection &tcp_conn, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1)) |
std::size_t | write (std::ostream &out, boost::system::error_code &ec, bool headers_only=false) |
std::size_t | read (std::istream &in, boost::system::error_code &ec, parser &http_parser) |
std::size_t | read (std::istream &in, boost::system::error_code &ec, bool headers_only=false, std::size_t max_content_length=static_cast< size_t >(-1)) |
void | concatenate_chunks (void) |
Public Member Functions inherited from pion::http::types | |
virtual | ~types () |
virtual destructor More... | |
Protected Member Functions | |
void | prepare_headers_for_send (const bool keep_alive, const bool using_chunks) |
void | append_headers (write_buffers_t &write_buffers) |
virtual void | append_cookie_headers (void) |
appends HTTP headers for any cookies defined by the http::message More... | |
void | clear_first_line (void) const |
virtual void | update_first_line (void) const =0 |
updates the string containing the first line for the HTTP message More... | |
Static Protected Member Functions | |
template<typename DictionaryType > | |
static const std::string & | get_value (const DictionaryType &dict, const std::string &key) |
template<typename DictionaryType > | |
static void | change_value (DictionaryType &dict, const std::string &key, const std::string &value) |
template<typename DictionaryType > | |
static void | delete_value (DictionaryType &dict, const std::string &key) |
Protected Attributes | |
std::string | m_first_line |
Additional Inherited Members | |
Static Public Member Functions inherited from pion::http::types | |
static std::string | get_date_string (const time_t t) |
converts time_t format into an HTTP-date string More... | |
static std::string | make_query_string (const ihash_multimap &query_params) |
builds an HTTP query string from a collection of query parameters More... | |
static std::string | make_set_cookie_header (const std::string &name, const std::string &value, const std::string &path, const bool has_max_age=false, const unsigned long max_age=0) |
Static Public Attributes inherited from pion::http::types | |
static const std::string | STRING_EMPTY |
static const std::string | STRING_CRLF |
static const std::string | STRING_HTTP_VERSION |
static const std::string | HEADER_NAME_VALUE_DELIMITER |
static const std::string | COOKIE_NAME_VALUE_DELIMITER |
static const std::string | HEADER_HOST |
static const std::string | HEADER_COOKIE |
static const std::string | HEADER_SET_COOKIE |
static const std::string | HEADER_CONNECTION |
static const std::string | HEADER_CONTENT_TYPE |
static const std::string | HEADER_CONTENT_LENGTH |
static const std::string | HEADER_CONTENT_LOCATION |
static const std::string | HEADER_CONTENT_ENCODING |
static const std::string | HEADER_CONTENT_DISPOSITION |
static const std::string | HEADER_LAST_MODIFIED |
static const std::string | HEADER_IF_MODIFIED_SINCE |
static const std::string | HEADER_TRANSFER_ENCODING |
static const std::string | HEADER_LOCATION |
static const std::string | HEADER_AUTHORIZATION |
static const std::string | HEADER_REFERER |
static const std::string | HEADER_USER_AGENT |
static const std::string | HEADER_X_FORWARDED_FOR |
static const std::string | HEADER_CLIENT_IP |
static const std::string | CONTENT_TYPE_HTML |
static const std::string | CONTENT_TYPE_TEXT |
static const std::string | CONTENT_TYPE_XML |
static const std::string | CONTENT_TYPE_URLENCODED |
static const std::string | CONTENT_TYPE_MULTIPART_FORM_DATA |
static const std::string | REQUEST_METHOD_HEAD |
static const std::string | REQUEST_METHOD_GET |
static const std::string | REQUEST_METHOD_PUT |
static const std::string | REQUEST_METHOD_POST |
static const std::string | REQUEST_METHOD_DELETE |
static const std::string | RESPONSE_MESSAGE_OK |
static const std::string | RESPONSE_MESSAGE_CREATED |
static const std::string | RESPONSE_MESSAGE_ACCEPTED |
static const std::string | RESPONSE_MESSAGE_NO_CONTENT |
static const std::string | RESPONSE_MESSAGE_FOUND |
static const std::string | RESPONSE_MESSAGE_UNAUTHORIZED |
static const std::string | RESPONSE_MESSAGE_FORBIDDEN |
static const std::string | RESPONSE_MESSAGE_NOT_FOUND |
static const std::string | RESPONSE_MESSAGE_METHOD_NOT_ALLOWED |
static const std::string | RESPONSE_MESSAGE_NOT_MODIFIED |
static const std::string | RESPONSE_MESSAGE_BAD_REQUEST |
static const std::string | RESPONSE_MESSAGE_SERVER_ERROR |
static const std::string | RESPONSE_MESSAGE_NOT_IMPLEMENTED |
static const std::string | RESPONSE_MESSAGE_CONTINUE |
static const unsigned int | RESPONSE_CODE_OK = 200 |
static const unsigned int | RESPONSE_CODE_CREATED = 201 |
static const unsigned int | RESPONSE_CODE_ACCEPTED = 202 |
static const unsigned int | RESPONSE_CODE_NO_CONTENT = 204 |
static const unsigned int | RESPONSE_CODE_FOUND = 302 |
static const unsigned int | RESPONSE_CODE_UNAUTHORIZED = 401 |
static const unsigned int | RESPONSE_CODE_FORBIDDEN = 403 |
static const unsigned int | RESPONSE_CODE_NOT_FOUND = 404 |
static const unsigned int | RESPONSE_CODE_METHOD_NOT_ALLOWED = 405 |
static const unsigned int | RESPONSE_CODE_NOT_MODIFIED = 304 |
static const unsigned int | RESPONSE_CODE_BAD_REQUEST = 400 |
static const unsigned int | RESPONSE_CODE_SERVER_ERROR = 500 |
static const unsigned int | RESPONSE_CODE_NOT_IMPLEMENTED = 501 |
static const unsigned int | RESPONSE_CODE_CONTINUE = 100 |
message: base container for HTTP messages
typedef std::vector<char> pion::http::message::chunk_cache_t |
used to cache chunked data
typedef std::vector<boost::asio::const_buffer> pion::http::message::write_buffers_t |
data type for I/O write buffers (these wrap existing data to be sent)
|
inline |
constructs a new HTTP message object
|
inline |
copy constructor
|
inlinevirtual |
virtual destructor
|
inline |
adds a value for the cookie since cookie names are insensitive, key should use lowercase alpha chars
|
inline |
adds a value for the HTTP header named key
Referenced by pion::http::request::append_cookie_headers(), pion::http::response::delete_cookie(), pion::http::parser::parse_headers(), and pion::http::response::set_cookie().
|
inlineprotectedvirtual |
appends HTTP headers for any cookies defined by the http::message
Reimplemented in pion::http::response, and pion::http::request.
|
inlineprotected |
appends the message's HTTP headers to a vector of write buffers
write_buffers | the buffers to append HTTP headers into |
|
inline |
changes the value of a cookie since cookie names are insensitive, key should use lowercase alpha chars
|
inline |
changes the value for the HTTP header named key
Referenced by pion::http::response::set_last_modified().
|
inlinestaticprotected |
Changes the value for a dictionary key. Adds the key if it does not already exist. If multiple values exist for the key, they will be removed and only the new value will remain.
dict | the dictionary object to update |
key | the key to change the value for |
value | the value to assign to the key |
Referenced by pion::http::request::change_query().
|
inline |
returns true if the HTTP connection may be kept alive
Referenced by receive().
|
inlinevirtual |
clears all message data
Reimplemented in pion::http::response, and pion::http::request.
Referenced by pion::http::request::clear(), pion::http::response::clear(), read(), and receive().
|
inline |
clears payload content buffer
|
inlineprotected |
erases the string containing the first line for the HTTP message (it will be updated the next time get_first_line() is called)
Referenced by pion::http::request::set_method(), pion::http::request::set_query_string(), pion::http::request::set_resource(), pion::http::response::set_status_code(), and pion::http::response::set_status_message().
void pion::http::message::concatenate_chunks | ( | void | ) |
pieces together all the received chunks
References create_content_buffer(), and set_content_length().
Referenced by pion::http::parser::check_premature_eof(), pion::http::parser::finish(), and pion::http::parser::parse().
|
inline |
creates a payload content buffer of size m_content_length and returns a pointer to the new buffer (memory is managed by message class)
Referenced by concatenate_chunks(), pion::http::parser::finish(), pion::http::parser::finish_header_parsing(), pion::http::request::set_content(), and pion::http::request::use_query_params_for_post_content().
|
inline |
removes all values for a cookie since cookie names are insensitive, key should use lowercase alpha chars
|
inline |
removes all values for the HTTP header named key
|
inlinestaticprotected |
Deletes all values for a key
dict | the dictionary object to update |
key | the key to delete |
Referenced by pion::http::request::delete_query().
|
inline |
returns a reference to the chunk cache
Referenced by pion::http::parser::finish_header_parsing(), pion::http::parser::parse(), and pion::http::parser::parse_missing_data().
|
inline |
returns true if chunked transfer encodings are supported
|
inline |
returns a pointer to the payload content, or empty string if there is none
Referenced by pion::http::parser::consume_content(), pion::http::parser::finish(), pion::http::parser::parse_missing_data(), send(), and write().
|
inline |
returns a const pointer to the payload content, or empty string if there is none
|
inline |
returns size of allocated buffer
|
inline |
returns the length of the payload content (in bytes)
Referenced by pion::http::parser::finish(), pion::http::parser::finish_header_parsing(), send(), and write().
|
inline |
returns a value for the cookie if any are defined; otherwise, an empty string since cookie names are insensitive, key should use lowercase alpha chars
|
inline |
returns the cookie parameters
Referenced by pion::http::request::append_cookie_headers(), pion::http::response::append_cookie_headers(), and pion::http::parser::update_message_with_header_data().
|
inline |
returns a string containing the first line for the HTTP message
|
inline |
returns a value for the header if any are defined; otherwise, an empty string
Referenced by pion::http::parser::finish().
|
inline |
returns a reference to the HTTP headers
Referenced by pion::http::parser::update_message_with_header_data().
|
inline |
returns IP address of the remote endpoint
|
inline |
return the data receival status
|
inlinestaticprotected |
Returns the first value in a dictionary if key is found; or an empty string if no values are found
dict | the dictionary to search for key |
key | the key to search for |
Referenced by pion::http::request::get_query().
|
inline |
returns the major HTTP version number
Referenced by pion::http::parser::parse_headers(), and pion::http::response::update_request_info().
|
inline |
returns the minor HTTP version number
Referenced by pion::http::parser::parse_headers(), and pion::http::response::update_request_info().
|
inline |
returns a string representation of the HTTP version (i.e. "HTTP/1.1")
Referenced by pion::http::request::update_first_line(), and pion::http::response::update_first_line().
|
inline |
returns true if at least one value for the cookie is defined since cookie names are insensitive, key should use lowercase alpha chars
|
inline |
true if more data seen after the missing packets
Referenced by pion::http::parser::compute_msg_status().
|
inline |
returns true if at least one value for the header is defined
Referenced by pion::http::parser::finish_header_parsing().
|
inline |
true if there were missing packets
Referenced by pion::http::parser::compute_msg_status(), and pion::http::parser::parse().
|
inline |
returns true if the message content is chunked
Referenced by pion::http::parser::finish_header_parsing().
|
inline |
returns true if buffer for content is allocated
|
pure virtual |
should return true if the content length can be implied without headers
Implemented in pion::http::response, and pion::http::request.
Referenced by pion::http::parser::finish_header_parsing().
|
inline |
returns true if the message is valid
Referenced by pion::http::parser::finish().
assignment operator
References m_first_line.
|
inline |
|
inlineprotected |
prepares HTTP headers for a send operation
keep_alive | true if the connection should be kept alive |
using_chunks | true if the payload content will be sent in chunks |
std::size_t pion::http::message::read | ( | std::istream & | in, |
boost::system::error_code & | ec, | ||
parser & | http_parser | ||
) |
reads a new message from a std::istream (blocks until finished)
in | std::istream to use |
ec | contains error code if the read fails |
http_parser | http parser object to use |
References pion::http::parser::check_premature_eof(), clear(), pion::http::parser::get_total_bytes_read(), pion::http::parser::parse(), and pion::http::parser::set_read_buffer().
Referenced by read().
std::size_t pion::http::message::read | ( | std::istream & | in, |
boost::system::error_code & | ec, | ||
bool | headers_only = false , |
||
std::size_t | max_content_length = static_cast<size_t>(-1) |
||
) |
reads a new message from a std::istream (blocks until finished)
in | std::istream to use |
ec | contains error code if the read fails |
headers_only | if true then only HTTP headers are read |
max_content_length | maximum number of content bytes received |
References pion::http::parser::parse_headers_only(), read(), and pion::http::parser::set_max_content_length().
std::size_t pion::http::message::receive | ( | tcp::connection & | tcp_conn, |
boost::system::error_code & | ec, | ||
parser & | http_parser | ||
) |
receives a new message from a TCP connection (blocks until finished)
tcp_conn | TCP connection to use |
ec | contains error code if the receive fails |
http_parser | http parser object to use |
References check_keep_alive(), pion::http::parser::check_premature_eof(), clear(), pion::http::parser::eof(), pion::http::parser::get_parse_headers_only(), pion::tcp::connection::get_pipelined(), pion::tcp::connection::get_read_buffer(), pion::http::parser::get_total_bytes_read(), pion::tcp::connection::LIFECYCLE_CLOSE, pion::tcp::connection::LIFECYCLE_KEEPALIVE, pion::tcp::connection::LIFECYCLE_PIPELINED, pion::http::parser::load_read_pos(), pion::tcp::connection::load_read_pos(), pion::http::parser::parse(), pion::tcp::connection::read_some(), pion::tcp::connection::save_read_pos(), pion::tcp::connection::set_lifecycle(), and pion::http::parser::set_read_buffer().
Referenced by receive().
std::size_t pion::http::message::receive | ( | tcp::connection & | tcp_conn, |
boost::system::error_code & | ec, | ||
bool | headers_only = false , |
||
std::size_t | max_content_length = static_cast<size_t>(-1) |
||
) |
receives a new message from a TCP connection (blocks until finished)
tcp_conn | TCP connection to use |
ec | contains error code if the receive fails |
headers_only | if true then only HTTP headers are received |
max_content_length | maximum number of content bytes received |
References pion::http::parser::parse_headers_only(), receive(), and pion::http::parser::set_max_content_length().
std::size_t pion::http::message::send | ( | tcp::connection & | tcp_conn, |
boost::system::error_code & | ec, | ||
bool | headers_only = false |
||
) |
sends the message over a TCP connection (blocks until finished)
tcp_conn | TCP connection to use |
ec | contains error code if the send fails |
headers_only | if true then only HTTP headers are sent |
References get_content(), get_content_length(), pion::tcp::connection::get_keep_alive(), prepare_buffers_for_send(), and pion::tcp::connection::write().
|
inline |
set to true if chunked transfer encodings are supported
Referenced by pion::http::response::update_request_info().
|
inline |
resets payload content to match the value of a string
|
inline |
sets the length of the payload content (in bytes)
Referenced by concatenate_chunks(), pion::http::parser::finish(), pion::http::parser::finish_header_parsing(), pion::http::request::set_content(), and pion::http::request::use_query_params_for_post_content().
|
inline |
sets the content type for the message payload
Referenced by pion::http::request::use_query_params_for_post_content().
|
inline |
Referenced by pion::http::parser::parse().
|
inline |
if called, the content-length will not be sent in the HTTP headers
|
inline |
sets whether or not the message is valid
Referenced by pion::http::reader::consume_bytes(), and pion::http::parser::finish().
|
inline |
set to true when missing packets detected
Referenced by pion::http::parser::parse_missing_data().
|
inline |
sets IP address of the remote endpoint
|
inline |
Referenced by pion::http::parser::compute_msg_status().
|
inline |
sets the major HTTP version number
Referenced by pion::http::parser::parse_headers(), and pion::http::response::update_request_info().
|
inline |
sets the minor HTTP version number
Referenced by pion::http::parser::parse_headers(), and pion::http::response::update_request_info().
|
inline |
sets the length of the payload content using the Content-Length header
References pion::test::trim().
Referenced by pion::http::parser::finish_header_parsing().
|
protectedpure virtual |
updates the string containing the first line for the HTTP message
Implemented in pion::http::response, and pion::http::request.
|
inline |
sets the transfer coding using the Transfer-Encoding header
Referenced by pion::http::parser::finish_header_parsing().
std::size_t pion::http::message::write | ( | std::ostream & | out, |
boost::system::error_code & | ec, | ||
bool | headers_only = false |
||
) |
writes the message to a std::ostream (blocks until finished)
out | std::ostream to use |
ec | contains error code if the write fails |
headers_only | if true then only HTTP headers are written |
References get_content(), get_content_length(), and prepare_buffers_for_send().
|
mutableprotected |
first line sent in an HTTP message (i.e. "GET / HTTP/1.1" for request, or "HTTP/1.1 200 OK" for response)
Referenced by operator=(), pion::http::request::update_first_line(), and pion::http::response::update_first_line().