1 // Copyright (c) 2016 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 #ifndef BITCOIN_SUPPORT_EVENTS_H
6 #define BITCOIN_SUPPORT_EVENTS_H
11 #include <event2/event.h>
12 #include <event2/http.h>
14 #define MAKE_RAII(type) \
16 struct type##_deleter {\
17 void operator()(struct type* ob) {\
21 /* unique ptr typedef */\
22 typedef std::unique_ptr<struct type, type##_deleter> raii_##type
24 MAKE_RAII(event_base
);
27 MAKE_RAII(evhttp_request
);
28 MAKE_RAII(evhttp_connection
);
30 inline raii_event_base
obtain_event_base() {
31 auto result
= raii_event_base(event_base_new());
33 throw std::runtime_error("cannot create event_base");
37 inline raii_event
obtain_event(struct event_base
* base
, evutil_socket_t s
, short events
, event_callback_fn cb
, void* arg
) {
38 return raii_event(event_new(base
, s
, events
, cb
, arg
));
41 inline raii_evhttp
obtain_evhttp(struct event_base
* base
) {
42 return raii_evhttp(evhttp_new(base
));
45 inline raii_evhttp_request
obtain_evhttp_request(void(*cb
)(struct evhttp_request
*, void *), void *arg
) {
46 return raii_evhttp_request(evhttp_request_new(cb
, arg
));
49 inline raii_evhttp_connection
obtain_evhttp_connection_base(struct event_base
* base
, std::string host
, uint16_t port
) {
50 auto result
= raii_evhttp_connection(evhttp_connection_base_new(base
, nullptr, host
.c_str(), port
));
52 throw std::runtime_error("create connection failed");
56 #endif // BITCOIN_SUPPORT_EVENTS_H