1*0a6a1f1dSLionel Sambuc /* $NetBSD: event_struct.h,v 1.1.1.2 2015/01/29 06:38:27 spz Exp $ */ 2*0a6a1f1dSLionel Sambuc /* $NetBSD: event_struct.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_STRUCT_H_ 30e985b929SDavid van Moolenbroek #define _EVENT2_EVENT_STRUCT_H_ 31e985b929SDavid van Moolenbroek 32e985b929SDavid van Moolenbroek /** @file event2/event_struct.h 33e985b929SDavid van Moolenbroek 34e985b929SDavid van Moolenbroek Structures used by event.h. Using these structures directly WILL harm 35e985b929SDavid van Moolenbroek forward compatibility: be careful. 36e985b929SDavid van Moolenbroek 37e985b929SDavid van Moolenbroek No field declared in this file should be used directly in user code. Except 38e985b929SDavid van Moolenbroek for historical reasons, these fields would not be exposed at all. 39e985b929SDavid van Moolenbroek */ 40e985b929SDavid van Moolenbroek 41e985b929SDavid van Moolenbroek #ifdef __cplusplus 42e985b929SDavid van Moolenbroek extern "C" { 43e985b929SDavid van Moolenbroek #endif 44e985b929SDavid van Moolenbroek 45e985b929SDavid van Moolenbroek #include <event2/event-config.h> 46e985b929SDavid van Moolenbroek #ifdef _EVENT_HAVE_SYS_TYPES_H 47e985b929SDavid van Moolenbroek #include <sys/types.h> 48e985b929SDavid van Moolenbroek #endif 49e985b929SDavid van Moolenbroek #ifdef _EVENT_HAVE_SYS_TIME_H 50e985b929SDavid van Moolenbroek #include <sys/time.h> 51e985b929SDavid van Moolenbroek #endif 52e985b929SDavid van Moolenbroek 53e985b929SDavid van Moolenbroek /* For int types. */ 54e985b929SDavid van Moolenbroek #include <event2/util.h> 55e985b929SDavid van Moolenbroek 56e985b929SDavid van Moolenbroek /* For evkeyvalq */ 57e985b929SDavid van Moolenbroek #include <event2/keyvalq_struct.h> 58e985b929SDavid van Moolenbroek 59e985b929SDavid van Moolenbroek #define EVLIST_TIMEOUT 0x01 60e985b929SDavid van Moolenbroek #define EVLIST_INSERTED 0x02 61e985b929SDavid van Moolenbroek #define EVLIST_SIGNAL 0x04 62e985b929SDavid van Moolenbroek #define EVLIST_ACTIVE 0x08 63e985b929SDavid van Moolenbroek #define EVLIST_INTERNAL 0x10 64e985b929SDavid van Moolenbroek #define EVLIST_INIT 0x80 65e985b929SDavid van Moolenbroek 66e985b929SDavid van Moolenbroek /* EVLIST_X_ Private space: 0x1000-0xf000 */ 67e985b929SDavid van Moolenbroek #define EVLIST_ALL (0xf000 | 0x9f) 68e985b929SDavid van Moolenbroek 69e985b929SDavid van Moolenbroek /* Fix so that people don't have to run with <sys/queue.h> */ 70e985b929SDavid van Moolenbroek #ifndef TAILQ_ENTRY 71e985b929SDavid van Moolenbroek #define _EVENT_DEFINED_TQENTRY 72e985b929SDavid van Moolenbroek #define TAILQ_ENTRY(type) \ 73e985b929SDavid van Moolenbroek struct { \ 74e985b929SDavid van Moolenbroek struct type *tqe_next; /* next element */ \ 75e985b929SDavid van Moolenbroek struct type **tqe_prev; /* address of previous next element */ \ 76e985b929SDavid van Moolenbroek } 77e985b929SDavid van Moolenbroek #endif /* !TAILQ_ENTRY */ 78e985b929SDavid van Moolenbroek 79e985b929SDavid van Moolenbroek #ifndef TAILQ_HEAD 80e985b929SDavid van Moolenbroek #define _EVENT_DEFINED_TQHEAD 81e985b929SDavid van Moolenbroek #define TAILQ_HEAD(name, type) \ 82e985b929SDavid van Moolenbroek struct name { \ 83e985b929SDavid van Moolenbroek struct type *tqh_first; \ 84e985b929SDavid van Moolenbroek struct type **tqh_last; \ 85e985b929SDavid van Moolenbroek } 86e985b929SDavid van Moolenbroek #endif 87e985b929SDavid van Moolenbroek 88e985b929SDavid van Moolenbroek struct event_base; 89e985b929SDavid van Moolenbroek struct event { 90e985b929SDavid van Moolenbroek TAILQ_ENTRY(event) ev_active_next; 91e985b929SDavid van Moolenbroek TAILQ_ENTRY(event) ev_next; 92e985b929SDavid van Moolenbroek /* for managing timeouts */ 93e985b929SDavid van Moolenbroek union { 94e985b929SDavid van Moolenbroek TAILQ_ENTRY(event) ev_next_with_common_timeout; 95e985b929SDavid van Moolenbroek int min_heap_idx; 96e985b929SDavid van Moolenbroek } ev_timeout_pos; 97e985b929SDavid van Moolenbroek evutil_socket_t ev_fd; 98e985b929SDavid van Moolenbroek 99e985b929SDavid van Moolenbroek struct event_base *ev_base; 100e985b929SDavid van Moolenbroek 101e985b929SDavid van Moolenbroek union { 102e985b929SDavid van Moolenbroek /* used for io events */ 103e985b929SDavid van Moolenbroek struct { 104e985b929SDavid van Moolenbroek TAILQ_ENTRY(event) ev_io_next; 105e985b929SDavid van Moolenbroek struct timeval ev_timeout; 106e985b929SDavid van Moolenbroek } ev_io; 107e985b929SDavid van Moolenbroek 108e985b929SDavid van Moolenbroek /* used by signal events */ 109e985b929SDavid van Moolenbroek struct { 110e985b929SDavid van Moolenbroek TAILQ_ENTRY(event) ev_signal_next; 111e985b929SDavid van Moolenbroek short ev_ncalls; 112e985b929SDavid van Moolenbroek /* Allows deletes in callback */ 113e985b929SDavid van Moolenbroek short *ev_pncalls; 114e985b929SDavid van Moolenbroek } ev_signal; 115e985b929SDavid van Moolenbroek } _ev; 116e985b929SDavid van Moolenbroek 117e985b929SDavid van Moolenbroek short ev_events; 118e985b929SDavid van Moolenbroek short ev_res; /* result passed to event callback */ 119e985b929SDavid van Moolenbroek short ev_flags; 120e985b929SDavid van Moolenbroek ev_uint8_t ev_pri; /* smaller numbers are higher priority */ 121e985b929SDavid van Moolenbroek ev_uint8_t ev_closure; 122e985b929SDavid van Moolenbroek struct timeval ev_timeout; 123e985b929SDavid van Moolenbroek 124e985b929SDavid van Moolenbroek /* allows us to adopt for different types of events */ 125e985b929SDavid van Moolenbroek void (*ev_callback)(evutil_socket_t, short, void *arg); 126e985b929SDavid van Moolenbroek void *ev_arg; 127e985b929SDavid van Moolenbroek }; 128e985b929SDavid van Moolenbroek 129e985b929SDavid van Moolenbroek TAILQ_HEAD (event_list, event); 130e985b929SDavid van Moolenbroek 131e985b929SDavid van Moolenbroek #ifdef _EVENT_DEFINED_TQENTRY 132e985b929SDavid van Moolenbroek #undef TAILQ_ENTRY 133e985b929SDavid van Moolenbroek #endif 134e985b929SDavid van Moolenbroek 135e985b929SDavid van Moolenbroek #ifdef _EVENT_DEFINED_TQHEAD 136e985b929SDavid van Moolenbroek #undef TAILQ_HEAD 137e985b929SDavid van Moolenbroek #endif 138e985b929SDavid van Moolenbroek 139e985b929SDavid van Moolenbroek #ifdef __cplusplus 140e985b929SDavid van Moolenbroek } 141e985b929SDavid van Moolenbroek #endif 142e985b929SDavid van Moolenbroek 143e985b929SDavid van Moolenbroek #endif /* _EVENT2_EVENT_STRUCT_H_ */ 144