- Improved handling of errors on connection attempts.
This commit is contained in:
		
							parent
							
								
									45a28b1e89
								
							
						
					
					
						commit
						4aeaea5e59
					
				
					 4 changed files with 27 additions and 23 deletions
				
			
		
							
								
								
									
										16
									
								
								src/conf.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								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; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 *); | ||||
|  |  | |||
							
								
								
									
										18
									
								
								src/net.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								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")); | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue