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