From 4aeaea5e590fbd38aebbfacf2672304d04ba4ad1 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Tue, 27 Jun 2000 20:10:48 +0000 Subject: [PATCH] - Improved handling of errors on connection attempts. --- src/conf.c | 16 ++++++++++++---- src/conf.h | 3 ++- src/net.c | 18 +++++++++++------- src/protocol.c | 13 ++----------- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/conf.c b/src/conf.c index 1e1c60f6..f8838d78 100644 --- a/src/conf.c +++ b/src/conf.c @@ -19,7 +19,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: conf.c,v 1.9.4.2 2000/06/27 15:08:57 guus Exp $ + $Id: conf.c,v 1.9.4.3 2000/06/27 20:10:47 guus Exp $ */ @@ -75,7 +75,7 @@ static internal_config_t hazahaza[] = { config_t * add_config_val(config_t **cfg, int argtype, char *val) { - config_t *p; + config_t *p, *r; char *q; p = (config_t*)xmalloc(sizeof(*p)); @@ -106,8 +106,16 @@ add_config_val(config_t **cfg, int argtype, char *val) if(p->data.val) { - p->next = *cfg; - *cfg = p; + if(*cfg) + { + r = *cfg; + while(r->next) + r = r->next; + r->next = p; + } + else + *cfg = p; + p->next = NULL; return p; } diff --git a/src/conf.h b/src/conf.h index 36bc9a4f..d9309128 100644 --- a/src/conf.h +++ b/src/conf.h @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: conf.h,v 1.6.4.2 2000/06/27 15:08:57 guus Exp $ + $Id: conf.h,v 1.6.4.3 2000/06/27 20:10:47 guus Exp $ */ #ifndef __TINC_CONF_H__ @@ -70,6 +70,7 @@ enum { extern config_t *config; extern int debug_lvl; extern int timeout; +extern int upstreamindex; extern config_t *add_config_val(config_t **, int, char *); extern int read_config_file(const char *); diff --git a/src/net.c b/src/net.c index cdb593e1..bc3540e9 100644 --- a/src/net.c +++ b/src/net.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: net.c,v 1.35.4.9 2000/06/27 15:08:58 guus Exp $ + $Id: net.c,v 1.35.4.10 2000/06/27 20:10:48 guus Exp $ */ #include "config.h" @@ -56,6 +56,7 @@ int total_tap_out = 0; int total_socket_in = 0; int total_socket_out = 0; +int upstreamindex = 0; static int seconds_till_retry; /* The global list of existing connections */ @@ -496,6 +497,9 @@ int setup_outgoing_meta_socket(conn_list_t *cl) struct sockaddr_in a; config_t const *cfg; cp + if(debug_lvl > 0) + syslog(LOG_INFO, _("Trying to connect to %s"), cl->hostname); + if((cfg = get_config_val(upstreamport)) == NULL) cl->port = 655; else @@ -615,9 +619,8 @@ RETSIGTYPE sigalrm_handler(int a) { config_t const *cfg; - int index = 1; cp - cfg = get_config_val(upstreamip); + cfg = get_next_config_val(upstreamip, upstreamindex++); while(cfg) { @@ -626,10 +629,11 @@ cp signal(SIGALRM, SIG_IGN); return; } - cfg = get_next_config_val(upstreamip, index++); /* Or else we try the next ConnectTo line */ + cfg = get_next_config_val(upstreamip, upstreamindex++); /* Or else we try the next ConnectTo line */ } signal(SIGALRM, sigalrm_handler); + upstreamindex = 0; seconds_till_retry += 5; if(seconds_till_retry>300) /* Don't wait more than 5 minutes. */ seconds_till_retry = 300; @@ -645,7 +649,6 @@ cp int setup_network_connections(void) { config_t const *cfg; - int index = 1; cp if((cfg = get_config_val(pingtimeout)) == NULL) timeout = 5; @@ -658,7 +661,7 @@ cp if(setup_myself() < 0) return -1; - if((cfg = get_config_val(upstreamip)) == NULL) + if((cfg = get_next_config_val(upstreamip, upstreamindex++)) == NULL) /* No upstream IP given, we're listen only. */ return 0; @@ -666,10 +669,11 @@ cp { if(!setup_outgoing_connection(cfg->data.ip->ip)) /* function returns 0 when there are no problems */ return 0; - cfg = get_next_config_val(upstreamip, index++); /* Or else we try the next ConnectTo line */ + cfg = get_next_config_val(upstreamip, upstreamindex++); /* Or else we try the next ConnectTo line */ } signal(SIGALRM, sigalrm_handler); + upstreamindex = 0; seconds_till_retry = 300; alarm(seconds_till_retry); syslog(LOG_NOTICE, _("Trying to re-establish outgoing connection in 5 minutes")); diff --git a/src/protocol.c b/src/protocol.c index 70122c1b..1fe75e71 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: protocol.c,v 1.28.4.10 2000/06/27 12:58:04 guus Exp $ + $Id: protocol.c,v 1.28.4.11 2000/06/27 20:10:48 guus Exp $ */ #include "config.h" @@ -403,16 +403,6 @@ cp { syslog(LOG_ERR, _("Got bad BASIC_INFO from %s"), cl->hostname); - if(cl->status.outgoing) - { - /* If we get here, it means that our uplink uses the wrong protocol. - If we don't do anything, we will reconnect every 5 seconds. Pretty dumb. - So we disable the outgoing flag, so that we won't reconnect anymore. - This still allows other tinc daemons to connect to us. - */ - syslog(LOG_ERR, _("Warning: disabling uplink!")); - cl->status.outgoing = 0; - } return -1; } @@ -519,6 +509,7 @@ cp cl->status.active = 1; syslog(LOG_NOTICE, _("Connection with " IP_ADDR_S " (%s) activated"), IP_ADDR_V(cl->vpn_ip), cl->hostname); + upstreamindex = 0; cp return 0; } -- 2.20.1