1 /* 2 Unix SMB/CIFS implementation. 3 4 generalised event loop handling 5 6 Copyright (C) Andrew Tridgell 2005 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21 */ 22 23 #ifndef __EVENTS_H__ 24 #define __EVENTS_H__ 25 26 struct event_context; 27 struct event_ops; 28 struct fd_event; 29 struct timed_event; 30 31 /* event handler types */ 32 typedef void (*event_fd_handler_t)(struct event_context *, struct fd_event *, 33 uint16_t , void *); 34 typedef void (*event_timed_handler_t)(struct event_context *, struct timed_event *, 35 struct timeval , void *); 36 37 struct event_context *event_context_init(TALLOC_CTX *mem_ctx); 38 struct event_context *event_context_init_ops(TALLOC_CTX *mem_ctx, const struct event_ops *ops, void *private_data); 39 40 struct fd_event *event_add_fd(struct event_context *ev, TALLOC_CTX *mem_ctx, 41 int fd, uint16_t flags, event_fd_handler_t handler, 42 void *private); 43 44 struct timed_event *event_add_timed(struct event_context *ev, TALLOC_CTX *mem_ctx, 45 struct timeval next_event, 46 event_timed_handler_t handler, 47 void *private); 48 49 int event_loop_once(struct event_context *ev); 50 int event_loop_wait(struct event_context *ev); 51 52 uint16_t event_get_fd_flags(struct fd_event *fde); 53 void event_set_fd_flags(struct fd_event *fde, uint16_t flags); 54 55 struct event_context *event_context_find(TALLOC_CTX *mem_ctx); 56 57 /* bits for file descriptor event flags */ 58 #define EVENT_FD_READ 1 59 #define EVENT_FD_WRITE 2 60 61 #define EVENT_FD_WRITEABLE(fde) \ 62 event_set_fd_flags(fde, event_get_fd_flags(fde) | EVENT_FD_WRITE) 63 #define EVENT_FD_READABLE(fde) \ 64 event_set_fd_flags(fde, event_get_fd_flags(fde) | EVENT_FD_READ) 65 66 #define EVENT_FD_NOT_WRITEABLE(fde) \ 67 event_set_fd_flags(fde, event_get_fd_flags(fde) & ~EVENT_FD_WRITE) 68 #define EVENT_FD_NOT_READABLE(fde) \ 69 event_set_fd_flags(fde, event_get_fd_flags(fde) & ~EVENT_FD_READ) 70 71 #endif /* __EVENTS_H__ */ 72