From: lemoer Date: Thu, 19 May 2016 15:24:31 +0000 (+0200) Subject: Added comments and unfold deep "if"-construct in timeout_handler X-Git-Tag: release-1.1pre15~73 X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=9d0e86683cdb7d53263569ad2e49dd87bd217939 Added comments and unfold deep "if"-construct in timeout_handler --- diff --git a/src/net.c b/src/net.c index 4f05789c..577b11fd 100644 --- a/src/net.c +++ b/src/net.c @@ -149,7 +149,7 @@ static void timeout_handler(void *data) { bool close_all_connections = false; /* - timeout_hanlder will start after 30 seconds from start of tincd + timeout_handler will start after 30 seconds from start of tincd hold information about the elapsed time since last time the handler has been run */ @@ -177,6 +177,7 @@ static void timeout_handler(void *data) { last_periodic_run_time = now; for list_each(connection_t, c, connection_list) { + // control connections (eg. tinc ctl) do not have any timeout if(c->status.control) continue; @@ -186,26 +187,34 @@ static void timeout_handler(void *data) { continue; } - if(c->last_ping_time + pingtimeout <= now.tv_sec) { - if(c->edge) { - try_tx(c->node, false); - if(c->status.pinged) { - logger(DEBUG_CONNECTIONS, LOG_INFO, "%s (%s) didn't respond to PING in %ld seconds", c->name, c->hostname, (long)(now.tv_sec - c->last_ping_time)); - } else if(c->last_ping_time + pinginterval <= now.tv_sec) { - send_ping(c); - continue; - } else { - continue; - } - } else { - if(c->status.connecting) - logger(DEBUG_CONNECTIONS, LOG_WARNING, "Timeout while connecting to %s (%s)", c->name, c->hostname); - else - logger(DEBUG_CONNECTIONS, LOG_WARNING, "Timeout from %s (%s) during authentication", c->name, c->hostname); - } + // Bail out early if we haven't reached the ping timeout for this node yet + if(c->last_ping_time + pingtimeout > now.tv_sec) + continue; + + // timeout during connection establishing + if(!c->edge) { + if(c->status.connecting) + logger(DEBUG_CONNECTIONS, LOG_WARNING, "Timeout while connecting to %s (%s)", c->name, c->hostname); + else + logger(DEBUG_CONNECTIONS, LOG_WARNING, "Timeout from %s (%s) during authentication", c->name, c->hostname); + terminate_connection(c, c->edge); + continue; + } + + // helps in UDP holepunching + try_tx(c->node, false); + + // timeout during ping + if(c->status.pinged) { + logger(DEBUG_CONNECTIONS, LOG_INFO, "%s (%s) didn't respond to PING in %ld seconds", c->name, c->hostname, (long)now.tv_sec - c->last_ping_time); + terminate_connection(c, c->edge); + continue; } + // check whether we need to send a new ping + if(c->last_ping_time + pinginterval <= now.tv_sec) + send_ping(c); } timeout_set(data, &(struct timeval){1, rand() % 100000});