14126Szf162725 /* 2*6860Sdanmcd * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 34126Szf162725 * Use is subject to license terms. 44126Szf162725 */ 54126Szf162725 64126Szf162725 /* 74126Szf162725 * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi> 84126Szf162725 * Sun elects to license this software under the BSD license. 94126Szf162725 * See README for more details. 104126Szf162725 */ 114126Szf162725 #ifndef __ELOOP_H 124126Szf162725 #define __ELOOP_H 134126Szf162725 144126Szf162725 #pragma ident "%Z%%M% %I% %E% SMI" 154126Szf162725 164126Szf162725 #ifdef __cplusplus 174126Szf162725 extern "C" { 184126Szf162725 #endif 194126Szf162725 204126Szf162725 /* Magic number for eloop_cancel_timeout() */ 214126Szf162725 #define ELOOP_ALL_CTX (void *) -1 224126Szf162725 #define MAX_POLLFDS 32 234126Szf162725 244126Szf162725 struct eloop_sock { 254126Szf162725 int sock; 264126Szf162725 void *eloop_data; 274126Szf162725 void *user_data; 284126Szf162725 void (*handler)(int, void *, void *); 294126Szf162725 }; 304126Szf162725 314126Szf162725 struct eloop_timeout { 324126Szf162725 struct timeval time; 334126Szf162725 void *eloop_data; 344126Szf162725 void *user_data; 354126Szf162725 void (*handler)(void *, void *); 364126Szf162725 struct eloop_timeout *next; 374126Szf162725 }; 384126Szf162725 394126Szf162725 struct eloop_signal { 404126Szf162725 int sig; 414126Szf162725 void *user_data; 424126Szf162725 void (*handler)(int, void *, void *); 434126Szf162725 int signaled; 444126Szf162725 }; 454126Szf162725 464126Szf162725 struct eloop_data { 474126Szf162725 void *user_data; 484126Szf162725 494126Szf162725 int max_sock, reader_count; 504126Szf162725 struct eloop_sock *readers; 514126Szf162725 524126Szf162725 struct eloop_timeout *timeout; 534126Szf162725 544126Szf162725 int signal_count; 554126Szf162725 struct eloop_signal *signals; 564126Szf162725 int signaled; 574126Szf162725 584126Szf162725 int terminate; 594126Szf162725 }; 604126Szf162725 614126Szf162725 void eloop_init(void *); 624126Szf162725 634126Szf162725 int eloop_register_read_sock(int, 644126Szf162725 void (*handler)(int, void *, void *), void *, void *); 654126Szf162725 664126Szf162725 void eloop_unregister_read_sock(int); 674126Szf162725 684126Szf162725 int eloop_register_timeout(unsigned int, unsigned int, 694126Szf162725 void (*handler)(void *, void *), void *, void *); 704126Szf162725 714126Szf162725 void eloop_cancel_timeout(void (*handler)(void *, void *), void *, void *); 724126Szf162725 int eloop_register_signal(int, void (*handler)(int, void *, void *), void *); 734126Szf162725 744126Szf162725 void eloop_run(void); 754126Szf162725 void eloop_terminate(void); 764126Szf162725 void eloop_destroy(void); 774126Szf162725 784126Szf162725 #ifdef __cplusplus 794126Szf162725 } 804126Szf162725 #endif 814126Szf162725 824126Szf162725 #endif /* __ELOOP_H */ 83