1*86d7f5d3SJohn Marino /* 2*86d7f5d3SJohn Marino * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") 3*86d7f5d3SJohn Marino * Copyright (c) 1995-1999 by Internet Software Consortium 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * Permission to use, copy, modify, and distribute this software for any 6*86d7f5d3SJohn Marino * purpose with or without fee is hereby granted, provided that the above 7*86d7f5d3SJohn Marino * copyright notice and this permission notice appear in all copies. 8*86d7f5d3SJohn Marino * 9*86d7f5d3SJohn Marino * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES 10*86d7f5d3SJohn Marino * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*86d7f5d3SJohn Marino * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR 12*86d7f5d3SJohn Marino * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*86d7f5d3SJohn Marino * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*86d7f5d3SJohn Marino * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 15*86d7f5d3SJohn Marino * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*86d7f5d3SJohn Marino */ 17*86d7f5d3SJohn Marino 18*86d7f5d3SJohn Marino /* eventlib.h - exported interfaces for eventlib 19*86d7f5d3SJohn Marino * vix 09sep95 [initial] 20*86d7f5d3SJohn Marino * 21*86d7f5d3SJohn Marino * $Id: eventlib.h,v 1.5.574.1 2008/01/23 02:08:11 marka Exp $ 22*86d7f5d3SJohn Marino */ 23*86d7f5d3SJohn Marino 24*86d7f5d3SJohn Marino #ifndef _EVENTLIB_H 25*86d7f5d3SJohn Marino #define _EVENTLIB_H 26*86d7f5d3SJohn Marino 27*86d7f5d3SJohn Marino #include <sys/types.h> 28*86d7f5d3SJohn Marino #include <sys/uio.h> 29*86d7f5d3SJohn Marino #include <sys/time.h> 30*86d7f5d3SJohn Marino #include <stdio.h> 31*86d7f5d3SJohn Marino 32*86d7f5d3SJohn Marino #include <isc/platform.h> 33*86d7f5d3SJohn Marino 34*86d7f5d3SJohn Marino #ifndef __P 35*86d7f5d3SJohn Marino # define __EVENTLIB_P_DEFINED 36*86d7f5d3SJohn Marino # ifdef __STDC__ 37*86d7f5d3SJohn Marino # define __P(x) x 38*86d7f5d3SJohn Marino # else 39*86d7f5d3SJohn Marino # define __P(x) () 40*86d7f5d3SJohn Marino # endif 41*86d7f5d3SJohn Marino #endif 42*86d7f5d3SJohn Marino 43*86d7f5d3SJohn Marino /* In the absence of branded types... */ 44*86d7f5d3SJohn Marino typedef struct { void *opaque; } evConnID; 45*86d7f5d3SJohn Marino typedef struct { void *opaque; } evFileID; 46*86d7f5d3SJohn Marino typedef struct { void *opaque; } evStreamID; 47*86d7f5d3SJohn Marino typedef struct { void *opaque; } evTimerID; 48*86d7f5d3SJohn Marino typedef struct { void *opaque; } evWaitID; 49*86d7f5d3SJohn Marino typedef struct { void *opaque; } evContext; 50*86d7f5d3SJohn Marino typedef struct { void *opaque; } evEvent; 51*86d7f5d3SJohn Marino 52*86d7f5d3SJohn Marino #define evInitID(id) ((id)->opaque = NULL) 53*86d7f5d3SJohn Marino #define evTestID(id) ((id).opaque != NULL) 54*86d7f5d3SJohn Marino 55*86d7f5d3SJohn Marino typedef void (*evConnFunc)__P((evContext, void *, int, const void *, int, 56*86d7f5d3SJohn Marino const void *, int)); 57*86d7f5d3SJohn Marino typedef void (*evFileFunc)__P((evContext, void *, int, int)); 58*86d7f5d3SJohn Marino typedef void (*evStreamFunc)__P((evContext, void *, int, int)); 59*86d7f5d3SJohn Marino typedef void (*evTimerFunc)__P((evContext, void *, 60*86d7f5d3SJohn Marino struct timespec, struct timespec)); 61*86d7f5d3SJohn Marino typedef void (*evWaitFunc)__P((evContext, void *, const void *)); 62*86d7f5d3SJohn Marino 63*86d7f5d3SJohn Marino typedef struct { unsigned char mask[256/8]; } evByteMask; 64*86d7f5d3SJohn Marino #define EV_BYTEMASK_BYTE(b) ((b) / 8) 65*86d7f5d3SJohn Marino #define EV_BYTEMASK_MASK(b) (1 << ((b) % 8)) 66*86d7f5d3SJohn Marino #define EV_BYTEMASK_SET(bm, b) \ 67*86d7f5d3SJohn Marino ((bm).mask[EV_BYTEMASK_BYTE(b)] |= EV_BYTEMASK_MASK(b)) 68*86d7f5d3SJohn Marino #define EV_BYTEMASK_CLR(bm, b) \ 69*86d7f5d3SJohn Marino ((bm).mask[EV_BYTEMASK_BYTE(b)] &= ~EV_BYTEMASK_MASK(b)) 70*86d7f5d3SJohn Marino #define EV_BYTEMASK_TST(bm, b) \ 71*86d7f5d3SJohn Marino ((bm).mask[EV_BYTEMASK_BYTE(b)] & EV_BYTEMASK_MASK(b)) 72*86d7f5d3SJohn Marino 73*86d7f5d3SJohn Marino #define EV_POLL 1 74*86d7f5d3SJohn Marino #define EV_WAIT 2 75*86d7f5d3SJohn Marino #define EV_NULL 4 76*86d7f5d3SJohn Marino 77*86d7f5d3SJohn Marino #define EV_READ 1 78*86d7f5d3SJohn Marino #define EV_WRITE 2 79*86d7f5d3SJohn Marino #define EV_EXCEPT 4 80*86d7f5d3SJohn Marino 81*86d7f5d3SJohn Marino #define EV_WASNONBLOCKING 8 /* Internal library use. */ 82*86d7f5d3SJohn Marino 83*86d7f5d3SJohn Marino /* eventlib.c */ 84*86d7f5d3SJohn Marino #define evCreate __evCreate 85*86d7f5d3SJohn Marino #define evSetDebug __evSetDebug 86*86d7f5d3SJohn Marino #define evDestroy __evDestroy 87*86d7f5d3SJohn Marino #define evGetNext __evGetNext 88*86d7f5d3SJohn Marino #define evDispatch __evDispatch 89*86d7f5d3SJohn Marino #define evDrop __evDrop 90*86d7f5d3SJohn Marino #define evMainLoop __evMainLoop 91*86d7f5d3SJohn Marino #define evHighestFD __evHighestFD 92*86d7f5d3SJohn Marino #define evGetOption __evGetOption 93*86d7f5d3SJohn Marino #define evSetOption __evSetOption 94*86d7f5d3SJohn Marino 95*86d7f5d3SJohn Marino int evCreate __P((evContext *)); 96*86d7f5d3SJohn Marino void evSetDebug __P((evContext, int, FILE *)); 97*86d7f5d3SJohn Marino int evDestroy __P((evContext)); 98*86d7f5d3SJohn Marino int evGetNext __P((evContext, evEvent *, int)); 99*86d7f5d3SJohn Marino int evDispatch __P((evContext, evEvent)); 100*86d7f5d3SJohn Marino void evDrop __P((evContext, evEvent)); 101*86d7f5d3SJohn Marino int evMainLoop __P((evContext)); 102*86d7f5d3SJohn Marino int evHighestFD __P((evContext)); 103*86d7f5d3SJohn Marino int evGetOption __P((evContext *, const char *, int *)); 104*86d7f5d3SJohn Marino int evSetOption __P((evContext *, const char *, int)); 105*86d7f5d3SJohn Marino 106*86d7f5d3SJohn Marino /* ev_connects.c */ 107*86d7f5d3SJohn Marino #define evListen __evListen 108*86d7f5d3SJohn Marino #define evConnect __evConnect 109*86d7f5d3SJohn Marino #define evCancelConn __evCancelConn 110*86d7f5d3SJohn Marino #define evHold __evHold 111*86d7f5d3SJohn Marino #define evUnhold __evUnhold 112*86d7f5d3SJohn Marino #define evTryAccept __evTryAccept 113*86d7f5d3SJohn Marino 114*86d7f5d3SJohn Marino int evListen __P((evContext, int, int, evConnFunc, void *, evConnID *)); 115*86d7f5d3SJohn Marino int evConnect __P((evContext, int, const void *, int, 116*86d7f5d3SJohn Marino evConnFunc, void *, evConnID *)); 117*86d7f5d3SJohn Marino int evCancelConn __P((evContext, evConnID)); 118*86d7f5d3SJohn Marino int evHold __P((evContext, evConnID)); 119*86d7f5d3SJohn Marino int evUnhold __P((evContext, evConnID)); 120*86d7f5d3SJohn Marino int evTryAccept __P((evContext, evConnID, int *)); 121*86d7f5d3SJohn Marino 122*86d7f5d3SJohn Marino /* ev_files.c */ 123*86d7f5d3SJohn Marino #define evSelectFD __evSelectFD 124*86d7f5d3SJohn Marino #define evDeselectFD __evDeselectFD 125*86d7f5d3SJohn Marino 126*86d7f5d3SJohn Marino int evSelectFD __P((evContext, int, int, evFileFunc, void *, evFileID *)); 127*86d7f5d3SJohn Marino int evDeselectFD __P((evContext, evFileID)); 128*86d7f5d3SJohn Marino 129*86d7f5d3SJohn Marino /* ev_streams.c */ 130*86d7f5d3SJohn Marino #define evConsIovec __evConsIovec 131*86d7f5d3SJohn Marino #define evWrite __evWrite 132*86d7f5d3SJohn Marino #define evRead __evRead 133*86d7f5d3SJohn Marino #define evTimeRW __evTimeRW 134*86d7f5d3SJohn Marino #define evUntimeRW __evUntimeRW 135*86d7f5d3SJohn Marino #define evCancelRW __evCancelRW 136*86d7f5d3SJohn Marino 137*86d7f5d3SJohn Marino struct iovec evConsIovec __P((void *, size_t)); 138*86d7f5d3SJohn Marino int evWrite __P((evContext, int, const struct iovec *, int, 139*86d7f5d3SJohn Marino evStreamFunc func, void *, evStreamID *)); 140*86d7f5d3SJohn Marino int evRead __P((evContext, int, const struct iovec *, int, 141*86d7f5d3SJohn Marino evStreamFunc func, void *, evStreamID *)); 142*86d7f5d3SJohn Marino int evTimeRW __P((evContext, evStreamID, evTimerID timer)); 143*86d7f5d3SJohn Marino int evUntimeRW __P((evContext, evStreamID)); 144*86d7f5d3SJohn Marino int evCancelRW __P((evContext, evStreamID)); 145*86d7f5d3SJohn Marino 146*86d7f5d3SJohn Marino /* ev_timers.c */ 147*86d7f5d3SJohn Marino #define evConsTime __evConsTime 148*86d7f5d3SJohn Marino #define evAddTime __evAddTime 149*86d7f5d3SJohn Marino #define evSubTime __evSubTime 150*86d7f5d3SJohn Marino #define evCmpTime __evCmpTime 151*86d7f5d3SJohn Marino #define evTimeSpec __evTimeSpec 152*86d7f5d3SJohn Marino #define evTimeVal __evTimeVal 153*86d7f5d3SJohn Marino 154*86d7f5d3SJohn Marino #define evNowTime __evNowTime 155*86d7f5d3SJohn Marino #define evUTCTime __evUTCTime 156*86d7f5d3SJohn Marino #define evLastEventTime __evLastEventTime 157*86d7f5d3SJohn Marino #define evSetTimer __evSetTimer 158*86d7f5d3SJohn Marino #define evClearTimer __evClearTimer 159*86d7f5d3SJohn Marino #define evConfigTimer __evConfigTimer 160*86d7f5d3SJohn Marino #define evResetTimer __evResetTimer 161*86d7f5d3SJohn Marino #define evSetIdleTimer __evSetIdleTimer 162*86d7f5d3SJohn Marino #define evClearIdleTimer __evClearIdleTimer 163*86d7f5d3SJohn Marino #define evResetIdleTimer __evResetIdleTimer 164*86d7f5d3SJohn Marino #define evTouchIdleTimer __evTouchIdleTimer 165*86d7f5d3SJohn Marino 166*86d7f5d3SJohn Marino struct timespec evConsTime __P((time_t sec, long nsec)); 167*86d7f5d3SJohn Marino struct timespec evAddTime __P((struct timespec, struct timespec)); 168*86d7f5d3SJohn Marino struct timespec evSubTime __P((struct timespec, struct timespec)); 169*86d7f5d3SJohn Marino struct timespec evNowTime __P((void)); 170*86d7f5d3SJohn Marino struct timespec evUTCTime __P((void)); 171*86d7f5d3SJohn Marino struct timespec evLastEventTime __P((evContext)); 172*86d7f5d3SJohn Marino struct timespec evTimeSpec __P((struct timeval)); 173*86d7f5d3SJohn Marino struct timeval evTimeVal __P((struct timespec)); 174*86d7f5d3SJohn Marino int evCmpTime __P((struct timespec, struct timespec)); 175*86d7f5d3SJohn Marino int evSetTimer __P((evContext, evTimerFunc, void *, struct timespec, 176*86d7f5d3SJohn Marino struct timespec, evTimerID *)); 177*86d7f5d3SJohn Marino int evClearTimer __P((evContext, evTimerID)); 178*86d7f5d3SJohn Marino int evConfigTimer __P((evContext, evTimerID, const char *param, 179*86d7f5d3SJohn Marino int value)); 180*86d7f5d3SJohn Marino int evResetTimer __P((evContext, evTimerID, evTimerFunc, void *, 181*86d7f5d3SJohn Marino struct timespec, struct timespec)); 182*86d7f5d3SJohn Marino int evSetIdleTimer __P((evContext, evTimerFunc, void *, struct timespec, 183*86d7f5d3SJohn Marino evTimerID *)); 184*86d7f5d3SJohn Marino int evClearIdleTimer __P((evContext, evTimerID)); 185*86d7f5d3SJohn Marino int evResetIdleTimer __P((evContext, evTimerID, evTimerFunc, void *, 186*86d7f5d3SJohn Marino struct timespec)); 187*86d7f5d3SJohn Marino int evTouchIdleTimer __P((evContext, evTimerID)); 188*86d7f5d3SJohn Marino 189*86d7f5d3SJohn Marino /* ev_waits.c */ 190*86d7f5d3SJohn Marino #define evWaitFor __evWaitFor 191*86d7f5d3SJohn Marino #define evDo __evDo 192*86d7f5d3SJohn Marino #define evUnwait __evUnwait 193*86d7f5d3SJohn Marino #define evDefer __evDefer 194*86d7f5d3SJohn Marino 195*86d7f5d3SJohn Marino int evWaitFor __P((evContext, const void *, evWaitFunc, void *, evWaitID *)); 196*86d7f5d3SJohn Marino int evDo __P((evContext, const void *)); 197*86d7f5d3SJohn Marino int evUnwait __P((evContext, evWaitID)); 198*86d7f5d3SJohn Marino int evDefer __P((evContext, evWaitFunc, void *)); 199*86d7f5d3SJohn Marino 200*86d7f5d3SJohn Marino #ifdef __EVENTLIB_P_DEFINED 201*86d7f5d3SJohn Marino # undef __P 202*86d7f5d3SJohn Marino #endif 203*86d7f5d3SJohn Marino 204*86d7f5d3SJohn Marino #endif /*_EVENTLIB_H*/ 205*86d7f5d3SJohn Marino 206*86d7f5d3SJohn Marino /*! \file */ 207