From: Scott Lamb Date: Tue, 27 Feb 2007 01:26:11 +0000 (+0000) Subject: Rename "event_t" to "tevent_t", along with associated functions. X-Git-Tag: import-tinc-1.1~674 X-Git-Url: http://git.meshlink.io/?a=commitdiff_plain;h=6362b12df725044f3404faceff113e469d8ac860;hp=54431094d95f3989084755fdb91883b24cf5a9f4;p=meshlink Rename "event_t" to "tevent_t", along with associated functions. This relieves some confusion and problems during the libevent transition. In particular, "event_add" was defined by both. (The 't' stands for 'timeout', 'tinc', 'temporary', or some such.) --- diff --git a/src/Makefile.am b/src/Makefile.am index 10f07af5..c9c1ac90 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,7 +5,7 @@ sbin_PROGRAMS = tincd EXTRA_DIST = linux/device.c bsd/device.c solaris/device.c cygwin/device.c mingw/device.c mingw/common.h raw_socket/device.c uml_socket/device.c -tincd_SOURCES = conf.c connection.c edge.c event.c graph.c logger.c meta.c net.c net_packet.c net_setup.c \ +tincd_SOURCES = conf.c connection.c edge.c tevent.c graph.c logger.c meta.c net.c net_packet.c net_setup.c \ net_socket.c netutl.c node.c process.c protocol.c protocol_auth.c protocol_edge.c protocol_misc.c \ protocol_key.c protocol_subnet.c route.c subnet.c tincd.c @@ -15,7 +15,7 @@ DEFAULT_INCLUDES = INCLUDES = @INCLUDES@ -I$(top_builddir) -I$(top_srcdir)/lib -noinst_HEADERS = conf.h connection.h device.h edge.h event.h graph.h logger.h meta.h net.h netutl.h node.h process.h \ +noinst_HEADERS = conf.h connection.h device.h edge.h tevent.h graph.h logger.h meta.h net.h netutl.h node.h process.h \ protocol.h route.h subnet.h LIBS = @LIBS@ @LIBINTL@ diff --git a/src/event.c b/src/event.c deleted file mode 100644 index c791205f..00000000 --- a/src/event.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - event.c -- event queue - Copyright (C) 2002-2006 Guus Sliepen , - 2002-2005 Ivo Timmermans - - 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id$ -*/ - -#include "system.h" - -#include "avl_tree.h" -#include "event.h" -#include "utils.h" -#include "xalloc.h" - -avl_tree_t *event_tree; -extern time_t now; - -int id; - -static int event_compare(const event_t *a, const event_t *b) -{ - if(a->time > b->time) - return 1; - - if(a->time < b->time) - return -1; - - return a->id - b->id; -} - -void init_events(void) -{ - cp(); - - event_tree = avl_alloc_tree((avl_compare_t) event_compare, NULL); -} - -void exit_events(void) -{ - cp(); - - avl_delete_tree(event_tree); -} - -void flush_events(void) -{ - avl_tree_t *to_flush; - event_t *event; - - /* - * Events can be inserted from event handlers, so only flush events - * already in the priority queue. - */ - - cp(); - - to_flush = event_tree; - init_events(); - while (to_flush->head) { - event = to_flush->head->data; - event->handler(event->data); - avl_delete(to_flush, event); - } - avl_delete_tree(to_flush); -} - -event_t *new_event(void) -{ - cp(); - - return xmalloc_and_zero(sizeof(event_t)); -} - -void free_event(event_t *event) -{ - cp(); - - free(event); -} - -void event_add(event_t *event) -{ - cp(); - - event->id = ++id; - avl_insert(event_tree, event); -} - -void event_del(event_t *event) -{ - cp(); - - avl_delete(event_tree, event); -} - -event_t *get_expired_event(void) -{ - event_t *event; - - cp(); - - if(event_tree->head) { - event = event_tree->head->data; - - if(event->time < now) { - event_del(event); - return event; - } - } - - return NULL; -} diff --git a/src/event.h b/src/event.h deleted file mode 100644 index 50e5b972..00000000 --- a/src/event.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - event.h -- header for event.c - Copyright (C) 2002-2006 Guus Sliepen , - 2002-2005 Ivo Timmermans - - 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id$ -*/ - -#ifndef __TINC_EVENT_H__ -#define __TINC_EVENT_H__ - -#include "avl_tree.h" - -extern avl_tree_t *event_tree; - -typedef void (*event_handler_t)(void *); - -typedef struct { - time_t time; - int id; - event_handler_t handler; - void *data; -} event_t; - -extern void init_events(void); -extern void exit_events(void); -extern void flush_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); - -#endif /* __TINC_EVENT_H__ */ diff --git a/src/net.c b/src/net.c index f6b14704..9156147d 100644 --- a/src/net.c +++ b/src/net.c @@ -29,7 +29,7 @@ #include "conf.h" #include "connection.h" #include "device.h" -#include "event.h" +#include "tevent.h" #include "graph.h" #include "logger.h" #include "meta.h" @@ -355,7 +355,7 @@ int main_loop(void) struct timeval tv; int r, maxfd; time_t last_ping_check, last_config_check, last_graph_dump; - event_t *event; + tevent_t *event; cp(); diff --git a/src/net_packet.c b/src/net_packet.c index 105cafbb..9e0ba2e8 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -36,7 +36,7 @@ #include "connection.h" #include "device.h" #include "ethernet.h" -#include "event.h" +#include "tevent.h" #include "graph.h" #include "list.h" #include "logger.h" @@ -96,11 +96,11 @@ void send_mtu_probe(node_t *n) send_udppacket(n, &packet); } - n->mtuevent = new_event(); + n->mtuevent = new_tevent(); n->mtuevent->handler = (event_handler_t)send_mtu_probe; n->mtuevent->data = n; n->mtuevent->time = now + 1; - event_add(n->mtuevent); + tevent_add(n->mtuevent); } void mtu_probe_h(node_t *n, vpn_packet_t *packet) { diff --git a/src/net_setup.c b/src/net_setup.c index f53127b5..84171e72 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -32,7 +32,7 @@ #include "conf.h" #include "connection.h" #include "device.h" -#include "event.h" +#include "tevent.h" #include "graph.h" #include "logger.h" #include "net.h" diff --git a/src/net_socket.c b/src/net_socket.c index c2a68596..1db1949c 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -25,7 +25,7 @@ #include "avl_tree.h" #include "conf.h" #include "connection.h" -#include "event.h" +#include "tevent.h" #include "logger.h" #include "meta.h" #include "net.h" @@ -220,7 +220,7 @@ int setup_vpn_in_socket(const sockaddr_t *sa) void retry_outgoing(outgoing_t *outgoing) { - event_t *event; + tevent_t *event; cp(); @@ -229,11 +229,11 @@ void retry_outgoing(outgoing_t *outgoing) if(outgoing->timeout > maxtimeout) outgoing->timeout = maxtimeout; - event = new_event(); + event = new_tevent(); event->handler = (event_handler_t) setup_outgoing_connection; event->time = now + outgoing->timeout; event->data = outgoing; - event_add(event); + tevent_add(event); ifdebug(CONNECTIONS) logger(LOG_NOTICE, _("Trying to re-establish outgoing connection in %d seconds"), diff --git a/src/node.c b/src/node.c index 5dad0aaf..ec6815a6 100644 --- a/src/node.c +++ b/src/node.c @@ -107,7 +107,7 @@ void free_node(node_t *n) EVP_CIPHER_CTX_cleanup(&n->packet_ctx); if(n->mtuevent) { - event_del(n->mtuevent); + tevent_del(n->mtuevent); free_event(n->mtuevent); } diff --git a/src/node.h b/src/node.h index 4b3224e3..b3319e17 100644 --- a/src/node.h +++ b/src/node.h @@ -25,7 +25,7 @@ #include "avl_tree.h" #include "connection.h" -#include "event.h" +#include "tevent.h" #include "list.h" #include "subnet.h" @@ -80,7 +80,7 @@ typedef struct node_t { length_t minmtu; /* Probed minimum MTU */ length_t maxmtu; /* Probed maximum MTU */ int mtuprobes; /* Number of probes */ - event_t *mtuevent; /* Probe event */ + tevent_t *mtuevent; /* Probe event */ } node_t; extern struct node_t *myself; diff --git a/src/tevent.c b/src/tevent.c new file mode 100644 index 00000000..bdda6396 --- /dev/null +++ b/src/tevent.c @@ -0,0 +1,127 @@ +/* + event.c -- event queue + Copyright (C) 2002-2006 Guus Sliepen , + 2002-2005 Ivo Timmermans + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id$ +*/ + +#include "system.h" + +#include "avl_tree.h" +#include "tevent.h" +#include "utils.h" +#include "xalloc.h" + +avl_tree_t *tevent_tree; +extern time_t now; + +int id; + +static int tevent_compare(const tevent_t *a, const tevent_t *b) +{ + if(a->time > b->time) + return 1; + + if(a->time < b->time) + return -1; + + return a->id - b->id; +} + +void init_tevents(void) +{ + cp(); + + tevent_tree = avl_alloc_tree((avl_compare_t) tevent_compare, NULL); +} + +void exit_tevents(void) +{ + cp(); + + avl_delete_tree(tevent_tree); +} + +void flush_tevents(void) +{ + avl_tree_t *to_flush; + tevent_t *event; + + /* + * Events can be inserted from event handlers, so only flush events + * already in the priority queue. + */ + + cp(); + + to_flush = tevent_tree; + init_tevents(); + while (to_flush->head) { + event = to_flush->head->data; + event->handler(event->data); + avl_delete(to_flush, event); + } + avl_delete_tree(to_flush); +} + +tevent_t *new_tevent(void) +{ + cp(); + + return xmalloc_and_zero(sizeof(tevent_t)); +} + +void free_tevent(tevent_t *event) +{ + cp(); + + free(event); +} + +void tevent_add(tevent_t *event) +{ + cp(); + + event->id = ++id; + avl_insert(tevent_tree, event); +} + +void tevent_del(tevent_t *event) +{ + cp(); + + avl_delete(tevent_tree, event); +} + +tevent_t *get_expired_tevent(void) +{ + tevent_t *event; + + cp(); + + if(tevent_tree->head) { + event = tevent_tree->head->data; + + if(event->time < now) { + tevent_del(event); + return event; + } + } + + return NULL; +} diff --git a/src/tevent.h b/src/tevent.h new file mode 100644 index 00000000..8f5cfd84 --- /dev/null +++ b/src/tevent.h @@ -0,0 +1,48 @@ +/* + event.h -- header for event.c + Copyright (C) 2002-2006 Guus Sliepen , + 2002-2005 Ivo Timmermans + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id$ +*/ + +#ifndef __TINC_EVENT_H__ +#define __TINC_EVENT_H__ + +#include "avl_tree.h" + +extern avl_tree_t *tevent_tree; + +typedef void (*event_handler_t)(void *); + +typedef struct { + time_t time; + int id; + event_handler_t handler; + void *data; +} tevent_t; + +extern void init_tevents(void); +extern void exit_tevents(void); +extern void flush_tevents(void); +extern tevent_t *new_tevent(void) __attribute__ ((__malloc__)); +extern void free_tevent(tevent_t *); +extern void tevent_add(tevent_t *); +extern void tevent_del(tevent_t *); +extern tevent_t *get_expired_tevent(void); + +#endif /* __TINC_EVENT_H__ */