X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=35d9563ce9b9efb6586927008446c38e70e455e4;hp=c0c8e66f0d519edab54ee51771530392426222b0;hb=94497336efc1cc60561575e74d420e9e8e8c657e;hpb=82e383710980534d38bb9a8ef22f20677cd85861 diff --git a/src/net.c b/src/net.c index c0c8e66f..35d9563c 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.137 2001/10/27 12:13:17 guus Exp $ + $Id: net.c,v 1.35.4.140 2001/10/28 08:41:19 guus Exp $ */ #include "config.h" @@ -72,7 +72,9 @@ #include "system.h" +int maxtimeout = 900; int seconds_till_retry = 5; + int tcp_socket = -1; int udp_socket = -1; @@ -161,7 +163,7 @@ cp to.sin_addr.s_addr = htonl(n->address); to.sin_port = htons(n->port); - if((sendto(socket, (char *) outpkt.salt, outlen, 0, (const struct sockaddr *)&to, tolen)) < 0) + if((sendto(udp_socket, (char *) outpkt.salt, outlen, 0, (const struct sockaddr *)&to, tolen)) < 0) { syslog(LOG_ERR, _("Error sending packet to %s (%s): %m"), n->name, n->hostname); @@ -456,6 +458,7 @@ cp c = new_connection(); c->name = xstrdup(name); + init_configuration(&c->config_tree); read_connection_config(c); if(!get_config_string(lookup_config(c->config_tree, "Address"), &c->hostname)) @@ -620,6 +623,7 @@ int setup_myself(void) cp myself = new_node(); myself->connection = new_connection(); + init_configuration(&myself->connection->config_tree); asprintf(&myself->hostname, _("MYSELF")); asprintf(&myself->connection->hostname, _("MYSELF")); @@ -664,9 +668,11 @@ cp return -1; } */ - if(!get_config_port(lookup_config(myself->connection->config_tree, "Port"), &myself->connection->port)) + if(!get_config_port(lookup_config(myself->connection->config_tree, "Port"), &myself->port)) myself->port = 655; + myself->connection->port = myself->port; + /* Read in all the subnets specified in the host configuration file */ cfg = lookup_config(myself->connection->config_tree, "Subnet"); @@ -703,7 +709,7 @@ cp if(myself->options & OPTION_TCPONLY) myself->options |= OPTION_INDIRECT; - if(get_config_string(lookup_config(myself->connection->config_tree, "Mode"), &mode)) + if(get_config_string(lookup_config(config_tree, "Mode"), &mode)) { if(!strcasecmp(mode, "router")) routing_mode = RMODE_ROUTER; @@ -744,7 +750,7 @@ cp myself->key = (char *)xmalloc(myself->keylength); RAND_pseudo_bytes(myself->key, myself->keylength); - if(!get_config_int(lookup_config(myself->connection->config_tree, "KeyExpire"), &keylifetime)) + if(!get_config_int(lookup_config(config_tree, "KeyExpire"), &keylifetime)) keylifetime = 3600; keyexpires = time(NULL) + keylifetime; @@ -769,8 +775,10 @@ int setup_network_connections(void) cp init_connections(); init_subnets(); + init_nodes(); + init_vertices(); - if(get_config_int(lookup_config(myself->connection->config_tree, "PingTimeout"), &timeout)) + if(get_config_int(lookup_config(config_tree, "PingTimeout"), &timeout)) { if(timeout < 1) { @@ -1041,7 +1049,6 @@ try_outgoing_connections(int a) static config_t *cfg = NULL; static int retry = 0; char *name; - int maxtimeout = 900; cp if(!cfg) cfg = lookup_config(config_tree, "ConnectTo"); @@ -1122,6 +1129,7 @@ void main_loop(void) int r; time_t last_ping_check; int t; + vpn_packet_t packet; cp last_ping_check = time(NULL); @@ -1190,7 +1198,12 @@ cp /* local tap data */ if(FD_ISSET(device_fd, &fset)) - handle_tap_input(); + { + if(read_packet(&packet)) + return; + else + route_outgoing(&packet); + } } } cp