X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=91eb513e58b4f5ad62084078ad01c2176fcc755a;hp=d25cec754897d19546d2819b9a91ef5500f3186c;hb=ce9fd32c04adf83cbaf668ee42a29575ba256002;hpb=154733927af0b27cdadb83f03b845301ce8bfbfd diff --git a/src/net.c b/src/net.c index d25cec75..91eb513e 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.130 2001/09/24 13:31:15 guus Exp $ + $Id: net.c,v 1.35.4.135 2001/10/08 11:59:08 guus Exp $ */ #include "config.h" @@ -230,6 +230,7 @@ cp */ void send_packet(connection_t *cl, vpn_packet_t *packet) { + connection_t *via; cp if(debug_lvl >= DEBUG_TRAFFIC) syslog(LOG_ERR, _("Sending packet of %d bytes to %s (%s)"), @@ -254,15 +255,22 @@ cp return; } - /* Check if it has to go via TCP or UDP... */ -cp - if((cl->options | myself->options) & OPTION_TCPONLY) + if(cl->via == myself) + via = cl->nexthop; + else + via = cl->via; + + if(via != cl && debug_lvl >= DEBUG_TRAFFIC) + syslog(LOG_ERR, _("Sending packet to %s via %s (%s)"), + cl->name, via->name, via->hostname); + + if((myself->options | via->options) & OPTION_TCPONLY) { - if(send_tcppacket(cl, packet)) - terminate_connection(cl, 1); + if(send_tcppacket(via, packet)) + terminate_connection(via, 1); } else - send_udppacket(cl, packet); + send_udppacket(via, packet); } /* Broadcast a packet to all active direct connections */ @@ -962,6 +970,9 @@ cp cp /* Done */ + myself->nexthop = myself; + myself->prevhop = myself; + myself->via = myself; myself->status.active = 1; id_add(myself); @@ -989,7 +1000,7 @@ cp { if(setup_outgoing_connection(cfg->data.ptr)) /* function returns 0 when there are no problems */ retry = 1; - cfg = get_config_val(cfg, config_connectto); /* Or else we try the next ConnectTo line */ + cfg = get_config_val(cfg->next, config_connectto); /* Or else we try the next ConnectTo line */ } if(retry) @@ -1356,7 +1367,7 @@ cp if(FD_ISSET(p->meta_socket, f)) if(receive_meta(p) < 0) { - terminate_connection(p, p->status.meta); + terminate_connection(p, p->status.active); return; } }