Added comments and unfold deep "if"-construct in timeout_handler

This commit is contained in:
lemoer 2016-05-19 17:24:31 +02:00 committed by Guus Sliepen
parent 5baecfd11b
commit 9d0e86683c

View file

@ -149,7 +149,7 @@ static void timeout_handler(void *data) {
bool close_all_connections = false; 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 hold information about the elapsed time since last time the handler
has been run has been run
*/ */
@ -177,6 +177,7 @@ static void timeout_handler(void *data) {
last_periodic_run_time = now; last_periodic_run_time = now;
for list_each(connection_t, c, connection_list) { for list_each(connection_t, c, connection_list) {
// control connections (eg. tinc ctl) do not have any timeout
if(c->status.control) if(c->status.control)
continue; continue;
@ -186,26 +187,34 @@ static void timeout_handler(void *data) {
continue; continue;
} }
if(c->last_ping_time + pingtimeout <= now.tv_sec) { // Bail out early if we haven't reached the ping timeout for this node yet
if(c->edge) { if(c->last_ping_time + pingtimeout > now.tv_sec)
try_tx(c->node, false); continue;
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)); // timeout during connection establishing
} else if(c->last_ping_time + pinginterval <= now.tv_sec) { if(!c->edge) {
send_ping(c); if(c->status.connecting)
continue; logger(DEBUG_CONNECTIONS, LOG_WARNING, "Timeout while connecting to %s (%s)", c->name, c->hostname);
} else { else
continue; logger(DEBUG_CONNECTIONS, LOG_WARNING, "Timeout from %s (%s) during authentication", c->name, c->hostname);
}
} 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);
}
terminate_connection(c, c->edge); 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}); timeout_set(data, &(struct timeval){1, rand() % 100000});