|
|
@ -21,13 +21,13 @@ |
|
|
|
#include <signal.h> |
|
|
|
#include <signal.h> |
|
|
|
#include <future> |
|
|
|
#include <future> |
|
|
|
|
|
|
|
|
|
|
|
#include <event2/event.h> |
|
|
|
|
|
|
|
#include <event2/http.h> |
|
|
|
|
|
|
|
#include <event2/thread.h> |
|
|
|
#include <event2/thread.h> |
|
|
|
#include <event2/buffer.h> |
|
|
|
#include <event2/buffer.h> |
|
|
|
#include <event2/util.h> |
|
|
|
#include <event2/util.h> |
|
|
|
#include <event2/keyvalq_struct.h> |
|
|
|
#include <event2/keyvalq_struct.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "support/events.h" |
|
|
|
|
|
|
|
|
|
|
|
#ifdef EVENT__HAVE_NETINET_IN_H |
|
|
|
#ifdef EVENT__HAVE_NETINET_IN_H |
|
|
|
#include <netinet/in.h> |
|
|
|
#include <netinet/in.h> |
|
|
|
#ifdef _XOPEN_SOURCE_EXTENDED |
|
|
|
#ifdef _XOPEN_SOURCE_EXTENDED |
|
|
@ -369,9 +369,6 @@ static void libevent_log_cb(int severity, const char *msg) |
|
|
|
|
|
|
|
|
|
|
|
bool InitHTTPServer() |
|
|
|
bool InitHTTPServer() |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct evhttp* http = 0; |
|
|
|
|
|
|
|
struct event_base* base = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!InitHTTPAllowList()) |
|
|
|
if (!InitHTTPAllowList()) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
@ -398,17 +395,13 @@ bool InitHTTPServer() |
|
|
|
evthread_use_pthreads(); |
|
|
|
evthread_use_pthreads(); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
base = event_base_new(); // XXX RAII
|
|
|
|
raii_event_base base_ctr = obtain_event_base(); |
|
|
|
if (!base) { |
|
|
|
|
|
|
|
LogPrintf("Couldn't create an event_base: exiting\n"); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Create a new evhttp object to handle requests. */ |
|
|
|
/* Create a new evhttp object to handle requests. */ |
|
|
|
http = evhttp_new(base); // XXX RAII
|
|
|
|
raii_evhttp http_ctr = obtain_evhttp(base_ctr.get()); |
|
|
|
|
|
|
|
struct evhttp* http = http_ctr.get(); |
|
|
|
if (!http) { |
|
|
|
if (!http) { |
|
|
|
LogPrintf("couldn't create evhttp. Exiting.\n"); |
|
|
|
LogPrintf("couldn't create evhttp. Exiting.\n"); |
|
|
|
event_base_free(base); |
|
|
|
|
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -419,8 +412,6 @@ bool InitHTTPServer() |
|
|
|
|
|
|
|
|
|
|
|
if (!HTTPBindAddresses(http)) { |
|
|
|
if (!HTTPBindAddresses(http)) { |
|
|
|
LogPrintf("Unable to bind any endpoint for RPC server\n"); |
|
|
|
LogPrintf("Unable to bind any endpoint for RPC server\n"); |
|
|
|
evhttp_free(http); |
|
|
|
|
|
|
|
event_base_free(base); |
|
|
|
|
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -429,8 +420,9 @@ bool InitHTTPServer() |
|
|
|
LogPrintf("HTTP: creating work queue of depth %d\n", workQueueDepth); |
|
|
|
LogPrintf("HTTP: creating work queue of depth %d\n", workQueueDepth); |
|
|
|
|
|
|
|
|
|
|
|
workQueue = new WorkQueue<HTTPClosure>(workQueueDepth); |
|
|
|
workQueue = new WorkQueue<HTTPClosure>(workQueueDepth); |
|
|
|
eventBase = base; |
|
|
|
// tranfer ownership to eventBase/HTTP via .release()
|
|
|
|
eventHTTP = http; |
|
|
|
eventBase = base_ctr.release(); |
|
|
|
|
|
|
|
eventHTTP = http_ctr.release(); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|