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