1*0a6a1f1dSLionel Sambuc /* $NetBSD: event_compat.h,v 1.1.1.2 2015/01/29 06:38:27 spz Exp $ */ 2*0a6a1f1dSLionel Sambuc /* $NetBSD: event_compat.h,v 1.1.1.2 2015/01/29 06:38:27 spz Exp $ */ 3e985b929SDavid van Moolenbroek /* 4e985b929SDavid van Moolenbroek * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu> 5e985b929SDavid van Moolenbroek * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson 6e985b929SDavid van Moolenbroek * 7e985b929SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 8e985b929SDavid van Moolenbroek * modification, are permitted provided that the following conditions 9e985b929SDavid van Moolenbroek * are met: 10e985b929SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 11e985b929SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 12e985b929SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 13e985b929SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 14e985b929SDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 15e985b929SDavid van Moolenbroek * 3. The name of the author may not be used to endorse or promote products 16e985b929SDavid van Moolenbroek * derived from this software without specific prior written permission. 17e985b929SDavid van Moolenbroek * 18e985b929SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19e985b929SDavid van Moolenbroek * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20e985b929SDavid van Moolenbroek * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21e985b929SDavid van Moolenbroek * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22e985b929SDavid van Moolenbroek * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23e985b929SDavid van Moolenbroek * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24e985b929SDavid van Moolenbroek * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25e985b929SDavid van Moolenbroek * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26e985b929SDavid van Moolenbroek * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27e985b929SDavid van Moolenbroek * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28e985b929SDavid van Moolenbroek */ 29e985b929SDavid van Moolenbroek #ifndef _EVENT2_EVENT_COMPAT_H_ 30e985b929SDavid van Moolenbroek #define _EVENT2_EVENT_COMPAT_H_ 31e985b929SDavid van Moolenbroek 32e985b929SDavid van Moolenbroek /** @file event2/event_compat.h 33e985b929SDavid van Moolenbroek 34e985b929SDavid van Moolenbroek Potentially non-threadsafe versions of the functions in event.h: provided 35e985b929SDavid van Moolenbroek only for backwards compatibility. 36e985b929SDavid van Moolenbroek 37e985b929SDavid van Moolenbroek In the oldest versions of Libevent, event_base was not a first-class 38e985b929SDavid van Moolenbroek structure. Instead, there was a single event base that every function 39e985b929SDavid van Moolenbroek manipulated. Later, when separate event bases were added, the old functions 40e985b929SDavid van Moolenbroek that didn't take an event_base argument needed to work by manipulating the 41e985b929SDavid van Moolenbroek "current" event base. This could lead to thread-safety issues, and obscure, 42e985b929SDavid van Moolenbroek hard-to-diagnose bugs. 43e985b929SDavid van Moolenbroek 44e985b929SDavid van Moolenbroek @deprecated All functions in this file are by definition deprecated. 45e985b929SDavid van Moolenbroek */ 46e985b929SDavid van Moolenbroek 47e985b929SDavid van Moolenbroek #ifdef __cplusplus 48e985b929SDavid van Moolenbroek extern "C" { 49e985b929SDavid van Moolenbroek #endif 50e985b929SDavid van Moolenbroek 51e985b929SDavid van Moolenbroek #include <event2/event-config.h> 52e985b929SDavid van Moolenbroek #ifdef _EVENT_HAVE_SYS_TYPES_H 53e985b929SDavid van Moolenbroek #include <sys/types.h> 54e985b929SDavid van Moolenbroek #endif 55e985b929SDavid van Moolenbroek #ifdef _EVENT_HAVE_SYS_TIME_H 56e985b929SDavid van Moolenbroek #include <sys/time.h> 57e985b929SDavid van Moolenbroek #endif 58e985b929SDavid van Moolenbroek 59e985b929SDavid van Moolenbroek /* For int types. */ 60e985b929SDavid van Moolenbroek #include <event2/util.h> 61e985b929SDavid van Moolenbroek 62e985b929SDavid van Moolenbroek /** 63e985b929SDavid van Moolenbroek Initialize the event API. 64e985b929SDavid van Moolenbroek 65e985b929SDavid van Moolenbroek The event API needs to be initialized with event_init() before it can be 66e985b929SDavid van Moolenbroek used. Sets the global current base that gets used for events that have no 67e985b929SDavid van Moolenbroek base associated with them. 68e985b929SDavid van Moolenbroek 69e985b929SDavid van Moolenbroek @deprecated This function is deprecated because it replaces the "current" 70e985b929SDavid van Moolenbroek event_base, and is totally unsafe for multithreaded use. The replacement 71e985b929SDavid van Moolenbroek is event_base_new(). 72e985b929SDavid van Moolenbroek 73e985b929SDavid van Moolenbroek @see event_base_set(), event_base_new() 74e985b929SDavid van Moolenbroek */ 75e985b929SDavid van Moolenbroek struct event_base *event_init(void); 76e985b929SDavid van Moolenbroek 77e985b929SDavid van Moolenbroek /** 78e985b929SDavid van Moolenbroek Loop to process events. 79e985b929SDavid van Moolenbroek 80e985b929SDavid van Moolenbroek Like event_base_dispatch(), but uses the "current" base. 81e985b929SDavid van Moolenbroek 82e985b929SDavid van Moolenbroek @deprecated This function is deprecated because it is easily confused by 83e985b929SDavid van Moolenbroek multiple calls to event_init(), and because it is not safe for 84e985b929SDavid van Moolenbroek multithreaded use. The replacement is event_base_dispatch(). 85e985b929SDavid van Moolenbroek 86e985b929SDavid van Moolenbroek @see event_base_dispatch(), event_init() 87e985b929SDavid van Moolenbroek */ 88e985b929SDavid van Moolenbroek int event_dispatch(void); 89e985b929SDavid van Moolenbroek 90e985b929SDavid van Moolenbroek /** 91e985b929SDavid van Moolenbroek Handle events. 92e985b929SDavid van Moolenbroek 93e985b929SDavid van Moolenbroek This function behaves like event_base_loop(), but uses the "current" base 94e985b929SDavid van Moolenbroek 95e985b929SDavid van Moolenbroek @deprecated This function is deprecated because it uses the event base from 96e985b929SDavid van Moolenbroek the last call to event_init, and is therefore not safe for multithreaded 97e985b929SDavid van Moolenbroek use. The replacement is event_base_loop(). 98e985b929SDavid van Moolenbroek 99e985b929SDavid van Moolenbroek @see event_base_loop(), event_init() 100e985b929SDavid van Moolenbroek */ 101e985b929SDavid van Moolenbroek int event_loop(int); 102e985b929SDavid van Moolenbroek 103e985b929SDavid van Moolenbroek 104e985b929SDavid van Moolenbroek /** 105e985b929SDavid van Moolenbroek Exit the event loop after the specified time. 106e985b929SDavid van Moolenbroek 107e985b929SDavid van Moolenbroek This function behaves like event_base_loopexit(), except that it uses the 108e985b929SDavid van Moolenbroek "current" base. 109e985b929SDavid van Moolenbroek 110e985b929SDavid van Moolenbroek @deprecated This function is deprecated because it uses the event base from 111e985b929SDavid van Moolenbroek the last call to event_init, and is therefore not safe for multithreaded 112e985b929SDavid van Moolenbroek use. The replacement is event_base_loopexit(). 113e985b929SDavid van Moolenbroek 114e985b929SDavid van Moolenbroek @see event_init, event_base_loopexit() 115e985b929SDavid van Moolenbroek */ 116e985b929SDavid van Moolenbroek int event_loopexit(const struct timeval *); 117e985b929SDavid van Moolenbroek 118e985b929SDavid van Moolenbroek 119e985b929SDavid van Moolenbroek /** 120e985b929SDavid van Moolenbroek Abort the active event_loop() immediately. 121e985b929SDavid van Moolenbroek 122e985b929SDavid van Moolenbroek This function behaves like event_base_loopbreakt(), except that it uses the 123e985b929SDavid van Moolenbroek "current" base. 124e985b929SDavid van Moolenbroek 125e985b929SDavid van Moolenbroek @deprecated This function is deprecated because it uses the event base from 126e985b929SDavid van Moolenbroek the last call to event_init, and is therefore not safe for multithreaded 127e985b929SDavid van Moolenbroek use. The replacement is event_base_loopbreak(). 128e985b929SDavid van Moolenbroek 129e985b929SDavid van Moolenbroek @see event_base_loopbreak(), event_init() 130e985b929SDavid van Moolenbroek */ 131e985b929SDavid van Moolenbroek int event_loopbreak(void); 132e985b929SDavid van Moolenbroek 133e985b929SDavid van Moolenbroek /** 134e985b929SDavid van Moolenbroek Schedule a one-time event to occur. 135e985b929SDavid van Moolenbroek 136e985b929SDavid van Moolenbroek @deprecated This function is obsolete, and has been replaced by 137e985b929SDavid van Moolenbroek event_base_once(). Its use is deprecated because it relies on the 138e985b929SDavid van Moolenbroek "current" base configured by event_init(). 139e985b929SDavid van Moolenbroek 140e985b929SDavid van Moolenbroek @see event_base_once() 141e985b929SDavid van Moolenbroek */ 142e985b929SDavid van Moolenbroek int event_once(evutil_socket_t , short, 143e985b929SDavid van Moolenbroek void (*)(evutil_socket_t, short, void *), void *, const struct timeval *); 144e985b929SDavid van Moolenbroek 145e985b929SDavid van Moolenbroek 146e985b929SDavid van Moolenbroek /** 147e985b929SDavid van Moolenbroek Get the kernel event notification mechanism used by Libevent. 148e985b929SDavid van Moolenbroek 149e985b929SDavid van Moolenbroek @deprecated This function is obsolete, and has been replaced by 150e985b929SDavid van Moolenbroek event_base_get_method(). Its use is deprecated because it relies on the 151e985b929SDavid van Moolenbroek "current" base configured by event_init(). 152e985b929SDavid van Moolenbroek 153e985b929SDavid van Moolenbroek @see event_base_get_method() 154e985b929SDavid van Moolenbroek */ 155e985b929SDavid van Moolenbroek const char *event_get_method(void); 156e985b929SDavid van Moolenbroek 157e985b929SDavid van Moolenbroek 158e985b929SDavid van Moolenbroek /** 159e985b929SDavid van Moolenbroek Set the number of different event priorities. 160e985b929SDavid van Moolenbroek 161e985b929SDavid van Moolenbroek @deprecated This function is deprecated because it is easily confused by 162e985b929SDavid van Moolenbroek multiple calls to event_init(), and because it is not safe for 163e985b929SDavid van Moolenbroek multithreaded use. The replacement is event_base_priority_init(). 164e985b929SDavid van Moolenbroek 165e985b929SDavid van Moolenbroek @see event_base_priority_init() 166e985b929SDavid van Moolenbroek */ 167e985b929SDavid van Moolenbroek int event_priority_init(int); 168e985b929SDavid van Moolenbroek 169e985b929SDavid van Moolenbroek /** 170e985b929SDavid van Moolenbroek Prepare an event structure to be added. 171e985b929SDavid van Moolenbroek 172e985b929SDavid van Moolenbroek @deprecated event_set() is not recommended for new code, because it requires 173e985b929SDavid van Moolenbroek a subsequent call to event_base_set() to be safe under most circumstances. 174e985b929SDavid van Moolenbroek Use event_assign() or event_new() instead. 175e985b929SDavid van Moolenbroek */ 176e985b929SDavid van Moolenbroek void event_set(struct event *, evutil_socket_t, short, void (*)(evutil_socket_t, short, void *), void *); 177e985b929SDavid van Moolenbroek 178e985b929SDavid van Moolenbroek #define evtimer_set(ev, cb, arg) event_set((ev), -1, 0, (cb), (arg)) 179e985b929SDavid van Moolenbroek #define evsignal_set(ev, x, cb, arg) \ 180e985b929SDavid van Moolenbroek event_set((ev), (x), EV_SIGNAL|EV_PERSIST, (cb), (arg)) 181e985b929SDavid van Moolenbroek 182e985b929SDavid van Moolenbroek 183e985b929SDavid van Moolenbroek /** 184e985b929SDavid van Moolenbroek @name timeout_* macros 185e985b929SDavid van Moolenbroek 186e985b929SDavid van Moolenbroek @deprecated These macros are deprecated because their naming is inconsistent 187e985b929SDavid van Moolenbroek with the rest of Libevent. Use the evtimer_* macros instead. 188e985b929SDavid van Moolenbroek @{ 189e985b929SDavid van Moolenbroek */ 190e985b929SDavid van Moolenbroek #define timeout_add(ev, tv) event_add((ev), (tv)) 191e985b929SDavid van Moolenbroek #define timeout_set(ev, cb, arg) event_set((ev), -1, 0, (cb), (arg)) 192e985b929SDavid van Moolenbroek #define timeout_del(ev) event_del(ev) 193e985b929SDavid van Moolenbroek #define timeout_pending(ev, tv) event_pending((ev), EV_TIMEOUT, (tv)) 194e985b929SDavid van Moolenbroek #define timeout_initialized(ev) event_initialized(ev) 195e985b929SDavid van Moolenbroek /**@}*/ 196e985b929SDavid van Moolenbroek 197e985b929SDavid van Moolenbroek /** 198e985b929SDavid van Moolenbroek @name signal_* macros 199e985b929SDavid van Moolenbroek 200e985b929SDavid van Moolenbroek @deprecated These macros are deprecated because their naming is inconsistent 201e985b929SDavid van Moolenbroek with the rest of Libevent. Use the evsignal_* macros instead. 202e985b929SDavid van Moolenbroek @{ 203e985b929SDavid van Moolenbroek */ 204e985b929SDavid van Moolenbroek #define signal_add(ev, tv) event_add((ev), (tv)) 205e985b929SDavid van Moolenbroek #define signal_set(ev, x, cb, arg) \ 206e985b929SDavid van Moolenbroek event_set((ev), (x), EV_SIGNAL|EV_PERSIST, (cb), (arg)) 207e985b929SDavid van Moolenbroek #define signal_del(ev) event_del(ev) 208e985b929SDavid van Moolenbroek #define signal_pending(ev, tv) event_pending((ev), EV_SIGNAL, (tv)) 209e985b929SDavid van Moolenbroek #define signal_initialized(ev) event_initialized(ev) 210e985b929SDavid van Moolenbroek /**@}*/ 211e985b929SDavid van Moolenbroek 212e985b929SDavid van Moolenbroek #ifndef EVENT_FD 213e985b929SDavid van Moolenbroek /* These macros are obsolete; use event_get_fd and event_get_signal instead. */ 214e985b929SDavid van Moolenbroek #define EVENT_FD(ev) ((int)event_get_fd(ev)) 215e985b929SDavid van Moolenbroek #define EVENT_SIGNAL(ev) event_get_signal(ev) 216e985b929SDavid van Moolenbroek #endif 217e985b929SDavid van Moolenbroek 218e985b929SDavid van Moolenbroek #ifdef __cplusplus 219e985b929SDavid van Moolenbroek } 220e985b929SDavid van Moolenbroek #endif 221e985b929SDavid van Moolenbroek 222e985b929SDavid van Moolenbroek #endif /* _EVENT2_EVENT_COMPAT_H_ */ 223