xref: /minix3/external/bsd/libevent/dist/include/event2/event_struct.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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