Update copyright information.
[tinc] / src / net.c
index a21850a..1682705 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -1,7 +1,7 @@
 /*
     net.c -- most of the network code
-    Copyright (C) 1998-2005 Ivo Timmermans <ivo@tinc-vpn.org>,
-                  2000-2005 Guus Sliepen <guus@tinc-vpn.org>
+    Copyright (C) 1998-2005 Ivo Timmermans,
+                  2000-2007 Guus Sliepen <guus@tinc-vpn.org>
 
     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
@@ -241,7 +241,7 @@ static void check_dead_connections(void)
                if(c->last_ping_time + pingtimeout < now) {
                        if(c->status.active) {
                                if(c->status.pinged) {
-                                       ifdebug(CONNECTIONS) logger(LOG_INFO, _("%s (%s) didn't respond to PING in %d seconds"),
+                                       ifdebug(CONNECTIONS) logger(LOG_INFO, _("%s (%s) didn't respond to PING in %ld seconds"),
                                                           c->name, c->hostname, now - c->last_ping_time);
                                        c->status.timeout = true;
                                        terminate_connection(c, true);
@@ -251,7 +251,7 @@ static void check_dead_connections(void)
                        } else {
                                if(c->status.remove) {
                                        logger(LOG_WARNING, _("Old connection_t for %s (%s) status %04x still lingering, deleting..."),
-                                                  c->name, c->hostname, *(uint32_t *)&c->status);
+                                                  c->name, c->hostname, c->status.value);
                                        connection_del(c);
                                        continue;
                                }
@@ -270,7 +270,7 @@ static void check_dead_connections(void)
                if(c->outbuflen > 0 && c->last_flushed_time + pingtimeout < now) {
                        if(c->status.active) {
                                ifdebug(CONNECTIONS) logger(LOG_INFO,
-                                               _("%s (%s) could not flush for %d seconds (%d bytes remaining)"),
+                                               _("%s (%s) could not flush for %ld seconds (%d bytes remaining)"),
                                                c->name, c->hostname, now - c->last_flushed_time, c->outbuflen);
                                c->status.timeout = true;
                                terminate_connection(c, true);
@@ -288,7 +288,7 @@ static void check_network_activity(fd_set * readset, fd_set * writeset)
        connection_t *c;
        avl_node_t *node;
        int result, i;
-       int len = sizeof(result);
+       socklen_t len = sizeof(result);
        vpn_packet_t packet;
 
        cp();
@@ -354,13 +354,15 @@ int main_loop(void)
        fd_set readset, writeset;
        struct timeval tv;
        int r, maxfd;
-       time_t last_ping_check, last_config_check;
+       time_t last_ping_check, last_config_check, last_graph_dump;
        event_t *event;
 
        cp();
 
        last_ping_check = now;
        last_config_check = now;
+       last_graph_dump = now;
+       
        srand(now);
 
        running = true;
@@ -411,9 +413,9 @@ int main_loop(void)
                        if(keyexpires < now) {
                                ifdebug(STATUS) logger(LOG_INFO, _("Regenerating symmetric key"));
 
-                               RAND_pseudo_bytes(myself->key, myself->keylength);
+                               RAND_pseudo_bytes((unsigned char *)myself->key, myself->keylength);
                                if(myself->cipher)
-                                       EVP_DecryptInit_ex(&packet_ctx, myself->cipher, NULL, myself->key, myself->key + myself->cipher->key_len);
+                                       EVP_DecryptInit_ex(&packet_ctx, myself->cipher, NULL, (unsigned char *)myself->key, (unsigned char *)myself->key + myself->cipher->key_len);
                                send_key_changed(broadcast, myself);
                                keyexpires = now + keylifetime;
                        }
@@ -422,17 +424,12 @@ int main_loop(void)
 
                while((event = get_expired_event())) {
                        event->handler(event->data);
-                       free(event);
+                       free_event(event);
                }
 
                if(sigalrm) {
                        logger(LOG_INFO, _("Flushing event queue"));
-
-                       while(event_tree->head) {
-                               event = event_tree->head->data;
-                               event->handler(event->data);
-                               event_del(event);
-                       }
+                       flush_events();
                        sigalrm = false;
                }
 
@@ -461,7 +458,8 @@ int main_loop(void)
                                
                                if(c->outgoing) {
                                        free(c->outgoing->name);
-                                       freeaddrinfo(c->outgoing->ai);
+                                       if(c->outgoing->ai)
+                                               freeaddrinfo(c->outgoing->ai);
                                        free(c->outgoing);
                                        c->outgoing = NULL;
                                }
@@ -478,6 +476,13 @@ int main_loop(void)
                        
                        try_outgoing_connections();
                }
+               
+               /* Dump graph if wanted every 60 seconds*/
+
+               if(last_graph_dump + 60 < now) {
+                       dump_graph();
+                       last_graph_dump = now;
+               }
        }
 
        return 0;