- 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…
Reference in a new issue