X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet_socket.c;h=3c79ceeabacd401210c4ba3a21c004cb251c3874;hb=6834b882015a9323672e9fce8811aa4283f196f0;hp=4316e2d6c86a2b8b73e35668191128f1cc27fb26;hpb=1b30cee086148975886f961aadc26e23b1bfd6f2;p=tinc diff --git a/src/net_socket.c b/src/net_socket.c index 4316e2d6..3c79ceea 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -285,7 +285,7 @@ int setup_vpn_in_socket(const sockaddr_t *sa) { return nfd; } /* int setup_vpn_in_socket */ -static void retry_outgoing_handler(int fd, short events, void *data) { +static void retry_outgoing_handler(void *data) { setup_outgoing_connection(data); } @@ -295,8 +295,9 @@ void retry_outgoing(outgoing_t *outgoing) { if(outgoing->timeout > maxtimeout) outgoing->timeout = maxtimeout; - timeout_set(&outgoing->ev, retry_outgoing_handler, outgoing); - event_add(&outgoing->ev, &(struct timeval){outgoing->timeout, 0}); + outgoing->ev.handler = retry_outgoing_handler; + outgoing->ev.time = time(NULL) + outgoing->timeout; + event_add(&outgoing->ev); ifdebug(CONNECTIONS) logger(LOG_NOTICE, "Trying to re-establish outgoing connection in %d seconds", @@ -413,21 +414,6 @@ begin: return; } -void handle_meta_read(struct bufferevent *event, void *data) { - logger(LOG_ERR, "handle_meta_read() called"); - abort(); -} - -void handle_meta_write(struct bufferevent *event, void *data) { - ifdebug(META) logger(LOG_DEBUG, "handle_meta_write() called"); -} - -void handle_meta_connection_error(struct bufferevent *event, short what, void *data) { - connection_t *c = data; - logger(LOG_ERR, "handle_meta_connection_error() called: %d: %s", what, strerror(errno)); - terminate_connection(c, c->status.active); -} - void setup_outgoing_connection(outgoing_t *outgoing) { connection_t *c; node_t *n; @@ -469,13 +455,6 @@ void setup_outgoing_connection(outgoing_t *outgoing) { do_outgoing_connection(c); - c->buffer = bufferevent_new(c->socket, handle_meta_read, handle_meta_write, handle_meta_connection_error, c); - if(!c->buffer) { - logger(LOG_ERR, "bufferevent_new() failed: %s", strerror(errno)); - abort(); - } - bufferevent_disable(c->buffer, EV_READ); - if(!thread_create(&c->thread, handle_meta_connection_data, c)) { logger(LOG_ERR, "create_thread() failed: %s", strerror(errno)); abort(); @@ -486,52 +465,50 @@ void setup_outgoing_connection(outgoing_t *outgoing) { accept a new tcp connect and create a new connection */ -void handle_new_meta_connection(int sock, short events, void *data) { +void handle_new_meta_connection(void *data) { + listen_socket_t *l = data; connection_t *c; sockaddr_t sa; int fd; socklen_t len = sizeof sa; - fd = accept(sock, &sa.sa, &len); + while(true) { + fd = accept(l->tcp, &sa.sa, &len); - if(fd < 0) { - logger(LOG_ERR, "Accepting a new connection failed: %s", sockstrerror(sockerrno)); - return; - } + if(fd < 0) { + logger(LOG_ERR, "Accepting a new connection failed: %s", sockstrerror(sockerrno)); + return; + } - sockaddrunmap(&sa); + sockaddrunmap(&sa); - c = new_connection(); - c->name = xstrdup(""); - c->outcipher = myself->connection->outcipher; - c->outdigest = myself->connection->outdigest; - c->outmaclength = myself->connection->outmaclength; - c->outcompression = myself->connection->outcompression; + c = new_connection(); + c->name = xstrdup(""); + c->outcipher = myself->connection->outcipher; + c->outdigest = myself->connection->outdigest; + c->outmaclength = myself->connection->outmaclength; + c->outcompression = myself->connection->outcompression; - c->address = sa; - c->hostname = sockaddr2hostname(&sa); - c->socket = fd; - c->last_ping_time = time(NULL); + c->address = sa; + c->hostname = sockaddr2hostname(&sa); + c->socket = fd; + c->last_ping_time = time(NULL); - ifdebug(CONNECTIONS) logger(LOG_NOTICE, "Connection from %s", c->hostname); + ifdebug(CONNECTIONS) logger(LOG_NOTICE, "Connection from %s", c->hostname); - c->buffer = bufferevent_new(c->socket, NULL, handle_meta_write, handle_meta_connection_error, c); - if(!c->buffer) { - logger(LOG_ERR, "bufferevent_new() failed: %s", strerror(errno)); - abort(); - } - bufferevent_disable(c->buffer, EV_READ); - - configure_tcp(c); + configure_tcp(c); - connection_add(c); + mutex_lock(&mutex); + connection_add(c); - c->allow_request = ID; - send_id(c); + c->allow_request = ID; + send_id(c); - if(!thread_create(&c->thread, handle_meta_connection_data, c)) { - logger(LOG_ERR, "create_thread() failed: %s", strerror(errno)); - abort(); + if(!thread_create(&c->thread, handle_meta_connection_data, c)) { + logger(LOG_ERR, "create_thread() failed: %s", strerror(errno)); + abort(); + } + mutex_unlock(&mutex); } }