Changeset View
Changeset View
Standalone View
Standalone View
src/support/events.h
Show All 19 Lines | #define MAKE_RAII(type) \ | ||||
typedef std::unique_ptr<struct type, type##_deleter> raii_##type | typedef std::unique_ptr<struct type, type##_deleter> raii_##type | ||||
MAKE_RAII(event_base); | MAKE_RAII(event_base); | ||||
MAKE_RAII(event); | MAKE_RAII(event); | ||||
MAKE_RAII(evhttp); | 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()) throw std::runtime_error("cannot create event_base"); | if (!result.get()) { | ||||
throw std::runtime_error("cannot create event_base"); | |||||
} | |||||
return result; | return result; | ||||
} | } | ||||
raii_event obtain_event(struct event_base *base, evutil_socket_t s, | inline raii_event obtain_event(struct event_base *base, evutil_socket_t s, | ||||
short events, event_callback_fn cb, void *arg) { | 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 | inline raii_evhttp_request | ||||
obtain_evhttp_request(void (*cb)(struct evhttp_request *, void *), void *arg) { | 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, | inline raii_evhttp_connection | ||||
std::string host, | obtain_evhttp_connection_base(struct event_base *base, std::string host, | ||||
uint16_t port) { | uint16_t port) { | ||||
auto result = raii_evhttp_connection( | auto result = raii_evhttp_connection( | ||||
evhttp_connection_base_new(base, nullptr, host.c_str(), port)); | evhttp_connection_base_new(base, nullptr, host.c_str(), port)); | ||||
if (!result.get()) throw std::runtime_error("create connection failed"); | if (!result.get()) { | ||||
throw std::runtime_error("create connection failed"); | |||||
} | |||||
return result; | return result; | ||||
} | } | ||||
#endif // BITCOIN_SUPPORT_EVENTS_H | #endif // BITCOIN_SUPPORT_EVENTS_H |