1156952Sume/*
2156952Sume * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
3156952Sume * Copyright (c) 1995-1999 by Internet Software Consortium
4156952Sume *
5156952Sume * Permission to use, copy, modify, and distribute this software for any
6156952Sume * purpose with or without fee is hereby granted, provided that the above
7156952Sume * copyright notice and this permission notice appear in all copies.
8156952Sume *
9156952Sume * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
10156952Sume * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11156952Sume * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
12156952Sume * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13156952Sume * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14156952Sume * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15156952Sume * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16156952Sume */
17156952Sume
18156952Sume/* eventlib.h - exported interfaces for eventlib
19156952Sume * vix 09sep95 [initial]
20156952Sume *
21186090Sume * $Id: eventlib.h,v 1.3.18.3 2008/01/23 02:12:01 marka Exp $
22156952Sume */
23156952Sume
24156952Sume#ifndef _EVENTLIB_H
25156952Sume#define _EVENTLIB_H
26156952Sume
27156952Sume#include <sys/types.h>
28156952Sume#include <sys/uio.h>
29156952Sume#include <sys/time.h>
30156952Sume#include <stdio.h>
31156952Sume
32186090Sume#include <isc/platform.h>
33186090Sume
34156952Sume#ifndef __P
35156952Sume# define __EVENTLIB_P_DEFINED
36156952Sume# ifdef __STDC__
37156952Sume#  define __P(x) x
38156952Sume# else
39156952Sume#  define __P(x) ()
40156952Sume# endif
41156952Sume#endif
42156952Sume
43156952Sume/* In the absence of branded types... */
44156952Sumetypedef struct { void *opaque; } evConnID;
45156952Sumetypedef struct { void *opaque; } evFileID;
46156952Sumetypedef struct { void *opaque; } evStreamID;
47156952Sumetypedef struct { void *opaque; } evTimerID;
48156952Sumetypedef struct { void *opaque; } evWaitID;
49156952Sumetypedef struct { void *opaque; } evContext;
50156952Sumetypedef struct { void *opaque; } evEvent;
51156952Sume
52156952Sume#define	evInitID(id) ((id)->opaque = NULL)
53156952Sume#define	evTestID(id) ((id).opaque != NULL)
54156952Sume
55156952Sumetypedef void (*evConnFunc)__P((evContext, void *, int, const void *, int,
56156952Sume			       const void *, int));
57156952Sumetypedef void (*evFileFunc)__P((evContext, void *, int, int));
58156952Sumetypedef	void (*evStreamFunc)__P((evContext, void *, int, int));
59156952Sumetypedef void (*evTimerFunc)__P((evContext, void *,
60156952Sume				struct timespec, struct timespec));
61156952Sumetypedef	void (*evWaitFunc)__P((evContext, void *, const void *));
62156952Sume
63156952Sumetypedef	struct { unsigned char mask[256/8]; } evByteMask;
64156952Sume#define	EV_BYTEMASK_BYTE(b) ((b) / 8)
65156952Sume#define	EV_BYTEMASK_MASK(b) (1 << ((b) % 8))
66156952Sume#define	EV_BYTEMASK_SET(bm, b) \
67156952Sume	((bm).mask[EV_BYTEMASK_BYTE(b)] |= EV_BYTEMASK_MASK(b))
68156952Sume#define	EV_BYTEMASK_CLR(bm, b) \
69156952Sume	((bm).mask[EV_BYTEMASK_BYTE(b)] &= ~EV_BYTEMASK_MASK(b))
70156952Sume#define	EV_BYTEMASK_TST(bm, b) \
71156952Sume	((bm).mask[EV_BYTEMASK_BYTE(b)] & EV_BYTEMASK_MASK(b))
72156952Sume
73156952Sume#define	EV_POLL		1
74156952Sume#define	EV_WAIT		2
75156952Sume#define	EV_NULL		4
76156952Sume
77156952Sume#define	EV_READ		1
78156952Sume#define	EV_WRITE	2
79156952Sume#define	EV_EXCEPT	4
80156952Sume
81156952Sume#define EV_WASNONBLOCKING 8	/* Internal library use. */
82156952Sume
83156952Sume/* eventlib.c */
84156952Sume#define evCreate	__evCreate
85156952Sume#define evSetDebug	__evSetDebug
86156952Sume#define evDestroy	__evDestroy
87156952Sume#define evGetNext	__evGetNext
88156952Sume#define evDispatch	__evDispatch
89156952Sume#define evDrop		__evDrop
90156952Sume#define evMainLoop	__evMainLoop
91156952Sume#define evHighestFD	__evHighestFD
92156952Sume#define evGetOption	__evGetOption
93156952Sume#define evSetOption	__evSetOption
94156952Sume
95156952Sumeint  evCreate __P((evContext *));
96156952Sumevoid evSetDebug __P((evContext, int, FILE *));
97156952Sumeint  evDestroy __P((evContext));
98156952Sumeint  evGetNext __P((evContext, evEvent *, int));
99156952Sumeint  evDispatch __P((evContext, evEvent));
100156952Sumevoid evDrop __P((evContext, evEvent));
101156952Sumeint  evMainLoop __P((evContext));
102156952Sumeint  evHighestFD __P((evContext));
103156952Sumeint  evGetOption __P((evContext *, const char *, int *));
104156952Sumeint  evSetOption __P((evContext *, const char *, int));
105156952Sume
106156952Sume/* ev_connects.c */
107156952Sume#define evListen	__evListen
108156952Sume#define evConnect	__evConnect
109156952Sume#define evCancelConn	__evCancelConn
110156952Sume#define evHold		__evHold
111156952Sume#define evUnhold	__evUnhold
112156952Sume#define evTryAccept	__evTryAccept
113156952Sume
114156952Sumeint evListen __P((evContext, int, int, evConnFunc, void *, evConnID *));
115156952Sumeint evConnect __P((evContext, int, const void *, int,
116156952Sume		   evConnFunc, void *, evConnID *));
117156952Sumeint evCancelConn __P((evContext, evConnID));
118156952Sumeint evHold __P((evContext, evConnID));
119156952Sumeint evUnhold __P((evContext, evConnID));
120156952Sumeint evTryAccept __P((evContext, evConnID, int *));
121156952Sume
122156952Sume/* ev_files.c */
123156952Sume#define evSelectFD	__evSelectFD
124156952Sume#define evDeselectFD	__evDeselectFD
125156952Sume
126156952Sumeint evSelectFD __P((evContext, int, int, evFileFunc, void *, evFileID *));
127156952Sumeint evDeselectFD __P((evContext, evFileID));
128156952Sume
129156952Sume/* ev_streams.c */
130156952Sume#define evConsIovec	__evConsIovec
131156952Sume#define evWrite		__evWrite
132156952Sume#define evRead		__evRead
133156952Sume#define evTimeRW	__evTimeRW
134156952Sume#define evUntimeRW	__evUntimeRW
135156952Sume#define	evCancelRW	__evCancelRW
136156952Sume
137156952Sumestruct iovec evConsIovec __P((void *, size_t));
138156952Sumeint evWrite __P((evContext, int, const struct iovec *, int,
139156952Sume		 evStreamFunc func, void *, evStreamID *));
140156952Sumeint evRead __P((evContext, int, const struct iovec *, int,
141156952Sume		evStreamFunc func, void *, evStreamID *));
142156952Sumeint evTimeRW __P((evContext, evStreamID, evTimerID timer));
143156952Sumeint evUntimeRW __P((evContext, evStreamID));
144156952Sumeint evCancelRW __P((evContext, evStreamID));
145156952Sume
146156952Sume/* ev_timers.c */
147156952Sume#define evConsTime	__evConsTime
148156952Sume#define evAddTime	__evAddTime
149156952Sume#define evSubTime	__evSubTime
150156952Sume#define evCmpTime	__evCmpTime
151156952Sume#define	evTimeSpec	__evTimeSpec
152156952Sume#define	evTimeVal	__evTimeVal
153156952Sume
154156952Sume#define evNowTime		__evNowTime
155156952Sume#define evUTCTime		__evUTCTime
156156952Sume#define evLastEventTime		__evLastEventTime
157156952Sume#define evSetTimer		__evSetTimer
158156952Sume#define evClearTimer		__evClearTimer
159156952Sume#define evConfigTimer		__evConfigTimer
160156952Sume#define evResetTimer		__evResetTimer
161156952Sume#define evSetIdleTimer		__evSetIdleTimer
162156952Sume#define evClearIdleTimer	__evClearIdleTimer
163156952Sume#define evResetIdleTimer	__evResetIdleTimer
164156952Sume#define evTouchIdleTimer	__evTouchIdleTimer
165156952Sume
166156952Sumestruct timespec evConsTime __P((time_t sec, long nsec));
167156952Sumestruct timespec evAddTime __P((struct timespec, struct timespec));
168156952Sumestruct timespec evSubTime __P((struct timespec, struct timespec));
169156952Sumestruct timespec evNowTime __P((void));
170156952Sumestruct timespec evUTCTime __P((void));
171156952Sumestruct timespec evLastEventTime __P((evContext));
172156952Sumestruct timespec evTimeSpec __P((struct timeval));
173156952Sumestruct timeval evTimeVal __P((struct timespec));
174156952Sumeint evCmpTime __P((struct timespec, struct timespec));
175156952Sumeint evSetTimer __P((evContext, evTimerFunc, void *, struct timespec,
176156952Sume		    struct timespec, evTimerID *));
177156952Sumeint evClearTimer __P((evContext, evTimerID));
178156952Sumeint evConfigTimer __P((evContext, evTimerID, const char *param,
179156952Sume		      int value));
180156952Sumeint evResetTimer __P((evContext, evTimerID, evTimerFunc, void *,
181156952Sume		      struct timespec, struct timespec));
182156952Sumeint evSetIdleTimer __P((evContext, evTimerFunc, void *, struct timespec,
183156952Sume			evTimerID *));
184156952Sumeint evClearIdleTimer __P((evContext, evTimerID));
185156952Sumeint evResetIdleTimer __P((evContext, evTimerID, evTimerFunc, void *,
186156952Sume			  struct timespec));
187156952Sumeint evTouchIdleTimer __P((evContext, evTimerID));
188156952Sume
189156952Sume/* ev_waits.c */
190156952Sume#define evWaitFor	__evWaitFor
191156952Sume#define evDo		__evDo
192156952Sume#define evUnwait	__evUnwait
193156952Sume#define evDefer		__evDefer
194156952Sume
195156952Sumeint evWaitFor __P((evContext, const void *, evWaitFunc, void *, evWaitID *));
196156952Sumeint evDo __P((evContext, const void *));
197156952Sumeint evUnwait __P((evContext, evWaitID));
198156952Sumeint evDefer __P((evContext, evWaitFunc, void *));
199156952Sume
200156952Sume#ifdef __EVENTLIB_P_DEFINED
201156952Sume# undef __P
202156952Sume#endif
203156952Sume
204156952Sume#endif /*_EVENTLIB_H*/
205170242Sume
206170242Sume/*! \file */
207