Dash Core  0.12.2.1
P2P Digital Currency
HTTPRequest Class Reference

#include <httpserver.h>

Public Types

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

Public Member Functions

 HTTPRequest (struct evhttp_request *req)
 
 ~HTTPRequest ()
 
std::string GetURI ()
 
CService GetPeer ()
 
RequestMethod GetRequestMethod ()
 
std::pair< bool, std::string > GetHeader (const std::string &hdr)
 
std::string ReadBody ()
 
void WriteHeader (const std::string &hdr, const std::string &value)
 
void WriteReply (int nStatus, const std::string &strReply="")
 

Private Attributes

struct evhttp_request * req
 
bool replySent
 

Detailed Description

In-flight HTTP request. Thin C++ wrapper around evhttp_request.

Definition at line 55 of file httpserver.h.

Member Enumeration Documentation

◆ RequestMethod

Enumerator
UNKNOWN 
GET 
POST 
HEAD 
PUT 

Definition at line 65 of file httpserver.h.

Constructor & Destructor Documentation

◆ HTTPRequest()

HTTPRequest::HTTPRequest ( struct evhttp_request *  req)

Definition at line 554 of file httpserver.cpp.

◆ ~HTTPRequest()

HTTPRequest::~HTTPRequest ( )

Definition at line 558 of file httpserver.cpp.

Member Function Documentation

◆ GetHeader()

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

Get the request header specified by hdr, or an empty string. Return an pair (isPresent,string).

Definition at line 568 of file httpserver.cpp.

Referenced by HTTPReq_JSONRPC().

◆ GetPeer()

CService HTTPRequest::GetPeer ( )

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

Definition at line 625 of file httpserver.cpp.

Referenced by HTTPReq_JSONRPC().

◆ GetRequestMethod()

HTTPRequest::RequestMethod HTTPRequest::GetRequestMethod ( )

Get request method.

Definition at line 644 of file httpserver.cpp.

Referenced by HTTPReq_JSONRPC().

◆ GetURI()

std::string HTTPRequest::GetURI ( )

Get requested URI.

Definition at line 639 of file httpserver.cpp.

◆ ReadBody()

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 579 of file httpserver.cpp.

Referenced by HTTPReq_JSONRPC(), and rest_getutxos().

◆ WriteHeader()

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 599 of file httpserver.cpp.

Referenced by HTTPReq_JSONRPC(), JSONErrorReply(), rest_block(), rest_chaininfo(), rest_getutxos(), rest_headers(), rest_mempool_contents(), rest_mempool_info(), rest_tx(), and RESTERR().

◆ WriteReply()

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

Write HTTP reply. 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.

Closure sent to main thread to request a reply to be sent to a HTTP request. Replies must be sent in the main loop in the main http thread, this cannot be done from worker threads.

Definition at line 611 of file httpserver.cpp.

Referenced by HTTPReq_JSONRPC(), JSONErrorReply(), rest_block(), rest_chaininfo(), rest_getutxos(), rest_headers(), rest_mempool_contents(), rest_mempool_info(), rest_tx(), RESTERR(), and ~HTTPRequest().

Member Data Documentation

◆ replySent

bool HTTPRequest::replySent
private

Definition at line 59 of file httpserver.h.

Referenced by WriteReply(), and ~HTTPRequest().

◆ req

struct evhttp_request* HTTPRequest::req
private

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