httpxx 0.1
Streaming HTTP Parser for C++

http::Response Class Reference

Parser for HTTP responses. More...

#include <Response.hpp>

Inheritance diagram for http::Response:
http::Message

List of all members.

Public Member Functions

 Response ()
 Build a fresh, independant HTTP response parser.
int status () const
 Obtain the HTTP status code returned by the server.
void clear ()
 Empty all request content, but keep allocated buffers.
std::size_t feed (const void *data,::size_t size)
 Feed data to the parser.
std::size_t feed (const char *data,::size_t size)
 Feed data to the parser.
bool complete () const
 Check if the request has been completely parsed.
bool headerscomplete () const
 Check if the request headers have been completely parsed.
int majorversion () const
 Obtain the HTTP version used by the remote peer.
int minorversion () const
 Obtain the HTTP revision used by the remote peer.
const Flags flags () const
 Obtain parser flags.
bool hasheader (const std::string &field) const
 Check if the request included a header named field.
std::string header (const std::string &field) const
 Obtain the value of the header named field.
const std::string & body () const
 Obtain the entire request body.

Protected Attributes

::http_parser_settings mySettings
::http_parser myParser
std::string myCurrentField
std::string myCurrentValue
std::map< std::string,
std::string > 
myHeaders
std::string myBody
bool myComplete
bool myHeadersComplete

Detailed Description

Parser for HTTP responses.

Response objects are typically used on the "client" side of the HTTP connection. After you've sent an HTTP request to the server, feed incoming data to an object of this class.

Note:
This class is a response parser. It cannot be used to format outgoing responses.

For high performance applications, you'll probably need to watch out for memory usage. Response objects may be used to parse additional HTTP responses by using the clear() method. This ensures that allocate buffers are re-used instead of dumped. Reusing response objects will likely leed to faster parsing and reduced memory fragmentation in long running processes.

  http::Response response;
  // parse response.
  while (!response.complete()) {
    const int transferred = ::recv(socket, data, size, 0);
    if (transferred == 0) {
      break;
    }
    response.feed(data, transferred);
  }
  if (!response.complete()) {
    // ...
  }
  // process response.
  const std::string& contenttype = request.header("Content-Type");
  if (contenttype == "text/html") {
    // ...
  }
  // signal end of transfer.
  if (!(response.flags()&Flags::keepalive())) {
    ::shutdown(socket, SD_BOTH);
  }
  // prepare to process another response.
  response.clear();

Definition at line 60 of file Response.hpp.


Member Function Documentation

const std::string & http::Message::body ( ) const [inherited]

Obtain the entire request body.

Warning:
This value is undefined until complete() returns true.

Definition at line 155 of file Message.cpp.

std::size_t http::Message::feed ( const char *  data,
::size_t  size 
) [inherited]

Feed data to the parser.

Parameters:
dataAddress of first byte to read.
sizeNumber of bytes to read, starting at data.
Returns:
Number of bytes processed.
See also:
complete()

Definition at line 110 of file Message.cpp.

std::size_t http::Message::feed ( const void *  data,
::size_t  size 
) [inherited]

Feed data to the parser.

Parameters:
dataAddress of first byte to read.
sizeNumber of bytes to read, starting at data.
Returns:
Number of bytes processed.
See also:
complete()

Definition at line 105 of file Message.cpp.

const Flags http::Message::flags ( ) const [inherited]

Obtain parser flags.

Returns:
Flags documenting the parsed request/response object.

Definition at line 135 of file Message.cpp.

bool http::Message::hasheader ( const std::string &  field) const [inherited]

Check if the request included a header named field.

Parameters:
fieldName of header to check.
Warning:
This value is unspecified until headerscomplete() returns true.

Definition at line 140 of file Message.cpp.

std::string http::Message::header ( const std::string &  field) const [inherited]

Obtain the value of the header named field.

Parameters:
fieldName of header to check.
Returns:
An empty string if the header was not present, the header value otherwise.
Warning:
This value is unspecified until headerscomplete() returns true.

Definition at line 146 of file Message.cpp.

int http::Message::majorversion ( ) const [inherited]

Obtain the HTTP version used by the remote peer.

Returns:
A numeric error code (should be 1 for now).
int http::Message::minorversion ( ) const [inherited]

Obtain the HTTP revision used by the remote peer.

Returns:
A numeric error code (should be 0 or 1 for now).

Definition at line 130 of file Message.cpp.

int http::Response::status ( ) const

Obtain the HTTP status code returned by the server.

Returns:
Numeric HTTP status code.
Note:
200 is not the only valid response code. Make sure to read the HTTP specification to learn how to interpret this value correctly.

Definition at line 20 of file Response.cpp.


The documentation for this class was generated from the following files:
 All Classes Functions