xref: /onnv-gate/usr/src/cmd/cmd-inet/usr.lib/wpad/eloop.h (revision 4126:31652d91f33e)
1*4126Szf162725 /*
2*4126Szf162725  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
3*4126Szf162725  * Use is subject to license terms.
4*4126Szf162725  */
5*4126Szf162725 
6*4126Szf162725 /*
7*4126Szf162725  * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi>
8*4126Szf162725  * Sun elects to license this software under the BSD license.
9*4126Szf162725  * See README for more details.
10*4126Szf162725  */
11*4126Szf162725 #ifndef __ELOOP_H
12*4126Szf162725 #define	__ELOOP_H
13*4126Szf162725 
14*4126Szf162725 #pragma ident	"%Z%%M%	%I%	%E% SMI"
15*4126Szf162725 
16*4126Szf162725 #ifdef	__cplusplus
17*4126Szf162725 extern "C" {
18*4126Szf162725 #endif
19*4126Szf162725 
20*4126Szf162725 #ifndef timersub
21*4126Szf162725 #define	timersub(tvp, uvp, vvp)						\
22*4126Szf162725 	do								\
23*4126Szf162725 	{								\
24*4126Szf162725 		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
25*4126Szf162725 		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\
26*4126Szf162725 		if ((vvp)->tv_usec < 0)					\
27*4126Szf162725 		{							\
28*4126Szf162725 			(vvp)->tv_sec--;				\
29*4126Szf162725 			(vvp)->tv_usec += 1000000;			\
30*4126Szf162725 		}							\
31*4126Szf162725 	} while (0)
32*4126Szf162725 #endif /* !timersub */
33*4126Szf162725 
34*4126Szf162725 #ifndef timeradd
35*4126Szf162725 #define	timeradd(tvp, uvp, vvp)						\
36*4126Szf162725 	do								\
37*4126Szf162725 	{								\
38*4126Szf162725 		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
39*4126Szf162725 		(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;	\
40*4126Szf162725 		if ((vvp)->tv_usec >= 1000000)				\
41*4126Szf162725 		{							\
42*4126Szf162725 			(vvp)->tv_sec++;				\
43*4126Szf162725 			(vvp)->tv_usec -= 1000000;			\
44*4126Szf162725 		}							\
45*4126Szf162725 	} while (0)
46*4126Szf162725 #endif /* !timeradd */
47*4126Szf162725 
48*4126Szf162725 /* Magic number for eloop_cancel_timeout() */
49*4126Szf162725 #define	ELOOP_ALL_CTX		(void *) -1
50*4126Szf162725 #define	MAX_POLLFDS		32
51*4126Szf162725 
52*4126Szf162725 struct eloop_sock {
53*4126Szf162725 	int sock;
54*4126Szf162725 	void *eloop_data;
55*4126Szf162725 	void *user_data;
56*4126Szf162725 	void (*handler)(int, void *, void *);
57*4126Szf162725 };
58*4126Szf162725 
59*4126Szf162725 struct eloop_timeout {
60*4126Szf162725 	struct timeval time;
61*4126Szf162725 	void *eloop_data;
62*4126Szf162725 	void *user_data;
63*4126Szf162725 	void (*handler)(void *, void *);
64*4126Szf162725 	struct eloop_timeout *next;
65*4126Szf162725 };
66*4126Szf162725 
67*4126Szf162725 struct eloop_signal {
68*4126Szf162725 	int sig;
69*4126Szf162725 	void *user_data;
70*4126Szf162725 	void (*handler)(int, void *, void *);
71*4126Szf162725 	int signaled;
72*4126Szf162725 };
73*4126Szf162725 
74*4126Szf162725 struct eloop_data {
75*4126Szf162725 	void *user_data;
76*4126Szf162725 
77*4126Szf162725 	int max_sock, reader_count;
78*4126Szf162725 	struct eloop_sock *readers;
79*4126Szf162725 
80*4126Szf162725 	struct eloop_timeout *timeout;
81*4126Szf162725 
82*4126Szf162725 	int signal_count;
83*4126Szf162725 	struct eloop_signal *signals;
84*4126Szf162725 	int signaled;
85*4126Szf162725 
86*4126Szf162725 	int terminate;
87*4126Szf162725 };
88*4126Szf162725 
89*4126Szf162725 void eloop_init(void *);
90*4126Szf162725 
91*4126Szf162725 int eloop_register_read_sock(int,
92*4126Szf162725 	void (*handler)(int, void *, void *), void *, void *);
93*4126Szf162725 
94*4126Szf162725 void eloop_unregister_read_sock(int);
95*4126Szf162725 
96*4126Szf162725 int eloop_register_timeout(unsigned int, unsigned int,
97*4126Szf162725 	void (*handler)(void *, void *), void *, void *);
98*4126Szf162725 
99*4126Szf162725 void eloop_cancel_timeout(void (*handler)(void *, void *), void *, void *);
100*4126Szf162725 int eloop_register_signal(int, void (*handler)(int, void *, void *), void *);
101*4126Szf162725 
102*4126Szf162725 void eloop_run(void);
103*4126Szf162725 void eloop_terminate(void);
104*4126Szf162725 void eloop_destroy(void);
105*4126Szf162725 
106*4126Szf162725 #ifdef __cplusplus
107*4126Szf162725 }
108*4126Szf162725 #endif
109*4126Szf162725 
110*4126Szf162725 #endif /* __ELOOP_H */
111