X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=src%2Fnet_socket.c;h=589c4caa9b5424bb3113d61b6b59e0b124313e55;hb=93f89bcae11e8d250831896bc5694ee8bd2ad22b;hp=80fe84cac2876aff23b5e7826a5df7fdae3bb84a;hpb=8fc838f88fad6d6a632f9d4e6906e31931c765e3;p=meshlink diff --git a/src/net_socket.c b/src/net_socket.c index 80fe84ca..589c4caa 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -37,13 +37,9 @@ #endif int addressfamily = AF_UNSPEC; -int maxtimeout = 900; int seconds_till_retry = 5; int max_connection_burst = 100; -listen_socket_t listen_socket[MAXSOCKETS]; -int listen_sockets; - /* Setup sockets */ static void configure_tcp(connection_t *c) { @@ -77,8 +73,8 @@ static void configure_tcp(connection_t *c) { static bool bind_to_address(connection_t *c) { int s = -1; - for(int i = 0; i < listen_sockets && listen_socket[i].bindto; i++) { - if(listen_socket[i].sa.sa.sa_family != c->address.sa.sa_family) + for(int i = 0; i < mesh->listen_sockets && mesh->listen_socket[i].bindto; i++) { + if(mesh->listen_socket[i].sa.sa.sa_family != c->address.sa.sa_family) continue; if(s >= 0) return false; @@ -88,7 +84,7 @@ static bool bind_to_address(connection_t *c) { if(s < 0) return false; - sockaddr_t sa = listen_socket[s].sa; + sockaddr_t sa = mesh->listen_socket[s].sa; if(sa.sa.sa_family == AF_INET) sa.in.sin_port = 0; else if(sa.sa.sa_family == AF_INET6) @@ -236,17 +232,17 @@ int setup_vpn_in_socket(const sockaddr_t *sa) { return nfd; } /* int setup_vpn_in_socket */ -static void retry_outgoing_handler(void *data) { +static void retry_outgoing_handler(event_loop_t *loop, void *data) { setup_outgoing_connection(data); } void retry_outgoing(outgoing_t *outgoing) { outgoing->timeout += 5; - if(outgoing->timeout > maxtimeout) - outgoing->timeout = maxtimeout; + if(outgoing->timeout > mesh->maxtimeout) + outgoing->timeout = mesh->maxtimeout; - timeout_add(&outgoing->ev, retry_outgoing_handler, outgoing, &(struct timeval){outgoing->timeout, rand() % 100000}); + timeout_add(&mesh->loop, &outgoing->ev, retry_outgoing_handler, outgoing, &(struct timeval){outgoing->timeout, rand() % 100000}); logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Trying to re-establish outgoing connection in %d seconds", outgoing->timeout); } @@ -327,10 +323,10 @@ static void handle_meta_write(connection_t *c) { buffer_read(&c->outbuf, outlen); if(!c->outbuf.len) - io_set(&c->io, IO_READ); + io_set(&mesh->loop, &c->io, IO_READ); } -static void handle_meta_io(void *data, int flags) { +static void handle_meta_io(event_loop_t *loop, void *data, int flags) { connection_t *c = data; if(c->status.connecting) { @@ -405,18 +401,18 @@ begin: logger(DEBUG_CONNECTIONS, LOG_INFO, "Trying to connect to %s (%s)", outgoing->name, c->hostname); - if(!proxytype) { + if(!mesh->proxytype) { c->socket = socket(c->address.sa.sa_family, SOCK_STREAM, IPPROTO_TCP); configure_tcp(c); - } else if(proxytype == PROXY_EXEC) { - do_outgoing_pipe(c, proxyhost); + } else if(mesh->proxytype == PROXY_EXEC) { + do_outgoing_pipe(c, mesh->proxyhost); } else { - proxyai = str2addrinfo(proxyhost, proxyport, SOCK_STREAM); + proxyai = str2addrinfo(mesh->proxyhost, mesh->proxyport, SOCK_STREAM); if(!proxyai) { free_connection(c); goto begin; } - logger(DEBUG_CONNECTIONS, LOG_INFO, "Using proxy at %s port %s", proxyhost, proxyport); + logger(DEBUG_CONNECTIONS, LOG_INFO, "Using proxy at %s port %s", mesh->proxyhost, mesh->proxyport); c->socket = socket(proxyai->ai_family, SOCK_STREAM, IPPROTO_TCP); configure_tcp(c); } @@ -431,7 +427,7 @@ begin: fcntl(c->socket, F_SETFD, FD_CLOEXEC); #endif - if(proxytype != PROXY_EXEC) { + if(mesh->proxytype != PROXY_EXEC) { #if defined(SOL_IPV6) && defined(IPV6_V6ONLY) int option = 1; if(c->address.sa.sa_family == AF_INET6) @@ -443,9 +439,9 @@ begin: /* Connect */ - if(!proxytype) { + if(!mesh->proxytype) { result = connect(c->socket, &c->address.sa, SALEN(c->address.sa)); - } else if(proxytype == PROXY_EXEC) { + } else if(mesh->proxytype == PROXY_EXEC) { result = 0; } else { result = connect(c->socket, proxyai->ai_addr, proxyai->ai_addrlen); @@ -468,7 +464,7 @@ begin: connection_add(c); - io_add(&c->io, handle_meta_io, c, c->socket, IO_READ|IO_WRITE); + io_add(&mesh->loop, &c->io, handle_meta_io, c, c->socket, IO_READ|IO_WRITE); return true; } @@ -507,7 +503,7 @@ static struct addrinfo *get_known_addresses(node_t *n) { } void setup_outgoing_connection(outgoing_t *outgoing) { - timeout_del(&outgoing->ev); + timeout_del(&mesh->loop, &outgoing->ev); node_t *n = lookup_node(outgoing->name); @@ -538,7 +534,7 @@ void setup_outgoing_connection(outgoing_t *outgoing) { accept a new tcp connect and create a new connection */ -void handle_new_meta_connection(void *data, int flags) { +void handle_new_meta_connection(event_loop_t *loop, void *data, int flags) { listen_socket_t *l = data; connection_t *c; sockaddr_t sa; @@ -616,7 +612,7 @@ void handle_new_meta_connection(void *data, int flags) { logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection from %s", c->hostname); - io_add(&c->io, handle_meta_io, c, c->socket, IO_READ); + io_add(&mesh->loop, &c->io, handle_meta_io, c, c->socket, IO_READ); configure_tcp(c); @@ -627,7 +623,7 @@ void handle_new_meta_connection(void *data, int flags) { } static void free_outgoing(outgoing_t *outgoing) { - timeout_del(&outgoing->ev); + timeout_del(&mesh->loop, &outgoing->ev); if(outgoing->ai) freeaddrinfo(outgoing->ai);