]> git.meshlink.io Git - meshlink/blobdiff - src/event.h
Remove support for UNIX signals in the event library.
[meshlink] / src / event.h
index 38a4eb45ee7ccc44f831a75f79896d99c52d802e..90a5905654629c4fcd71ae858cbc6c56cfc5c466 100644 (file)
@@ -1,7 +1,6 @@
 /*
-    event.h -- header for event.c
-    Copyright (C) 2002-2009 Guus Sliepen <guus@tinc-vpn.org>,
-                  2002-2005 Ivo Timmermans
+    event.h -- I/O and timeout event handling
+    Copyright (C) 2014 Guus Sliepen <guus@meshlink.io>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 #ifndef __TINC_EVENT_H__
 #define __TINC_EVENT_H__
 
-#include "avl_tree.h"
+#include "splay_tree.h"
 
-extern avl_tree_t *event_tree;
+#define IO_READ 1
+#define IO_WRITE 2
 
-typedef void (*event_handler_t)(void *);
+typedef struct event_loop_t event_loop_t;
 
-typedef struct event {
-       time_t time;
-       int id;
-       event_handler_t handler;
+typedef void (*io_cb_t)(event_loop_t *loop, void *data, int flags);
+typedef void (*timeout_cb_t)(event_loop_t *loop, void *data);
+
+typedef struct io_t {
+       int fd;
+       int flags;
+       io_cb_t cb;
+       void *data;
+       struct splay_node_t node;
+} io_t;
+
+typedef struct timeout_t {
+       struct timeval tv;
+       timeout_cb_t cb;
        void *data;
-} event_t;
-
-extern void init_events(void);
-extern void exit_events(void);
-extern void expire_events(void);
-extern event_t *new_event(void) __attribute__ ((__malloc__));
-extern void free_event(event_t *);
-extern void event_add(event_t *);
-extern void event_del(event_t *);
-extern event_t *get_expired_event(void);
-extern event_t *peek_next_event(void);
-
-#endif                                                 /* __TINC_EVENT_H__ */
+       struct splay_node_t node;
+} timeout_t;
+
+struct event_loop_t {
+       fd_set readfds;
+       fd_set writefds;
+
+       volatile bool running;
+       struct timeval now;
+       
+       splay_tree_t ios;
+       splay_tree_t timeouts;
+
+       void *data;
+};
+
+extern void io_add(event_loop_t *loop, io_t *io, io_cb_t cb, void *data, int fd, int flags);
+extern void io_del(event_loop_t *loop, io_t *io);
+extern void io_set(event_loop_t *loop, io_t *io, int flags);
+
+extern void timeout_add(event_loop_t *loop, timeout_t *timeout, timeout_cb_t cb, void *data, struct timeval *tv);
+extern void timeout_del(event_loop_t *loop, timeout_t *timeout);
+extern void timeout_set(event_loop_t *loop, timeout_t *timeout, struct timeval *tv);
+
+extern void event_loop_init(event_loop_t *loop);
+extern void event_loop_exit(event_loop_t *loop);
+extern bool event_loop_run(event_loop_t *loop);
+extern void event_loop_flush_output(event_loop_t *loop);
+extern void event_loop_stop(event_loop_t *loop);
+
+#endif