]> git.meshlink.io Git - meshlink/blobdiff - src/net_socket.c
Remove global variables from the event loop code.
[meshlink] / src / net_socket.c
index 80fe84cac2876aff23b5e7826a5df7fdae3bb84a..589c4caa9b5424bb3113d61b6b59e0b124313e55 100644 (file)
 #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);