mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 21:12:48 +01:00
Merge #9517: [refactor] Switched httpserver.cpp to use RAII wrapped libevents.
1ae86ec
Changed event RAII helper functions to inline to deal with duplicate symbol linker errors. (Karl-Johan Alm)fd369d2
Switched httpserver.cpp to use RAII wrapped libevents. (Kalle Alm) Tree-SHA512: 877e431f211024d42a3b0800e860e02833398611433e8393f8d5d4970f47f4bd670b900443678c067fec110c087aaab7dc1981ccbf17f6057676fdbbda89aed9
This commit is contained in:
parent
1c4981d719
commit
31f4a602a5
@ -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;
|
||||||
|
|
||||||
@ -397,17 +394,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,8 +411,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -428,8 +419,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,26 +27,26 @@ MAKE_RAII(evhttp);
|
|||||||
MAKE_RAII(evhttp_request);
|
MAKE_RAII(evhttp_request);
|
||||||
MAKE_RAII(evhttp_connection);
|
MAKE_RAII(evhttp_connection);
|
||||||
|
|
||||||
raii_event_base obtain_event_base() {
|
inline raii_event_base obtain_event_base() {
|
||||||
auto result = raii_event_base(event_base_new());
|
auto result = raii_event_base(event_base_new());
|
||||||
if (!result.get())
|
if (!result.get())
|
||||||
throw std::runtime_error("cannot create event_base");
|
throw std::runtime_error("cannot create event_base");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
raii_event obtain_event(struct event_base* base, evutil_socket_t s, short events, event_callback_fn cb, void* arg) {
|
inline raii_event obtain_event(struct event_base* base, evutil_socket_t s, short events, event_callback_fn cb, void* arg) {
|
||||||
return raii_event(event_new(base, s, events, cb, arg));
|
return raii_event(event_new(base, s, events, cb, arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
raii_evhttp obtain_evhttp(struct event_base* base) {
|
inline raii_evhttp obtain_evhttp(struct event_base* base) {
|
||||||
return raii_evhttp(evhttp_new(base));
|
return raii_evhttp(evhttp_new(base));
|
||||||
}
|
}
|
||||||
|
|
||||||
raii_evhttp_request obtain_evhttp_request(void(*cb)(struct evhttp_request *, void *), void *arg) {
|
inline raii_evhttp_request obtain_evhttp_request(void(*cb)(struct evhttp_request *, void *), void *arg) {
|
||||||
return raii_evhttp_request(evhttp_request_new(cb, arg));
|
return raii_evhttp_request(evhttp_request_new(cb, arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
raii_evhttp_connection obtain_evhttp_connection_base(struct event_base* base, std::string host, uint16_t port) {
|
inline raii_evhttp_connection obtain_evhttp_connection_base(struct event_base* base, std::string host, uint16_t port) {
|
||||||
auto result = raii_evhttp_connection(evhttp_connection_base_new(base, NULL, host.c_str(), port));
|
auto result = raii_evhttp_connection(evhttp_connection_base_new(base, NULL, host.c_str(), port));
|
||||||
if (!result.get())
|
if (!result.get())
|
||||||
throw std::runtime_error("create connection failed");
|
throw std::runtime_error("create connection failed");
|
||||||
|
Loading…
Reference in New Issue
Block a user