xref: /titanic_50/usr/src/cmd/cmd-inet/usr.lib/wpad/eloop.h (revision 39de7e401c4775b362a283e4714b49f6859eecab)
1a399b765Szf162725 /*
2*39de7e40Sdanmcd  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
3a399b765Szf162725  * Use is subject to license terms.
4a399b765Szf162725  */
5a399b765Szf162725 
6a399b765Szf162725 /*
7a399b765Szf162725  * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi>
8a399b765Szf162725  * Sun elects to license this software under the BSD license.
9a399b765Szf162725  * See README for more details.
10a399b765Szf162725  */
11a399b765Szf162725 #ifndef __ELOOP_H
12a399b765Szf162725 #define	__ELOOP_H
13a399b765Szf162725 
14a399b765Szf162725 #pragma ident	"%Z%%M%	%I%	%E% SMI"
15a399b765Szf162725 
16a399b765Szf162725 #ifdef	__cplusplus
17a399b765Szf162725 extern "C" {
18a399b765Szf162725 #endif
19a399b765Szf162725 
20a399b765Szf162725 /* Magic number for eloop_cancel_timeout() */
21a399b765Szf162725 #define	ELOOP_ALL_CTX		(void *) -1
22a399b765Szf162725 #define	MAX_POLLFDS		32
23a399b765Szf162725 
24a399b765Szf162725 struct eloop_sock {
25a399b765Szf162725 	int sock;
26a399b765Szf162725 	void *eloop_data;
27a399b765Szf162725 	void *user_data;
28a399b765Szf162725 	void (*handler)(int, void *, void *);
29a399b765Szf162725 };
30a399b765Szf162725 
31a399b765Szf162725 struct eloop_timeout {
32a399b765Szf162725 	struct timeval time;
33a399b765Szf162725 	void *eloop_data;
34a399b765Szf162725 	void *user_data;
35a399b765Szf162725 	void (*handler)(void *, void *);
36a399b765Szf162725 	struct eloop_timeout *next;
37a399b765Szf162725 };
38a399b765Szf162725 
39a399b765Szf162725 struct eloop_signal {
40a399b765Szf162725 	int sig;
41a399b765Szf162725 	void *user_data;
42a399b765Szf162725 	void (*handler)(int, void *, void *);
43a399b765Szf162725 	int signaled;
44a399b765Szf162725 };
45a399b765Szf162725 
46a399b765Szf162725 struct eloop_data {
47a399b765Szf162725 	void *user_data;
48a399b765Szf162725 
49a399b765Szf162725 	int max_sock, reader_count;
50a399b765Szf162725 	struct eloop_sock *readers;
51a399b765Szf162725 
52a399b765Szf162725 	struct eloop_timeout *timeout;
53a399b765Szf162725 
54a399b765Szf162725 	int signal_count;
55a399b765Szf162725 	struct eloop_signal *signals;
56a399b765Szf162725 	int signaled;
57a399b765Szf162725 
58a399b765Szf162725 	int terminate;
59a399b765Szf162725 };
60a399b765Szf162725 
61a399b765Szf162725 void eloop_init(void *);
62a399b765Szf162725 
63a399b765Szf162725 int eloop_register_read_sock(int,
64a399b765Szf162725 	void (*handler)(int, void *, void *), void *, void *);
65a399b765Szf162725 
66a399b765Szf162725 void eloop_unregister_read_sock(int);
67a399b765Szf162725 
68a399b765Szf162725 int eloop_register_timeout(unsigned int, unsigned int,
69a399b765Szf162725 	void (*handler)(void *, void *), void *, void *);
70a399b765Szf162725 
71a399b765Szf162725 void eloop_cancel_timeout(void (*handler)(void *, void *), void *, void *);
72a399b765Szf162725 int eloop_register_signal(int, void (*handler)(int, void *, void *), void *);
73a399b765Szf162725 
74a399b765Szf162725 void eloop_run(void);
75a399b765Szf162725 void eloop_terminate(void);
76a399b765Szf162725 void eloop_destroy(void);
77a399b765Szf162725 
78a399b765Szf162725 #ifdef __cplusplus
79a399b765Szf162725 }
80a399b765Szf162725 #endif
81a399b765Szf162725 
82a399b765Szf162725 #endif /* __ELOOP_H */
83