Fabcoin Core  0.16.2
P2P Digital Currency
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
HTTPRequest Class Reference

In-flight HTTP request. More...

#include <httpserver.h>

Public Types

enum  RequestMethod {
  UNKNOWN, GET, POST, HEAD,
  PUT
}
 

Public Member Functions

 HTTPRequest (struct evhttp_request *req)
 
 ~HTTPRequest ()
 
void setConnClosed ()
 
bool isConnClosed ()
 
bool isChunkMode ()
 
std::string GetURI ()
 Get requested URI. More...
 
CService GetPeer ()
 Get CService (address:ip) for the origin of the http request. More...
 
RequestMethod GetRequestMethod ()
 Get request method. More...
 
std::pair< bool, std::string > GetHeader (const std::string &hdr)
 Get the request header specified by hdr, or an empty string. More...
 
std::string ReadBody ()
 Read request body. More...
 
void WriteHeader (const std::string &hdr, const std::string &value)
 Write output header. More...
 
void WriteReply (int nStatus, const std::string &strReply="")
 Write HTTP reply. More...
 
void Chunk (const std::string &chunk)
 Start chunk transfer. More...
 
void ChunkEnd ()
 End chunk transfer. More...
 
bool ReplySent ()
 Is reply sent? More...
 

Private Member Functions

void startDetectClientClose ()
 
void waitClientClose ()
 

Private Attributes

struct evhttp_request * req
 
bool replySent
 
bool startedChunkTransfer
 
bool connClosed
 
std::mutex cs
 
std::condition_variable closeCv
 

Detailed Description

In-flight HTTP request.

Thin C++ wrapper around evhttp_request.

Definition at line 59 of file httpserver.h.

Member Enumeration Documentation

Enumerator
UNKNOWN 
GET 
POST 
HEAD 
PUT 

Definition at line 77 of file httpserver.h.

Constructor & Destructor Documentation

HTTPRequest::HTTPRequest ( struct evhttp_request *  req)

Definition at line 553 of file httpserver.cpp.

HTTPRequest::~HTTPRequest ( )

Definition at line 559 of file httpserver.cpp.

Here is the call graph for this function:

Member Function Documentation

void HTTPRequest::Chunk ( const std::string &  chunk)

Start chunk transfer.

Assume to be 200.

Definition at line 689 of file httpserver.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void HTTPRequest::ChunkEnd ( )

End chunk transfer.

Definition at line 671 of file httpserver.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

std::pair< bool, std::string > HTTPRequest::GetHeader ( const std::string &  hdr)

Get the request header specified by hdr, or an empty string.

Return a pair (isPresent,string).

Definition at line 629 of file httpserver.cpp.

Here is the call graph for this function:

CService HTTPRequest::GetPeer ( )

Get CService (address:ip) for the origin of the http request.

Definition at line 746 of file httpserver.cpp.

Here is the call graph for this function:

HTTPRequest::RequestMethod HTTPRequest::GetRequestMethod ( )

Get request method.

Definition at line 765 of file httpserver.cpp.

std::string HTTPRequest::GetURI ( )

Get requested URI.

Definition at line 760 of file httpserver.cpp.

bool HTTPRequest::isChunkMode ( )

Definition at line 625 of file httpserver.cpp.

bool HTTPRequest::isConnClosed ( )

Definition at line 620 of file httpserver.cpp.

Here is the caller graph for this function:

std::string HTTPRequest::ReadBody ( )

Read request body.

Note
As this consumes the underlying buffer, call this only once. Repeated calls will return an empty string.

Trivial implementation: if this is ever a performance bottleneck, internal copying can be avoided in multi-segment buffers by using evbuffer_peek and an awkward loop. Though in that case, it'd be even better to not copy into an intermediate string but use a stream abstraction to consume the evbuffer on the fly in the parsing algorithm.

Definition at line 640 of file httpserver.cpp.

Here is the caller graph for this function:

bool HTTPRequest::ReplySent ( )

Is reply sent?

Definition at line 660 of file httpserver.cpp.

void HTTPRequest::setConnClosed ( )

Definition at line 614 of file httpserver.cpp.

void HTTPRequest::startDetectClientClose ( )
private

Definition at line 587 of file httpserver.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void HTTPRequest::waitClientClose ( )
private

Definition at line 569 of file httpserver.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void HTTPRequest::WriteHeader ( const std::string &  hdr,
const std::string &  value 
)

Write output header.

Note
call this before calling WriteErrorReply or Reply.

Definition at line 664 of file httpserver.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void HTTPRequest::WriteReply ( int  nStatus,
const std::string &  strReply = "" 
)

Write HTTP reply.

Closure sent to main thread to request a reply to be sent to a HTTP request.

nStatus is the HTTP status code to send. strReply is the body of the reply. Keep it empty to send a standard message.

Note
Can be called only once. As this will give the request back to the main thread, do not call any other HTTPRequest methods after calling this.

Replies must be sent in the main loop in the main http thread, this cannot be done from worker threads.

Definition at line 719 of file httpserver.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

std::condition_variable HTTPRequest::closeCv
private

Definition at line 68 of file httpserver.h.

bool HTTPRequest::connClosed
private

Definition at line 65 of file httpserver.h.

std::mutex HTTPRequest::cs
private

Definition at line 67 of file httpserver.h.

bool HTTPRequest::replySent
private

Definition at line 63 of file httpserver.h.

struct evhttp_request* HTTPRequest::req
private

Definition at line 62 of file httpserver.h.

bool HTTPRequest::startedChunkTransfer
private

Definition at line 64 of file httpserver.h.


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