X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=fbefa8ca0146d5c09c327ef63a4d794904cc070a;hp=e086d78633f29af27e9334ed9ffd32e0097164fb;hb=21027b1d5702c331b1ebb262bb149c75be1f24b1;hpb=18d1233c40a5705e9123edd6f4c6764a5178003b diff --git a/src/net.c b/src/net.c index e086d786..fbefa8ca 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.133 2001/09/25 13:39:11 guus Exp $ + $Id: net.c,v 1.35.4.134 2001/10/08 11:47:55 guus Exp $ */ #include "config.h" @@ -230,7 +230,7 @@ cp */ void send_packet(connection_t *cl, vpn_packet_t *packet) { - connection_t *hop; + connection_t *via; cp if(debug_lvl >= DEBUG_TRAFFIC) syslog(LOG_ERR, _("Sending packet of %d bytes to %s (%s)"), @@ -255,28 +255,22 @@ cp return; } - if(myself->options & OPTION_TCPONLY) - { - if(send_tcppacket(cl->nexthop, packet)) - terminate_connection(cl->nexthop, 1); - } + if(cl->via == myself) + via = cl->nexthop; else - { - if(myself->options & OPTION_INDIRECT) - send_udppacket(cl->nexthop, packet); - else - { - hop = cl; + via = cl->via; - while(hop->options & OPTION_INDIRECT) - if(hop->lastbutonehop == myself) - break; - else - hop = hop->lastbutonehop; + if(via != cl && debug_lvl >= DEBUG_TRAFFIC) + syslog(LOG_ERR, _("Sending packet to %s via %s (%s)"), + cl->name, via->name, via->hostname); - send_udppacket(hop, packet); - } + if((myself->options | via->options) & OPTION_TCPONLY) + { + if(send_tcppacket(via, packet)) + terminate_connection(via, 1); } + else + send_udppacket(via, packet); } /* Broadcast a packet to all active direct connections */ @@ -977,7 +971,8 @@ cp /* Done */ myself->nexthop = myself; - myself->lastbutonehop = myself; + myself->prevhop = myself; + myself->via = myself; myself->status.active = 1; id_add(myself);