Move key regeneration handling to net_setup.c.
[tinc] / src / net_packet.c
index ffda5a1..596b9d5 100644 (file)
 #include <openssl/hmac.h>
 
 #include <zlib.h>
-#ifdef HAVE_LZO_LZO1X_H
-#include <lzo/lzo1x.h>
-#endif
-#ifdef HAVE_LZO1X_H
-#include <lzo1x.h>
-#endif
+#include LZO1X_H
 
 #include "avl_tree.h"
 #include "conf.h"
 #include "connection.h"
 #include "device.h"
 #include "ethernet.h"
-#include "event.h"
 #include "graph.h"
 #include "list.h"
 #include "logger.h"
@@ -58,7 +52,6 @@
 #endif
 
 int keylifetime = 0;
-int keyexpires = 0;
 EVP_CIPHER_CTX packet_ctx;
 static char lzo_wrkmem[LZO1X_999_MEM_COMPRESS > LZO1X_1_MEM_COMPRESS ? LZO1X_999_MEM_COMPRESS : LZO1X_1_MEM_COMPRESS];
 
@@ -66,15 +59,14 @@ static void send_udppacket(node_t *, vpn_packet_t *);
 
 #define MAX_SEQNO 1073741824
 
-void send_mtu_probe(node_t *n)
-{
+static void send_mtu_probe_handler(int fd, short events, void *data) {
+       node_t *n = data;
        vpn_packet_t packet;
        int len, i;
        
        cp();
 
        n->mtuprobes++;
-       n->mtuevent = NULL;
 
        if(n->mtuprobes >= 10 && !n->minmtu) {
                ifdebug(TRAFFIC) logger(LOG_INFO, _("No response to MTU probes from %s (%s)"), n->name, n->hostname);
@@ -101,11 +93,13 @@ void send_mtu_probe(node_t *n)
                send_udppacket(n, &packet);
        }
 
-       n->mtuevent = xmalloc(sizeof(*n->mtuevent));
-       n->mtuevent->handler = (event_handler_t)send_mtu_probe;
-       n->mtuevent->data = n;
-       n->mtuevent->time = now + 1;
-       event_add(n->mtuevent);
+       event_add(&n->mtuevent, &(struct timeval){1, 0});
+}
+
+void send_mtu_probe(node_t *n) {
+       if(!timeout_initialized(&n->mtuevent))
+               timeout_set(&n->mtuevent, send_mtu_probe_handler, n);
+       send_mtu_probe_handler(0, 0, n);
 }
 
 void mtu_probe_h(node_t *n, vpn_packet_t *packet) {
@@ -253,7 +247,7 @@ static void receive_udppacket(node_t *n, vpn_packet_t *inpkt)
                n->received_seqno = inpkt->seqno;
                        
        if(n->received_seqno > MAX_SEQNO)
-               keyexpires = 0;
+               regenerate_key();
 
        /* Decompress the packet */
 
@@ -489,7 +483,7 @@ void flush_queue(node_t *n)
        }
 }
 
-void handle_incoming_vpn_data(int sock)
+void handle_incoming_vpn_data(int sock, short events, void *data)
 {
        vpn_packet_t pkt;
        char *hostname;
@@ -520,3 +514,11 @@ void handle_incoming_vpn_data(int sock)
 
        receive_udppacket(n, &pkt);
 }
+
+void handle_device_data(int sock, short events, void *data)
+{
+       vpn_packet_t packet;
+
+       if(read_packet(&packet))
+               route(myself, &packet);
+}