- refresh libevent libraries

This commit is contained in:
Dmytro Bogovych 2020-03-19 17:52:34 +02:00
parent 76156ca5f7
commit cdf8b0972e
20 changed files with 237 additions and 80 deletions

View File

@ -90,9 +90,10 @@ typedef void (*evbuffer_cb)(struct evbuffer *buffer, size_t old_len, size_t new_
@param cb the callback function to invoke when the evbuffer is modified, @param cb the callback function to invoke when the evbuffer is modified,
or NULL to remove all callbacks. or NULL to remove all callbacks.
@param cbarg an argument to be provided to the callback function @param cbarg an argument to be provided to the callback function
@return 0 if successful, or -1 on error
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
void evbuffer_setcb(struct evbuffer *buffer, evbuffer_cb cb, void *cbarg); int evbuffer_setcb(struct evbuffer *buffer, evbuffer_cb cb, void *cbarg);
/** /**

View File

@ -491,7 +491,7 @@ short bufferevent_get_enabled(struct bufferevent *bufev);
(In other words, if reading or writing is disabled, or if the (In other words, if reading or writing is disabled, or if the
bufferevent's read or write operation has been suspended because bufferevent's read or write operation has been suspended because
there's no data to write, or not enough banwidth, or so on, the there's no data to write, or not enough bandwidth, or so on, the
timeout isn't active. The timeout only becomes active when we we're timeout isn't active. The timeout only becomes active when we we're
willing to actually read or write.) willing to actually read or write.)
@ -518,6 +518,9 @@ int bufferevent_set_timeouts(struct bufferevent *bufev,
On input, a bufferevent does not invoke the user read callback unless On input, a bufferevent does not invoke the user read callback unless
there is at least low watermark data in the buffer. If the read buffer there is at least low watermark data in the buffer. If the read buffer
is beyond the high watermark, the bufferevent stops reading from the network. is beyond the high watermark, the bufferevent stops reading from the network.
But be aware that bufferevent input/read buffer can overrun high watermark
limit (typical example is openssl bufferevent), so you should not relay in
this.
On output, the user write callback is invoked whenever the buffered data On output, the user write callback is invoked whenever the buffered data
falls below the low watermark. Filters that write to this bufev will try falls below the low watermark. Filters that write to this bufev will try
@ -566,7 +569,7 @@ void bufferevent_unlock(struct bufferevent *bufev);
/** /**
* Public interface to manually increase the reference count of a bufferevent * Public interface to manually increase the reference count of a bufferevent
* this is useful in situations where a user may reference the bufferevent * this is useful in situations where a user may reference the bufferevent
* somewhere eles (unknown to libevent) * somewhere else (unknown to libevent)
* *
* @param bufev the bufferevent to increase the refcount on * @param bufev the bufferevent to increase the refcount on
* *
@ -799,7 +802,7 @@ void ev_token_bucket_cfg_free(struct ev_token_bucket_cfg *cfg);
They are: socket-based bufferevents (normal and IOCP-based), and SSL-based They are: socket-based bufferevents (normal and IOCP-based), and SSL-based
bufferevents. bufferevents.
Return 0 on sucess, -1 on failure. Return 0 on success, -1 on failure.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int bufferevent_set_rate_limit(struct bufferevent *bev, int bufferevent_set_rate_limit(struct bufferevent *bev,
@ -850,7 +853,7 @@ int bufferevent_rate_limit_group_set_cfg(
The default min-share is currently 64 bytes. The default min-share is currently 64 bytes.
Returns 0 on success, -1 on faulre. Returns 0 on success, -1 on failure.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int bufferevent_rate_limit_group_set_min_share( int bufferevent_rate_limit_group_set_min_share(

View File

@ -28,6 +28,8 @@
#ifndef EVENT2_BUFFEREVENT_COMPAT_H_INCLUDED_ #ifndef EVENT2_BUFFEREVENT_COMPAT_H_INCLUDED_
#define EVENT2_BUFFEREVENT_COMPAT_H_INCLUDED_ #define EVENT2_BUFFEREVENT_COMPAT_H_INCLUDED_
#include <event2/visibility.h>
#define evbuffercb bufferevent_data_cb #define evbuffercb bufferevent_data_cb
#define everrorcb bufferevent_event_cb #define everrorcb bufferevent_event_cb
@ -72,6 +74,7 @@
error occurred error occurred
@see bufferevent_base_set(), bufferevent_free() @see bufferevent_base_set(), bufferevent_free()
*/ */
EVENT2_EXPORT_SYMBOL
struct bufferevent *bufferevent_new(evutil_socket_t fd, struct bufferevent *bufferevent_new(evutil_socket_t fd,
evbuffercb readcb, evbuffercb writecb, everrorcb errorcb, void *cbarg); evbuffercb readcb, evbuffercb writecb, everrorcb errorcb, void *cbarg);
@ -83,6 +86,7 @@ struct bufferevent *bufferevent_new(evutil_socket_t fd,
@param timeout_read the read timeout @param timeout_read the read timeout
@param timeout_write the write timeout @param timeout_write the write timeout
*/ */
EVENT2_EXPORT_SYMBOL
void bufferevent_settimeout(struct bufferevent *bufev, void bufferevent_settimeout(struct bufferevent *bufev,
int timeout_read, int timeout_write); int timeout_read, int timeout_write);

View File

@ -179,11 +179,39 @@ extern "C" {
#define DNS_QUERY_NO_SEARCH 1 #define DNS_QUERY_NO_SEARCH 1
/* Allow searching */
#define DNS_OPTION_SEARCH 1 #define DNS_OPTION_SEARCH 1
/* Parse "nameserver" and add default if no such section */
#define DNS_OPTION_NAMESERVERS 2 #define DNS_OPTION_NAMESERVERS 2
/* Parse additional options like:
* - timeout:
* - getaddrinfo-allow-skew:
* - max-timeouts:
* - max-inflight:
* - attempts:
* - randomize-case:
* - initial-probe-timeout:
*/
#define DNS_OPTION_MISC 4 #define DNS_OPTION_MISC 4
/* Load hosts file (i.e. "/etc/hosts") */
#define DNS_OPTION_HOSTSFILE 8 #define DNS_OPTION_HOSTSFILE 8
#define DNS_OPTIONS_ALL 15 /**
* All above:
* - DNS_OPTION_SEARCH
* - DNS_OPTION_NAMESERVERS
* - DNS_OPTION_MISC
* - DNS_OPTION_HOSTSFILE
*/
#define DNS_OPTIONS_ALL ( \
DNS_OPTION_SEARCH | \
DNS_OPTION_NAMESERVERS | \
DNS_OPTION_MISC | \
DNS_OPTION_HOSTSFILE | \
0 \
)
/* Do not "default" nameserver (i.e. "127.0.0.1:53") if there is no nameservers
* in resolv.conf, (iff DNS_OPTION_NAMESERVERS is set) */
#define DNS_OPTION_NAMESERVERS_NO_DEFAULT 16
/* Obsolete name for DNS_QUERY_NO_SEARCH */ /* Obsolete name for DNS_QUERY_NO_SEARCH */
#define DNS_NO_SEARCH DNS_QUERY_NO_SEARCH #define DNS_NO_SEARCH DNS_QUERY_NO_SEARCH
@ -208,6 +236,10 @@ struct event_base;
/** Flag for evdns_base_new: Do not prevent the libevent event loop from /** Flag for evdns_base_new: Do not prevent the libevent event loop from
* exiting when we have no active dns requests. */ * exiting when we have no active dns requests. */
#define EVDNS_BASE_DISABLE_WHEN_INACTIVE 0x8000 #define EVDNS_BASE_DISABLE_WHEN_INACTIVE 0x8000
/** Flag for evdns_base_new: If EVDNS_BASE_INITIALIZE_NAMESERVERS isset, do not
* add default nameserver if there are no nameservers in resolv.conf
* @see DNS_OPTION_NAMESERVERS_NO_DEFAULT */
#define EVDNS_BASE_NAMESERVERS_NO_DEFAULT 0x10000
/** /**
Initialize the asynchronous DNS library. Initialize the asynchronous DNS library.
@ -218,7 +250,7 @@ struct event_base;
@param event_base the event base to associate the dns client with @param event_base the event base to associate the dns client with
@param flags any of EVDNS_BASE_INITIALIZE_NAMESERVERS| @param flags any of EVDNS_BASE_INITIALIZE_NAMESERVERS|
EVDNS_BASE_DISABLE_WHEN_INACTIVE EVDNS_BASE_DISABLE_WHEN_INACTIVE|EVDNS_BASE_NAMESERVERS_NO_DEFAULT
@return evdns_base object if successful, or NULL if an error occurred. @return evdns_base object if successful, or NULL if an error occurred.
@see evdns_base_free() @see evdns_base_free()
*/ */
@ -423,7 +455,8 @@ void evdns_cancel_request(struct evdns_base *base, struct evdns_request *req);
The currently available configuration options are: The currently available configuration options are:
ndots, timeout, max-timeouts, max-inflight, attempts, randomize-case, ndots, timeout, max-timeouts, max-inflight, attempts, randomize-case,
bind-to, initial-probe-timeout, getaddrinfo-allow-skew. bind-to, initial-probe-timeout, getaddrinfo-allow-skew,
so-rcvbuf, so-sndbuf.
In versions before Libevent 2.0.3-alpha, the option name needed to end with In versions before Libevent 2.0.3-alpha, the option name needed to end with
a colon. a colon.
@ -453,7 +486,7 @@ int evdns_base_set_option(struct evdns_base *base, const char *option, const cha
@param base the evdns_base to which to apply this operation @param base the evdns_base to which to apply this operation
@param flags any of DNS_OPTION_NAMESERVERS|DNS_OPTION_SEARCH|DNS_OPTION_MISC| @param flags any of DNS_OPTION_NAMESERVERS|DNS_OPTION_SEARCH|DNS_OPTION_MISC|
DNS_OPTION_HOSTSFILE|DNS_OPTIONS_ALL DNS_OPTION_HOSTSFILE|DNS_OPTIONS_ALL|DNS_OPTION_NAMESERVERS_NO_DEFAULT
@param filename the path to the resolv.conf file @param filename the path to the resolv.conf file
@return 0 if successful, or various positive error codes if an error @return 0 if successful, or various positive error codes if an error
occurred (see above) occurred (see above)
@ -478,6 +511,7 @@ int evdns_base_resolv_conf_parse(struct evdns_base *base, int flags, const char
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int evdns_base_load_hosts(struct evdns_base *base, const char *hosts_fname); int evdns_base_load_hosts(struct evdns_base *base, const char *hosts_fname);
#if defined(EVENT_IN_DOXYGEN_) || defined(_WIN32)
/** /**
Obtain nameserver information using the Windows API. Obtain nameserver information using the Windows API.
@ -488,7 +522,6 @@ int evdns_base_load_hosts(struct evdns_base *base, const char *hosts_fname);
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_resolv_conf_parse() @see evdns_resolv_conf_parse()
*/ */
#ifdef _WIN32
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int evdns_base_config_windows_nameservers(struct evdns_base *); int evdns_base_config_windows_nameservers(struct evdns_base *);
#define EVDNS_BASE_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED #define EVDNS_BASE_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED
@ -615,7 +648,8 @@ typedef void (*evdns_request_callback_fn_type)(struct evdns_server_request *, vo
@param callback A function to invoke whenever we get a DNS request @param callback A function to invoke whenever we get a DNS request
on the socket. on the socket.
@param user_data Data to pass to the callback. @param user_data Data to pass to the callback.
@return an evdns_server_port structure for this server port. @return an evdns_server_port structure for this server port or NULL if
an error occurred.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
struct evdns_server_port *evdns_add_server_port_with_base(struct event_base *base, evutil_socket_t socket, int flags, evdns_request_callback_fn_type callback, void *user_data); struct evdns_server_port *evdns_add_server_port_with_base(struct event_base *base, evutil_socket_t socket, int flags, evdns_request_callback_fn_type callback, void *user_data);

View File

@ -49,6 +49,7 @@ extern "C" {
/* For int types. */ /* For int types. */
#include <event2/util.h> #include <event2/util.h>
#include <event2/visibility.h>
/** /**
Initialize the asynchronous DNS library. Initialize the asynchronous DNS library.
@ -66,6 +67,7 @@ extern "C" {
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_shutdown() @see evdns_shutdown()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_init(void); int evdns_init(void);
struct evdns_base; struct evdns_base;
@ -76,6 +78,7 @@ struct evdns_base;
@deprecated This function is deprecated because use of the global @deprecated This function is deprecated because use of the global
evdns_base is error-prone. evdns_base is error-prone.
*/ */
EVENT2_EXPORT_SYMBOL
struct evdns_base *evdns_get_global_base(void); struct evdns_base *evdns_get_global_base(void);
/** /**
@ -93,6 +96,7 @@ struct evdns_base *evdns_get_global_base(void);
active requests will return DNS_ERR_SHUTDOWN. active requests will return DNS_ERR_SHUTDOWN.
@see evdns_init() @see evdns_init()
*/ */
EVENT2_EXPORT_SYMBOL
void evdns_shutdown(int fail_requests); void evdns_shutdown(int fail_requests);
/** /**
@ -109,6 +113,7 @@ void evdns_shutdown(int fail_requests);
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_nameserver_ip_add() @see evdns_nameserver_ip_add()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_nameserver_add(unsigned long int address); int evdns_nameserver_add(unsigned long int address);
/** /**
@ -126,6 +131,7 @@ int evdns_nameserver_add(unsigned long int address);
@return the number of configured nameservers @return the number of configured nameservers
@see evdns_nameserver_add() @see evdns_nameserver_add()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_count_nameservers(void); int evdns_count_nameservers(void);
/** /**
@ -140,6 +146,7 @@ int evdns_count_nameservers(void);
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_resume() @see evdns_resume()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_clear_nameservers_and_suspend(void); int evdns_clear_nameservers_and_suspend(void);
/** /**
@ -155,6 +162,7 @@ int evdns_clear_nameservers_and_suspend(void);
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_clear_nameservers_and_suspend() @see evdns_clear_nameservers_and_suspend()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_resume(void); int evdns_resume(void);
/** /**
@ -170,6 +178,7 @@ int evdns_resume(void);
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_nameserver_add() @see evdns_nameserver_add()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_nameserver_ip_add(const char *ip_as_string); int evdns_nameserver_ip_add(const char *ip_as_string);
/** /**
@ -186,6 +195,7 @@ int evdns_nameserver_ip_add(const char *ip_as_string);
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6() @see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_resolve_ipv4(const char *name, int flags, evdns_callback_type callback, void *ptr); int evdns_resolve_ipv4(const char *name, int flags, evdns_callback_type callback, void *ptr);
/** /**
@ -198,6 +208,7 @@ int evdns_resolve_ipv4(const char *name, int flags, evdns_callback_type callback
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6() @see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_resolve_ipv6(const char *name, int flags, evdns_callback_type callback, void *ptr); int evdns_resolve_ipv6(const char *name, int flags, evdns_callback_type callback, void *ptr);
struct in_addr; struct in_addr;
@ -217,6 +228,7 @@ struct in6_addr;
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_resolve_reverse_ipv6() @see evdns_resolve_reverse_ipv6()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_resolve_reverse(const struct in_addr *in, int flags, evdns_callback_type callback, void *ptr); int evdns_resolve_reverse(const struct in_addr *in, int flags, evdns_callback_type callback, void *ptr);
/** /**
@ -233,6 +245,7 @@ int evdns_resolve_reverse(const struct in_addr *in, int flags, evdns_callback_ty
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
@see evdns_resolve_reverse_ipv6() @see evdns_resolve_reverse_ipv6()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_resolve_reverse_ipv6(const struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr); int evdns_resolve_reverse_ipv6(const struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr);
/** /**
@ -251,6 +264,7 @@ int evdns_resolve_reverse_ipv6(const struct in6_addr *in, int flags, evdns_callb
@param flags Ignored. @param flags Ignored.
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_set_option(const char *option, const char *val, int flags); int evdns_set_option(const char *option, const char *val, int flags);
/** /**
@ -278,6 +292,7 @@ int evdns_set_option(const char *option, const char *val, int flags);
occurred (see above) occurred (see above)
@see resolv.conf(3), evdns_config_windows_nameservers() @see resolv.conf(3), evdns_config_windows_nameservers()
*/ */
EVENT2_EXPORT_SYMBOL
int evdns_resolv_conf_parse(int flags, const char *const filename); int evdns_resolv_conf_parse(int flags, const char *const filename);
/** /**
@ -287,6 +302,7 @@ int evdns_resolv_conf_parse(int flags, const char *const filename);
caller to specify which evdns_base it applies to. The recommended caller to specify which evdns_base it applies to. The recommended
function is evdns_base_search_clear(). function is evdns_base_search_clear().
*/ */
EVENT2_EXPORT_SYMBOL
void evdns_search_clear(void); void evdns_search_clear(void);
/** /**
@ -298,6 +314,7 @@ void evdns_search_clear(void);
@param domain the domain to be added to the search list @param domain the domain to be added to the search list
*/ */
EVENT2_EXPORT_SYMBOL
void evdns_search_add(const char *domain); void evdns_search_add(const char *domain);
/** /**
@ -312,6 +329,7 @@ void evdns_search_add(const char *domain);
@param ndots the new ndots parameter @param ndots the new ndots parameter
*/ */
EVENT2_EXPORT_SYMBOL
void evdns_search_ndots_set(const int ndots); void evdns_search_ndots_set(const int ndots);
/** /**
@ -322,9 +340,13 @@ void evdns_search_ndots_set(const int ndots);
function is evdns_add_server_port_with_base(). function is evdns_add_server_port_with_base().
*/ */
struct evdns_server_port *evdns_add_server_port(evutil_socket_t socket, int flags, evdns_request_callback_fn_type callback, void *user_data); EVENT2_EXPORT_SYMBOL
struct evdns_server_port *
evdns_add_server_port(evutil_socket_t socket, int flags,
evdns_request_callback_fn_type callback, void *user_data);
#ifdef _WIN32 #ifdef _WIN32
EVENT2_EXPORT_SYMBOL
int evdns_config_windows_nameservers(void); int evdns_config_windows_nameservers(void);
#define EVDNS_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED #define EVDNS_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED
#endif #endif

View File

@ -232,7 +232,7 @@ struct event_base
* *
* Generally, you can create events with event_new(), then make them * Generally, you can create events with event_new(), then make them
* pending with event_add(). As your event_base runs, it will run the * pending with event_add(). As your event_base runs, it will run the
* callbacks of an events whose conditions are triggered. When you * callbacks of an events whose conditions are triggered. When you no
* longer want the event, free it with event_free(). * longer want the event, free it with event_free().
* *
* In more depth: * In more depth:
@ -285,7 +285,7 @@ struct event
* There are many options that can be used to alter the behavior and * There are many options that can be used to alter the behavior and
* implementation of an event_base. To avoid having to pass them all in a * implementation of an event_base. To avoid having to pass them all in a
* complex many-argument constructor, we provide an abstract data type * complex many-argument constructor, we provide an abstract data type
* wrhere you set up configation information before passing it to * where you set up configuration information before passing it to
* event_base_new_with_config(). * event_base_new_with_config().
* *
* @see event_config_new(), event_config_free(), event_base_new_with_config(), * @see event_config_new(), event_config_free(), event_base_new_with_config(),
@ -632,7 +632,7 @@ int event_config_set_num_cpus_hint(struct event_config *cfg, int cpus);
/** /**
* Record an interval and/or a number of callbacks after which the event base * Record an interval and/or a number of callbacks after which the event base
* should check for new events. By default, the event base will run as many * should check for new events. By default, the event base will run as many
* events are as activated at the higest activated priority before checking * events are as activated at the highest activated priority before checking
* for new events. If you configure it by setting max_interval, it will check * for new events. If you configure it by setting max_interval, it will check
* the time after each callback, and not allow more than max_interval to * the time after each callback, and not allow more than max_interval to
* elapse before checking for new events. If you configure it by setting * elapse before checking for new events. If you configure it by setting
@ -692,10 +692,7 @@ EVENT2_EXPORT_SYMBOL
void event_base_free(struct event_base *); void event_base_free(struct event_base *);
/** /**
As event_free, but do not run finalizers. As event_base_free, but do not run finalizers.
THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES
BECOMES STABLE.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
void event_base_free_nofinalize(struct event_base *); void event_base_free_nofinalize(struct event_base *);
@ -944,9 +941,6 @@ int event_base_got_break(struct event_base *);
* To use this option safely, you may need to use event_finalize() or * To use this option safely, you may need to use event_finalize() or
* event_free_finalize() in order to safely tear down an event in a * event_free_finalize() in order to safely tear down an event in a
* multithreaded application. See those functions for more information. * multithreaded application. See those functions for more information.
*
* THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES
* BECOMES STABLE.
**/ **/
#define EV_FINALIZE 0x40 #define EV_FINALIZE 0x40
/** /**
@ -963,7 +957,9 @@ int event_base_got_break(struct event_base *);
/** /**
@name evtimer_* macros @name evtimer_* macros
Aliases for working with one-shot timer events */ Aliases for working with one-shot timer events
If you need EV_PERSIST timer use event_*() functions.
*/
/**@{*/ /**@{*/
#define evtimer_assign(ev, b, cb, arg) \ #define evtimer_assign(ev, b, cb, arg) \
event_assign((ev), (b), -1, 0, (cb), (arg)) event_assign((ev), (b), -1, 0, (cb), (arg))
@ -990,6 +986,20 @@ int event_base_got_break(struct event_base *);
#define evsignal_initialized(ev) event_initialized(ev) #define evsignal_initialized(ev) event_initialized(ev)
/**@}*/ /**@}*/
/**
@name evuser_* macros
Aliases for working with user-triggered events
If you need EV_PERSIST event use event_*() functions.
*/
/**@{*/
#define evuser_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg))
#define evuser_del(ev) event_del(ev)
#define evuser_pending(ev, tv) event_pending((ev), 0, (tv))
#define evuser_initialized(ev) event_initialized(ev)
#define evuser_trigger(ev) event_active((ev), 0, 0)
/**@}*/
/** /**
A callback function for an event. A callback function for an event.
@ -1029,7 +1039,7 @@ EVENT2_EXPORT_SYMBOL
void *event_self_cbarg(void); void *event_self_cbarg(void);
/** /**
Allocate and asssign a new event structure, ready to be added. Allocate and assign a new event structure, ready to be added.
The function event_new() returns a new event that can be used in The function event_new() returns a new event that can be used in
future calls to event_add() and event_del(). The fd and events future calls to event_add() and event_del(). The fd and events
@ -1055,10 +1065,10 @@ void *event_self_cbarg(void);
The EV_TIMEOUT flag has no effect here. The EV_TIMEOUT flag has no effect here.
It is okay to have multiple events all listening on the same fds; but It is okay to have multiple events all listening on the same fds; but
they must either all be edge-triggered, or all not be edge triggerd. they must either all be edge-triggered, or all not be edge triggered.
When the event becomes active, the event loop will run the provided When the event becomes active, the event loop will run the provided
callbuck function, with three arguments. The first will be the provided callback function, with three arguments. The first will be the provided
fd value. The second will be a bitfield of the events that triggered: fd value. The second will be a bitfield of the events that triggered:
EV_READ, EV_WRITE, or EV_SIGNAL. Here the EV_TIMEOUT flag indicates EV_READ, EV_WRITE, or EV_SIGNAL. Here the EV_TIMEOUT flag indicates
that a timeout occurred, and EV_ET indicates that an edge-triggered that a timeout occurred, and EV_ET indicates that an edge-triggered
@ -1073,7 +1083,7 @@ void *event_self_cbarg(void);
@param callback_arg an argument to be passed to the callback function @param callback_arg an argument to be passed to the callback function
@return a newly allocated struct event that must later be freed with @return a newly allocated struct event that must later be freed with
event_free(). event_free() or NULL if an error occurred.
@see event_free(), event_add(), event_del(), event_assign() @see event_free(), event_add(), event_del(), event_assign()
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
@ -1124,18 +1134,14 @@ int event_assign(struct event *, struct event_base *, evutil_socket_t, short, ev
/** /**
Deallocate a struct event * returned by event_new(). Deallocate a struct event * returned by event_new().
If the event is pending or active, first make it non-pending and If the event is pending or active, this function makes it non-pending
non-active. and non-active first.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
void event_free(struct event *); void event_free(struct event *);
/** /**
* Callback type for event_finalize and event_free_finalize(). * Callback type for event_finalize and event_free_finalize().
*
* THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES
* BECOMES STABLE.
*
**/ **/
typedef void (*event_finalize_callback_fn)(struct event *, void *); typedef void (*event_finalize_callback_fn)(struct event *, void *);
/** /**
@ -1163,13 +1169,10 @@ typedef void (*event_finalize_callback_fn)(struct event *, void *);
event_finalize() does not. event_finalize() does not.
A finalizer callback must not make events pending or active. It must not A finalizer callback must not make events pending or active. It must not
add events, activate events, or attempt to "resucitate" the event being add events, activate events, or attempt to "resuscitate" the event being
finalized in any way. finalized in any way.
THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES @return 0 on success, -1 on failure.
BECOMES STABLE.
@return 0 on succes, -1 on failure.
*/ */
/**@{*/ /**@{*/
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
@ -1199,7 +1202,7 @@ int event_free_finalize(unsigned, struct event *, event_finalize_callback_fn);
@param arg an argument to be passed to the callback function @param arg an argument to be passed to the callback function
@param timeout the maximum amount of time to wait for the event. NULL @param timeout the maximum amount of time to wait for the event. NULL
makes an EV_READ/EV_WRITE event make forever; NULL makes an makes an EV_READ/EV_WRITE event make forever; NULL makes an
EV_TIMEOUT event succees immediately. EV_TIMEOUT event success immediately.
@return 0 if successful, or -1 if an error occurred @return 0 if successful, or -1 if an error occurred
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
@ -1210,7 +1213,7 @@ int event_base_once(struct event_base *, evutil_socket_t, short, event_callback_
The function event_add() schedules the execution of the event 'ev' when the The function event_add() schedules the execution of the event 'ev' when the
condition specified by event_assign() or event_new() occurs, or when the time condition specified by event_assign() or event_new() occurs, or when the time
specified in timeout has elapesed. If atimeout is NULL, no timeout specified in timeout has elapsed. If a timeout is NULL, no timeout
occurs and the function will only be occurs and the function will only be
called if a matching event occurs. The event in the called if a matching event occurs. The event in the
ev argument must be already initialized by event_assign() or event_new() ev argument must be already initialized by event_assign() or event_new()
@ -1236,7 +1239,7 @@ int event_add(struct event *ev, const struct timeval *timeout);
leaves the event otherwise pending. leaves the event otherwise pending.
@param ev an event struct initialized via event_assign() or event_new() @param ev an event struct initialized via event_assign() or event_new()
@return 0 on success, or -1 if an error occurrect. @return 0 on success, or -1 if an error occurred.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int event_remove_timer(struct event *ev); int event_remove_timer(struct event *ev);
@ -1259,9 +1262,6 @@ int event_del(struct event *);
As event_del(), but never blocks while the event's callback is running As event_del(), but never blocks while the event's callback is running
in another thread, even if the event was constructed without the in another thread, even if the event was constructed without the
EV_FINALIZE flag. EV_FINALIZE flag.
THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES
BECOMES STABLE.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int event_del_noblock(struct event *ev); int event_del_noblock(struct event *ev);
@ -1269,9 +1269,6 @@ int event_del_noblock(struct event *ev);
As event_del(), but always blocks while the event's callback is running As event_del(), but always blocks while the event's callback is running
in another thread, even if the event was constructed with the in another thread, even if the event was constructed with the
EV_FINALIZE flag. EV_FINALIZE flag.
THIS IS AN EXPERIMENTAL API. IT MIGHT CHANGE BEFORE THE LIBEVENT 2.1 SERIES
BECOMES STABLE.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int event_del_block(struct event *ev); int event_del_block(struct event *ev);
@ -1324,7 +1321,7 @@ struct event *event_base_get_running_event(struct event_base *base);
The event_initialized() function can be used to check if an event has been The event_initialized() function can be used to check if an event has been
initialized. initialized.
Warning: This function is only useful for distinguishing a a zeroed-out Warning: This function is only useful for distinguishing a zeroed-out
piece of memory from an initialized event, it can easily be confused by piece of memory from an initialized event, it can easily be confused by
uninitialized memory. Thus, it should ONLY be used to distinguish an uninitialized memory. Thus, it should ONLY be used to distinguish an
initialized event from zero. initialized event from zero.
@ -1531,7 +1528,7 @@ const struct timeval *event_base_init_common_timeout(struct event_base *base,
Note also that if you are going to call this function, you should do so Note also that if you are going to call this function, you should do so
before any call to any Libevent function that does allocation. before any call to any Libevent function that does allocation.
Otherwise, those funtions will allocate their memory using malloc(), but Otherwise, those functions will allocate their memory using malloc(), but
then later free it using your provided free_fn. then later free it using your provided free_fn.
@param malloc_fn A replacement for malloc. @param malloc_fn A replacement for malloc.
@ -1570,7 +1567,7 @@ void event_base_dump_events(struct event_base *, FILE *);
@param base the event_base on which to activate the events. @param base the event_base on which to activate the events.
@param fd An fd to active events on. @param fd An fd to active events on.
@param events One or more of EV_{READ,WRITE}. @param events One or more of EV_{READ,WRITE,TIMEOUT}.
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
void event_base_active_by_fd(struct event_base *base, evutil_socket_t fd, short events); void event_base_active_by_fd(struct event_base *base, evutil_socket_t fd, short events);
@ -1627,7 +1624,7 @@ int event_base_foreach_event(struct event_base *base, event_base_foreach_event_c
cached time. cached time.
Generally, this value will only be cached while actually Generally, this value will only be cached while actually
processing event callbacks, and may be very inaccuate if your processing event callbacks, and may be very inaccurate if your
callbacks take a long time to execute. callbacks take a long time to execute.
Returns 0 on success, negative on failure. Returns 0 on success, negative on failure.

View File

@ -78,7 +78,8 @@ struct evdns_base;
* Create a new HTTP server. * Create a new HTTP server.
* *
* @param base (optional) the event base to receive the HTTP events * @param base (optional) the event base to receive the HTTP events
* @return a pointer to a newly initialized evhttp server structure * @return a pointer to a newly initialized evhttp server structure or NULL
* on error
* @see evhttp_free() * @see evhttp_free()
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
@ -516,7 +517,8 @@ enum evhttp_request_kind { EVHTTP_REQUEST, EVHTTP_RESPONSE };
* when the connection closes. It must have no fd set on it. * when the connection closes. It must have no fd set on it.
* @param address the address to which to connect * @param address the address to which to connect
* @param port the port to connect to * @param port the port to connect to
* @return an evhttp_connection object that can be used for making requests * @return an evhttp_connection object that can be used for making requests or
* NULL on error
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
struct evhttp_connection *evhttp_connection_base_bufferevent_new( struct evhttp_connection *evhttp_connection_base_bufferevent_new(
@ -636,7 +638,8 @@ void evhttp_request_free(struct evhttp_request *req);
* specified host name resolution will block. * specified host name resolution will block.
* @param address the address to which to connect * @param address the address to which to connect
* @param port the port to connect to * @param port the port to connect to
* @return an evhttp_connection object that can be used for making requests * @return an evhttp_connection object that can be used for making requests or
* NULL on error
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
struct evhttp_connection *evhttp_connection_base_new( struct evhttp_connection *evhttp_connection_base_new(
@ -927,14 +930,14 @@ char *evhttp_uriencode(const char *str, ev_ssize_t size, int space_to_plus);
/** /**
Helper function to sort of decode a URI-encoded string. Unlike Helper function to sort of decode a URI-encoded string. Unlike
evhttp_get_decoded_uri, it decodes all plus characters that appear evhttp_uridecode, it decodes all plus characters that appear
_after_ the first question mark character, but no plusses that occur _after_ the first question mark character, but no plusses that occur
before. This is not a good way to decode URIs in whole or in part. before. This is not a good way to decode URIs in whole or in part.
The returned string must be freed by the caller The returned string must be freed by the caller
@deprecated This function is deprecated; you probably want to use @deprecated This function is deprecated; you probably want to use
evhttp_get_decoded_uri instead. evhttp_uridecode instead.
@param uri an encoded URI @param uri an encoded URI
@return a newly allocated unencoded URI or NULL on failure @return a newly allocated unencoded URI or NULL on failure

View File

@ -56,8 +56,10 @@ extern "C" {
* *
* @param address the address to which the HTTP server should be bound * @param address the address to which the HTTP server should be bound
* @param port the port number on which the HTTP server should listen * @param port the port number on which the HTTP server should listen
* @return an struct evhttp object * @return a pointer to a newly initialized evhttp server structure
* or NULL on error
*/ */
EVENT2_EXPORT_SYMBOL
struct evhttp *evhttp_start(const char *address, ev_uint16_t port); struct evhttp *evhttp_start(const char *address, ev_uint16_t port);
/** /**
@ -67,6 +69,7 @@ struct evhttp *evhttp_start(const char *address, ev_uint16_t port);
* *
* @deprecated It does not allow an event base to be specified * @deprecated It does not allow an event base to be specified
*/ */
EVENT2_EXPORT_SYMBOL
struct evhttp_connection *evhttp_connection_new( struct evhttp_connection *evhttp_connection_new(
const char *address, ev_uint16_t port); const char *address, ev_uint16_t port);
@ -76,6 +79,7 @@ struct evhttp_connection *evhttp_connection_new(
* *
* @deprecated XXXX Why? * @deprecated XXXX Why?
*/ */
EVENT2_EXPORT_SYMBOL
void evhttp_connection_set_base(struct evhttp_connection *evcon, void evhttp_connection_set_base(struct evhttp_connection *evcon,
struct event_base *base); struct event_base *base);

View File

@ -97,6 +97,18 @@ typedef void (*evconnlistener_errorcb)(struct evconnlistener *, void *);
* This is only available on Linux and kernel 3.9+ * This is only available on Linux and kernel 3.9+
*/ */
#define LEV_OPT_REUSEABLE_PORT (1u<<7) #define LEV_OPT_REUSEABLE_PORT (1u<<7)
/** Flag: Indicates that the listener wants to work only in IPv6 socket.
*
* According to RFC3493 and most Linux distributions, default value is to
* work in IPv4-mapped mode. If there is a requirement to bind same port
* on same ip addresses but different handlers for both IPv4 and IPv6,
* it is required to set IPV6_V6ONLY socket option to be sure that the
* code works as expected without affected by bindv6only sysctl setting in
* system.
*
* This socket option also supported by Windows.
*/
#define LEV_OPT_BIND_IPV6ONLY (1u<<8)
/** /**
Allocate a new evconnlistener object to listen for incoming TCP connections Allocate a new evconnlistener object to listen for incoming TCP connections

View File

@ -27,6 +27,10 @@
#ifndef EVENT2_RPC_H_INCLUDED_ #ifndef EVENT2_RPC_H_INCLUDED_
#define EVENT2_RPC_H_INCLUDED_ #define EVENT2_RPC_H_INCLUDED_
/* For int types. */
#include <event2/util.h>
#include <event2/visibility.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -178,6 +182,7 @@ EVRPC_STRUCT(rpcname) { \
struct evhttp_request* http_req; \ struct evhttp_request* http_req; \
struct evbuffer* rpc_data; \ struct evbuffer* rpc_data; \
}; \ }; \
EVENT2_EXPORT_SYMBOL \
int evrpc_send_request_##rpcname(struct evrpc_pool *, \ int evrpc_send_request_##rpcname(struct evrpc_pool *, \
struct reqstruct *, struct rplystruct *, \ struct reqstruct *, struct rplystruct *, \
void (*)(struct evrpc_status *, \ void (*)(struct evrpc_status *, \
@ -187,6 +192,7 @@ int evrpc_send_request_##rpcname(struct evrpc_pool *, \
struct evrpc_pool; struct evrpc_pool;
/** use EVRPC_GENERATE instead */ /** use EVRPC_GENERATE instead */
EVENT2_EXPORT_SYMBOL
struct evrpc_request_wrapper *evrpc_make_request_ctx( struct evrpc_request_wrapper *evrpc_make_request_ctx(
struct evrpc_pool *pool, void *request, void *reply, struct evrpc_pool *pool, void *request, void *reply,
const char *rpcname, const char *rpcname,
@ -257,10 +263,13 @@ struct evrpc_request_wrapper *evrpc_make_request_ctx(
#define EVRPC_REQUEST_HTTP(rpc_req) (rpc_req)->http_req #define EVRPC_REQUEST_HTTP(rpc_req) (rpc_req)->http_req
/** completes the server response to an rpc request */ /** completes the server response to an rpc request */
EVENT2_EXPORT_SYMBOL
void evrpc_request_done(struct evrpc_req_generic *req); void evrpc_request_done(struct evrpc_req_generic *req);
/** accessors for request and reply */ /** accessors for request and reply */
EVENT2_EXPORT_SYMBOL
void *evrpc_get_request(struct evrpc_req_generic *req); void *evrpc_get_request(struct evrpc_req_generic *req);
EVENT2_EXPORT_SYMBOL
void *evrpc_get_reply(struct evrpc_req_generic *req); void *evrpc_get_reply(struct evrpc_req_generic *req);
/** Creates the reply to an RPC request /** Creates the reply to an RPC request
@ -285,9 +294,10 @@ struct evhttp;
/** Creates a new rpc base from which RPC requests can be received /** Creates a new rpc base from which RPC requests can be received
* *
* @param server a pointer to an existing HTTP server * @param server a pointer to an existing HTTP server
* @return a newly allocated evrpc_base struct * @return a newly allocated evrpc_base struct or NULL if an error occurred
* @see evrpc_free() * @see evrpc_free()
*/ */
EVENT2_EXPORT_SYMBOL
struct evrpc_base *evrpc_init(struct evhttp *server); struct evrpc_base *evrpc_init(struct evhttp *server);
/** /**
@ -298,6 +308,7 @@ struct evrpc_base *evrpc_init(struct evhttp *server);
* @param base the evrpc_base object to be freed * @param base the evrpc_base object to be freed
* @see evrpc_init * @see evrpc_init
*/ */
EVENT2_EXPORT_SYMBOL
void evrpc_free(struct evrpc_base *base); void evrpc_free(struct evrpc_base *base);
/** register RPCs with the HTTP Server /** register RPCs with the HTTP Server
@ -319,10 +330,10 @@ void evrpc_free(struct evrpc_base *base);
#define EVRPC_REGISTER(base, name, request, reply, callback, cbarg) \ #define EVRPC_REGISTER(base, name, request, reply, callback, cbarg) \
evrpc_register_generic(base, #name, \ evrpc_register_generic(base, #name, \
(void (*)(struct evrpc_req_generic *, void *))callback, cbarg, \ (void (*)(struct evrpc_req_generic *, void *))callback, cbarg, \
(void *(*)(void *))request##_new, NULL, \ (void *(*)(void *))request##_new_with_arg, NULL, \
(void (*)(void *))request##_free, \ (void (*)(void *))request##_free, \
(int (*)(void *, struct evbuffer *))request##_unmarshal, \ (int (*)(void *, struct evbuffer *))request##_unmarshal, \
(void *(*)(void *))reply##_new, NULL, \ (void *(*)(void *))reply##_new_with_arg, NULL, \
(void (*)(void *))reply##_free, \ (void (*)(void *))reply##_free, \
(int (*)(void *))reply##_complete, \ (int (*)(void *))reply##_complete, \
(void (*)(struct evbuffer *, void *))reply##_marshal) (void (*)(struct evbuffer *, void *))reply##_marshal)
@ -334,6 +345,7 @@ void evrpc_free(struct evrpc_base *base);
@see EVRPC_REGISTER() @see EVRPC_REGISTER()
*/ */
EVENT2_EXPORT_SYMBOL
int evrpc_register_rpc(struct evrpc_base *, struct evrpc *, int evrpc_register_rpc(struct evrpc_base *, struct evrpc *,
void (*)(struct evrpc_req_generic*, void *), void *); void (*)(struct evrpc_req_generic*, void *), void *);
@ -347,6 +359,7 @@ int evrpc_register_rpc(struct evrpc_base *, struct evrpc *,
*/ */
#define EVRPC_UNREGISTER(base, name) evrpc_unregister_rpc((base), #name) #define EVRPC_UNREGISTER(base, name) evrpc_unregister_rpc((base), #name)
EVENT2_EXPORT_SYMBOL
int evrpc_unregister_rpc(struct evrpc_base *base, const char *name); int evrpc_unregister_rpc(struct evrpc_base *base, const char *name);
/* /*
@ -385,6 +398,7 @@ struct evrpc_status;
@returns 0 on success, -1 otherwise. @returns 0 on success, -1 otherwise.
@see EVRPC_MAKE_REQUEST(), EVRPC_MAKE_CTX() @see EVRPC_MAKE_REQUEST(), EVRPC_MAKE_CTX()
*/ */
EVENT2_EXPORT_SYMBOL
int evrpc_make_request(struct evrpc_request_wrapper *ctx); int evrpc_make_request(struct evrpc_request_wrapper *ctx);
/** creates an rpc connection pool /** creates an rpc connection pool
@ -394,15 +408,18 @@ int evrpc_make_request(struct evrpc_request_wrapper *ctx);
* *
* @param base a pointer to an struct event_based object; can be left NULL * @param base a pointer to an struct event_based object; can be left NULL
* in singled-threaded applications * in singled-threaded applications
* @return a newly allocated struct evrpc_pool object * @return a newly allocated struct evrpc_pool object or NULL if an error
* occurred
* @see evrpc_pool_free() * @see evrpc_pool_free()
*/ */
EVENT2_EXPORT_SYMBOL
struct evrpc_pool *evrpc_pool_new(struct event_base *base); struct evrpc_pool *evrpc_pool_new(struct event_base *base);
/** frees an rpc connection pool /** frees an rpc connection pool
* *
* @param pool a pointer to an evrpc_pool allocated via evrpc_pool_new() * @param pool a pointer to an evrpc_pool allocated via evrpc_pool_new()
* @see evrpc_pool_new() * @see evrpc_pool_new()
*/ */
EVENT2_EXPORT_SYMBOL
void evrpc_pool_free(struct evrpc_pool *pool); void evrpc_pool_free(struct evrpc_pool *pool);
/** /**
@ -413,6 +430,7 @@ void evrpc_pool_free(struct evrpc_pool *pool);
* @param pool the pool to which to add the connection * @param pool the pool to which to add the connection
* @param evcon the connection to add to the pool. * @param evcon the connection to add to the pool.
*/ */
EVENT2_EXPORT_SYMBOL
void evrpc_pool_add_connection(struct evrpc_pool *pool, void evrpc_pool_add_connection(struct evrpc_pool *pool,
struct evhttp_connection *evcon); struct evhttp_connection *evcon);
@ -424,6 +442,7 @@ void evrpc_pool_add_connection(struct evrpc_pool *pool,
* @param pool the pool from which to remove the connection * @param pool the pool from which to remove the connection
* @param evcon the connection to remove from the pool. * @param evcon the connection to remove from the pool.
*/ */
EVENT2_EXPORT_SYMBOL
void evrpc_pool_remove_connection(struct evrpc_pool *pool, void evrpc_pool_remove_connection(struct evrpc_pool *pool,
struct evhttp_connection *evcon); struct evhttp_connection *evcon);
@ -442,6 +461,7 @@ void evrpc_pool_remove_connection(struct evrpc_pool *pool,
* @param timeout_in_secs the number of seconds after which a request should * @param timeout_in_secs the number of seconds after which a request should
* timeout and a failure be returned to the callback. * timeout and a failure be returned to the callback.
*/ */
EVENT2_EXPORT_SYMBOL
void evrpc_pool_set_timeout(struct evrpc_pool *pool, int timeout_in_secs); void evrpc_pool_set_timeout(struct evrpc_pool *pool, int timeout_in_secs);
/** /**
@ -489,6 +509,7 @@ enum EVRPC_HOOK_RESULT {
* @return a handle to the hook so it can be removed later * @return a handle to the hook so it can be removed later
* @see evrpc_remove_hook() * @see evrpc_remove_hook()
*/ */
EVENT2_EXPORT_SYMBOL
void *evrpc_add_hook(void *vbase, void *evrpc_add_hook(void *vbase,
enum EVRPC_HOOK_TYPE hook_type, enum EVRPC_HOOK_TYPE hook_type,
int (*cb)(void *, struct evhttp_request *, struct evbuffer *, void *), int (*cb)(void *, struct evhttp_request *, struct evbuffer *, void *),
@ -502,6 +523,7 @@ void *evrpc_add_hook(void *vbase,
* @return 1 on success or 0 on failure * @return 1 on success or 0 on failure
* @see evrpc_add_hook() * @see evrpc_add_hook()
*/ */
EVENT2_EXPORT_SYMBOL
int evrpc_remove_hook(void *vbase, int evrpc_remove_hook(void *vbase,
enum EVRPC_HOOK_TYPE hook_type, enum EVRPC_HOOK_TYPE hook_type,
void *handle); void *handle);
@ -511,8 +533,8 @@ int evrpc_remove_hook(void *vbase,
* @param vbase a pointer to either struct evrpc_base or struct evrpc_pool * @param vbase a pointer to either struct evrpc_base or struct evrpc_pool
* @param ctx the context pointer provided to the original hook call * @param ctx the context pointer provided to the original hook call
*/ */
int EVENT2_EXPORT_SYMBOL
evrpc_resume_request(void *vbase, void *ctx, enum EVRPC_HOOK_RESULT res); int evrpc_resume_request(void *vbase, void *ctx, enum EVRPC_HOOK_RESULT res);
/** adds meta data to request /** adds meta data to request
* *
@ -525,6 +547,7 @@ evrpc_resume_request(void *vbase, void *ctx, enum EVRPC_HOOK_RESULT res);
* @param data the data to be associated with the key * @param data the data to be associated with the key
* @param data_size the size of the data * @param data_size the size of the data
*/ */
EVENT2_EXPORT_SYMBOL
void evrpc_hook_add_meta(void *ctx, const char *key, void evrpc_hook_add_meta(void *ctx, const char *key,
const void *data, size_t data_size); const void *data, size_t data_size);
@ -538,6 +561,7 @@ void evrpc_hook_add_meta(void *ctx, const char *key,
* @param data_size pointer to the size of the data * @param data_size pointer to the size of the data
* @return 0 on success or -1 on failure * @return 0 on success or -1 on failure
*/ */
EVENT2_EXPORT_SYMBOL
int evrpc_hook_find_meta(void *ctx, const char *key, int evrpc_hook_find_meta(void *ctx, const char *key,
void **data, size_t *data_size); void **data, size_t *data_size);
@ -545,8 +569,10 @@ int evrpc_hook_find_meta(void *ctx, const char *key,
* returns the connection object associated with the request * returns the connection object associated with the request
* *
* @param ctx the context provided to the hook call * @param ctx the context provided to the hook call
* @return a pointer to the evhttp_connection object * @return a pointer to the evhttp_connection object or NULL if an error
* occurred
*/ */
EVENT2_EXPORT_SYMBOL
struct evhttp_connection *evrpc_hook_get_connection(void *ctx); struct evhttp_connection *evrpc_hook_get_connection(void *ctx);
/** /**
@ -556,6 +582,7 @@ struct evhttp_connection *evrpc_hook_get_connection(void *ctx);
@see EVRPC_MAKE_REQUEST() @see EVRPC_MAKE_REQUEST()
*/ */
EVENT2_EXPORT_SYMBOL
int evrpc_send_request_generic(struct evrpc_pool *pool, int evrpc_send_request_generic(struct evrpc_pool *pool,
void *request, void *reply, void *request, void *reply,
void (*cb)(struct evrpc_status *, void *, void *, void *), void (*cb)(struct evrpc_status *, void *, void *, void *),
@ -572,8 +599,8 @@ int evrpc_send_request_generic(struct evrpc_pool *pool,
@see EVRPC_REGISTER() @see EVRPC_REGISTER()
*/ */
int EVENT2_EXPORT_SYMBOL
evrpc_register_generic(struct evrpc_base *base, const char *name, int evrpc_register_generic(struct evrpc_base *base, const char *name,
void (*callback)(struct evrpc_req_generic *, void *), void *cbarg, void (*callback)(struct evrpc_req_generic *, void *), void *cbarg,
void *(*req_new)(void *), void *req_new_arg, void (*req_free)(void *), void *(*req_new)(void *), void *req_new_arg, void (*req_free)(void *),
int (*req_unmarshal)(void *, struct evbuffer *), int (*req_unmarshal)(void *, struct evbuffer *),
@ -582,9 +609,12 @@ evrpc_register_generic(struct evrpc_base *base, const char *name,
void (*rpl_marshal)(struct evbuffer *, void *)); void (*rpl_marshal)(struct evbuffer *, void *));
/** accessors for obscure and undocumented functionality */ /** accessors for obscure and undocumented functionality */
EVENT2_EXPORT_SYMBOL
struct evrpc_pool* evrpc_request_get_pool(struct evrpc_request_wrapper *ctx); struct evrpc_pool* evrpc_request_get_pool(struct evrpc_request_wrapper *ctx);
EVENT2_EXPORT_SYMBOL
void evrpc_request_set_pool(struct evrpc_request_wrapper *ctx, void evrpc_request_set_pool(struct evrpc_request_wrapper *ctx,
struct evrpc_pool *pool); struct evrpc_pool *pool);
EVENT2_EXPORT_SYMBOL
void evrpc_request_set_cb(struct evrpc_request_wrapper *ctx, void evrpc_request_set_cb(struct evrpc_request_wrapper *ctx,
void (*cb)(struct evrpc_status*, void *request, void *reply, void *arg), void (*cb)(struct evrpc_status*, void *request, void *reply, void *arg),
void *cb_arg); void *cb_arg);

View File

@ -38,6 +38,16 @@ extern "C" {
*/ */
/* Fix so that people don't have to run with <sys/queue.h> */
#ifndef TAILQ_ENTRY
#define EVENT_DEFINED_TQENTRY_
#define TAILQ_ENTRY(type) \
struct { \
struct type *tqe_next; /* next element */ \
struct type **tqe_prev; /* address of previous next element */ \
}
#endif /* !TAILQ_ENTRY */
/** /**
* provides information about the completed RPC request. * provides information about the completed RPC request.
*/ */
@ -93,6 +103,10 @@ struct evrpc {
struct evrpc_base *base; struct evrpc_base *base;
}; };
#ifdef EVENT_DEFINED_TQENTRY_
#undef TAILQ_ENTRY
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -58,9 +58,6 @@ extern "C" {
#endif #endif
#include <stdarg.h> #include <stdarg.h>
#ifdef EVENT__HAVE_NETDB_H #ifdef EVENT__HAVE_NETDB_H
#if !defined(_GNU_SOURCE)
#define _GNU_SOURCE
#endif
#include <netdb.h> #include <netdb.h>
#endif #endif
@ -259,6 +256,7 @@ extern "C" {
#define EV_INT32_MAX INT32_MAX #define EV_INT32_MAX INT32_MAX
#define EV_INT32_MIN INT32_MIN #define EV_INT32_MIN INT32_MIN
#define EV_UINT16_MAX UINT16_MAX #define EV_UINT16_MAX UINT16_MAX
#define EV_INT16_MIN INT16_MIN
#define EV_INT16_MAX INT16_MAX #define EV_INT16_MAX INT16_MAX
#define EV_UINT8_MAX UINT8_MAX #define EV_UINT8_MAX UINT8_MAX
#define EV_INT8_MAX INT8_MAX #define EV_INT8_MAX INT8_MAX
@ -425,6 +423,18 @@ int evutil_make_listen_socket_reuseable(evutil_socket_t sock);
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int evutil_make_listen_socket_reuseable_port(evutil_socket_t sock); int evutil_make_listen_socket_reuseable_port(evutil_socket_t sock);
/** Set ipv6 only bind socket option to make listener work only in ipv6 sockets.
According to RFC3493 and most Linux distributions, default value for the
sockets is to work in IPv4-mapped mode. In IPv4-mapped mode, it is not possible
to bind same port from different IPv4 and IPv6 handlers.
@param sock The socket to make in ipv6only working mode
@return 0 on success, -1 on failure
*/
EVENT2_EXPORT_SYMBOL
int evutil_make_listen_socket_ipv6only(evutil_socket_t sock);
/** Do platform-specific operations as needed to close a socket upon a /** Do platform-specific operations as needed to close a socket upon a
successful execution of one of the exec*() functions. successful execution of one of the exec*() functions.
@ -438,7 +448,8 @@ int evutil_make_socket_closeonexec(evutil_socket_t sock);
socket() or accept(). socket() or accept().
@param sock The socket to be closed @param sock The socket to be closed
@return 0 on success, -1 on failure @return 0 on success (whether the operation is supported or not),
-1 on failure
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int evutil_closesocket(evutil_socket_t sock); int evutil_closesocket(evutil_socket_t sock);
@ -470,6 +481,7 @@ int evutil_socket_geterror(evutil_socket_t sock);
/** Convert a socket error to a string. */ /** Convert a socket error to a string. */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
const char *evutil_socket_error_to_string(int errcode); const char *evutil_socket_error_to_string(int errcode);
#define EVUTIL_INVALID_SOCKET INVALID_SOCKET
#elif defined(EVENT_IN_DOXYGEN_) #elif defined(EVENT_IN_DOXYGEN_)
/** /**
@name Socket error functions @name Socket error functions
@ -493,14 +505,16 @@ const char *evutil_socket_error_to_string(int errcode);
#define evutil_socket_geterror(sock) ... #define evutil_socket_geterror(sock) ...
/** Convert a socket error to a string. */ /** Convert a socket error to a string. */
#define evutil_socket_error_to_string(errcode) ... #define evutil_socket_error_to_string(errcode) ...
#define EVUTIL_INVALID_SOCKET -1
/**@}*/ /**@}*/
#else #else /** !EVENT_IN_DOXYGEN_ && !_WIN32 */
#define EVUTIL_SOCKET_ERROR() (errno) #define EVUTIL_SOCKET_ERROR() (errno)
#define EVUTIL_SET_SOCKET_ERROR(errcode) \ #define EVUTIL_SET_SOCKET_ERROR(errcode) \
do { errno = (errcode); } while (0) do { errno = (errcode); } while (0)
#define evutil_socket_geterror(sock) (errno) #define evutil_socket_geterror(sock) (errno)
#define evutil_socket_error_to_string(errcode) (strerror(errcode)) #define evutil_socket_error_to_string(errcode) (strerror(errcode))
#endif #define EVUTIL_INVALID_SOCKET -1
#endif /** !_WIN32 */
/** /**
@ -842,6 +856,7 @@ int evutil_secure_rng_init(void);
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
int evutil_secure_rng_set_urandom_device_file(char *fname); int evutil_secure_rng_set_urandom_device_file(char *fname);
#if !defined(EVENT__HAVE_ARC4RANDOM) || defined(EVENT__HAVE_ARC4RANDOM_ADDRANDOM)
/** Seed the random number generator with extra random bytes. /** Seed the random number generator with extra random bytes.
You should almost never need to call this function; it should be You should almost never need to call this function; it should be
@ -858,6 +873,7 @@ int evutil_secure_rng_set_urandom_device_file(char *fname);
*/ */
EVENT2_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
void evutil_secure_rng_add_bytes(const char *dat, size_t datlen); void evutil_secure_rng_add_bytes(const char *dat, size_t datlen);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -29,22 +29,39 @@
#include <event2/event-config.h> #include <event2/event-config.h>
#if defined(event_EXPORTS) || defined(event_extra_EXPORTS) || defined(event_core_EXPORTS) #if defined(event_shared_EXPORTS) || \
defined(event_extra_shared_EXPORTS) || \
defined(event_core_shared_EXPORTS) || \
defined(event_pthreads_shared_EXPORTS) || \
defined(event_openssl_shared_EXPORTS)
# if defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550) # if defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
# define EVENT2_EXPORT_SYMBOL __global # define EVENT2_EXPORT_SYMBOL __global
# elif defined __GNUC__ # elif defined __GNUC__
# define EVENT2_EXPORT_SYMBOL __attribute__ ((visibility("default"))) # define EVENT2_EXPORT_SYMBOL __attribute__ ((visibility("default")))
# elif defined(_MSC_VER) # elif defined(_MSC_VER)
# define EVENT2_EXPORT_SYMBOL extern __declspec(dllexport) # define EVENT2_EXPORT_SYMBOL __declspec(dllexport)
# else # else
# define EVENT2_EXPORT_SYMBOL /* unknown compiler */ # define EVENT2_EXPORT_SYMBOL /* unknown compiler */
# endif # endif
#else
# if defined(EVENT__NEED_DLLIMPORT) && defined(_MSC_VER) && !defined(EVENT_BUILDING_REGRESS_TEST) #else /* event_*_EXPORTS */
# define EVENT2_EXPORT_SYMBOL extern __declspec(dllimport)
# else
# define EVENT2_EXPORT_SYMBOL # define EVENT2_EXPORT_SYMBOL
#endif /* event_*_EXPORTS */
/** We need to dllimport event_debug_logging_mask_ into event_extra */
#if defined(_MSC_VER)
# if defined(event_core_shared_EXPORTS) /** from core export */
# define EVENT2_CORE_EXPORT_SYMBOL __declspec(dllexport)
# elif defined(event_extra_shared_EXPORTS) || /** from extra import */ \
defined(EVENT_VISIBILITY_WANT_DLLIMPORT)
# define EVENT2_CORE_EXPORT_SYMBOL __declspec(dllimport)
# endif # endif
#endif /* _MSC_VER */
#if !defined(EVENT2_CORE_EXPORT_SYMBOL)
# define EVENT2_CORE_EXPORT_SYMBOL EVENT2_EXPORT_SYMBOL
#endif #endif
#endif /* EVENT2_VISIBILITY_H_INCLUDED_ */ #endif /* EVENT2_VISIBILITY_H_INCLUDED_ */

Binary file not shown.

1
event2/linux/x64/libevent.a Symbolic link
View File

@ -0,0 +1 @@
/home/anand/works/sevana/temp/libevent-2.1.11-stable/build/lib/libevent.a

Binary file not shown.

View File

@ -0,0 +1 @@
/home/anand/works/sevana/temp/libevent-2.1.11-stable/build/lib/libevent_core.a

Binary file not shown.

View File

@ -0,0 +1 @@
/home/anand/works/sevana/temp/libevent-2.1.11-stable/build/lib/libevent_extra.a

Binary file not shown.

View File

@ -0,0 +1 @@
/home/anand/works/sevana/temp/libevent-2.1.11-stable/build/lib/libevent_openssl.a

Binary file not shown.

View File

@ -0,0 +1 @@
/home/anand/works/sevana/temp/libevent-2.1.11-stable/build/lib/libevent_pthreads.a

Binary file not shown.

Binary file not shown.