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