Bitcoin
Classes | Macros | Functions | Variables
httpserver.cpp File Reference
#include <httpserver.h>
#include <chainparamsbase.h>
#include <compat.h>
#include <util/threadnames.h>
#include <util/system.h>
#include <util/strencodings.h>
#include <netbase.h>
#include <rpc/protocol.h>
#include <shutdown.h>
#include <sync.h>
#include <ui_interface.h>
#include <memory>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>
#include <event2/thread.h>
#include <event2/buffer.h>
#include <event2/bufferevent.h>
#include <event2/util.h>
#include <event2/keyvalq_struct.h>
#include <support/events.h>

Classes

class  HTTPWorkItem
 
class  WorkQueue< WorkItem >
 
struct  HTTPPathHandler
 

Macros

#define EVENT_LOG_WARN   _EVENT_LOG_WARN
 

Functions

static bool ClientAllowed (const CNetAddr &netaddr)
 
static bool InitHTTPAllowList ()
 
static std::string RequestMethodString (HTTPRequest::RequestMethod m)
 
static void http_request_cb (struct evhttp_request *req, void *arg)
 
static void http_reject_request_cb (struct evhttp_request *req, void *)
 
static bool ThreadHTTP (struct event_base *base)
 
static bool HTTPBindAddresses (struct evhttp *http)
 
static void HTTPWorkQueueRun (WorkQueue< HTTPClosure > *queue, int worker_num)
 
static void libevent_log_cb (int severity, const char *msg)
 
bool InitHTTPServer ()
 
bool UpdateHTTPServerLogging (bool enable)
 
void StartHTTPServer ()
 
void InterruptHTTPServer ()
 
void StopHTTPServer ()
 
struct event_base * EventBase ()
 
static void httpevent_callback_fn (evutil_socket_t, short, void *data)
 
void RegisterHTTPHandler (const std::string &prefix, bool exactMatch, const HTTPRequestHandler &handler)
 
void UnregisterHTTPHandler (const std::string &prefix, bool exactMatch)
 

Variables

static const size_t MAX_HEADERS_SIZE = 8192
 
static struct event_base * eventBase = nullptr
 libevent event loop More...
 
static struct evhttp * eventHTTP = nullptr
 HTTP server. More...
 
static std::vector< CSubNetrpc_allow_subnets
 List of subnets to allow RPC connections from. More...
 
static WorkQueue< HTTPClosure > * workQueue = nullptr
 Work queue for handling longer requests off the event loop thread. More...
 
static std::vector< HTTPPathHandlerpathHandlers
 Handlers for (sub)paths. More...
 
static std::vector< evhttp_bound_socket * > boundSockets
 Bound listening sockets. More...
 
static std::thread threadHTTP
 
static std::vector< std::thread > g_thread_http_workers
 

Macro Definition Documentation

◆ EVENT_LOG_WARN

#define EVENT_LOG_WARN   _EVENT_LOG_WARN

Function Documentation

◆ ClientAllowed()

static bool ClientAllowed ( const CNetAddr netaddr)
static

Check if a network address is allowed to access the HTTP server

◆ EventBase()

struct event_base* EventBase ( )

Return evhttp event base. This can be used by submodules to queue timers or custom events.

◆ http_reject_request_cb()

static void http_reject_request_cb ( struct evhttp_request *  req,
void *   
)
static

Callback to reject HTTP requests after shutdown.

◆ http_request_cb()

static void http_request_cb ( struct evhttp_request *  req,
void *  arg 
)
static

HTTP request callback

◆ HTTPBindAddresses()

static bool HTTPBindAddresses ( struct evhttp *  http)
static

Bind HTTP server to specified addresses

◆ httpevent_callback_fn()

static void httpevent_callback_fn ( evutil_socket_t  ,
short  ,
void *  data 
)
static

◆ HTTPWorkQueueRun()

static void HTTPWorkQueueRun ( WorkQueue< HTTPClosure > *  queue,
int  worker_num 
)
static

Simple wrapper to set thread name and run work queue

◆ InitHTTPAllowList()

static bool InitHTTPAllowList ( )
static

Initialize ACL list for HTTP server

◆ InitHTTPServer()

bool InitHTTPServer ( )

Initialize HTTP server. Call this before RegisterHTTPHandler or EventBase().

◆ InterruptHTTPServer()

void InterruptHTTPServer ( )

Interrupt HTTP server threads

◆ libevent_log_cb()

static void libevent_log_cb ( int  severity,
const char *  msg 
)
static

libevent event log callback

◆ RegisterHTTPHandler()

void RegisterHTTPHandler ( const std::string &  prefix,
bool  exactMatch,
const HTTPRequestHandler handler 
)

Register handler for prefix. If multiple handlers match a prefix, the first-registered one will be invoked.

◆ RequestMethodString()

static std::string RequestMethodString ( HTTPRequest::RequestMethod  m)
static

HTTP request method as string - use for logging only

◆ StartHTTPServer()

void StartHTTPServer ( )

Start HTTP server. This is separate from InitHTTPServer to give users race-condition-free time to register their handlers between InitHTTPServer and StartHTTPServer.

◆ StopHTTPServer()

void StopHTTPServer ( )

Stop HTTP server

◆ ThreadHTTP()

static bool ThreadHTTP ( struct event_base *  base)
static

Event dispatcher thread

◆ UnregisterHTTPHandler()

void UnregisterHTTPHandler ( const std::string &  prefix,
bool  exactMatch 
)

Unregister handler for prefix

◆ UpdateHTTPServerLogging()

bool UpdateHTTPServerLogging ( bool  enable)

Change logging level for libevent. Removes BCLog::LIBEVENT from log categories if libevent doesn't support debug logging.

Variable Documentation

◆ boundSockets

std::vector<evhttp_bound_socket *> boundSockets
static

Bound listening sockets.

◆ eventBase

struct event_base* eventBase = nullptr
static

libevent event loop

HTTP module state

◆ eventHTTP

struct evhttp* eventHTTP = nullptr
static

HTTP server.

◆ g_thread_http_workers

std::vector<std::thread> g_thread_http_workers
static

◆ MAX_HEADERS_SIZE

const size_t MAX_HEADERS_SIZE = 8192
static

Maximum size of http request (request line + headers)

◆ pathHandlers

std::vector<HTTPPathHandler> pathHandlers
static

Handlers for (sub)paths.

◆ rpc_allow_subnets

std::vector<CSubNet> rpc_allow_subnets
static

List of subnets to allow RPC connections from.

◆ threadHTTP

std::thread threadHTTP
static

◆ workQueue

WorkQueue<HTTPClosure>* workQueue = nullptr
static

Work queue for handling longer requests off the event loop thread.