X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=54e13232b4c466f114bb7cb935915255c0c2516b;hp=34279824eda4c5dadf66f299e2369b928670fe04;hb=ef294a69678bc7cba6d2ee0be96f683249672222;hpb=9fd02ffcb0cacf3de26e876de5f30510bff137a3 diff --git a/src/net.c b/src/net.c index 34279824..54e13232 100644 --- a/src/net.c +++ b/src/net.c @@ -1,6 +1,7 @@ /* net.c -- most of the network code - Copyright (C) 1998,1999,2000 Ivo Timmermans + Copyright (C) 1998,1999,2000 Ivo Timmermans , + 2000 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,6 +16,8 @@ You should have received a copy of the GNU General Public License 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 2000/05/31 18:23:05 zarq Exp $ */ #include "config.h" @@ -812,6 +815,8 @@ cp */ void terminate_connection(conn_list_t *cl) { + conn_list_t *p, *q; + cp if(cl->status.remove) return; @@ -838,6 +843,26 @@ cp cl->status.active = 0; cl->status.remove = 1; + +cp + /* Find all connections that were lost because they were behind cl + (the connection that was dropped). */ + for(p = conn_list; p != NULL; p = p->next) + if(p->nexthop == cl) + { + p->status.active = 0; + p->status.remove = 1; + } + +cp + /* Then send a notification about all these connections to all hosts + that are still connected to us. */ + for(p = conn_list; p != NULL; p = p->next) + if(!p->status.remove && p->status.meta) + for(q = conn_list; q != NULL; q = q->next) + if(q->status.remove) + send_del_host(p, q); + cp } @@ -970,7 +995,7 @@ cp { if(sscanf(cl->buffer, "%d", &request) == 1) { - if(request_handlers[request] == NULL) + if((request < 0) || (request > 255) || (request_handlers[request] == NULL)) { syslog(LOG_ERR, _("Unknown request: %s"), cl->buffer); return -1;