diff options
author | Christian Pointner <equinox@anytun.org> | 2014-06-29 18:46:48 +0000 |
---|---|---|
committer | Christian Pointner <equinox@anytun.org> | 2014-06-29 18:46:48 +0000 |
commit | c46e345801601988194a01c4428eb10690e01461 (patch) | |
tree | b22d4d485c519f2587549c6c45038ec902a09a20 | |
parent | creating and closing unix domain sockets works now (diff) |
accepting new clients and receiving data from unix sockets work now
-rw-r--r-- | src/uanytun.c | 40 | ||||
-rw-r--r-- | src/unixdomain.c | 2 |
2 files changed, 40 insertions, 2 deletions
diff --git a/src/uanytun.c b/src/uanytun.c index 256f583..c743524 100644 --- a/src/uanytun.c +++ b/src/uanytun.c @@ -214,6 +214,35 @@ int process_sock_data(tun_device_t* dev, int fd, udp_t* sock, options_t* opt, pl } + +int process_key_exchange(unixdomain_t* sock, fd_set* readyfds) +{ + if(FD_ISSET(sock->server_fd_, readyfds)) { + int old_fd = sock->client_fd_; + unixdomain_accept(sock); + if(old_fd != sock->client_fd_) { + log_printf(INFO, "key exchange: new client"); + } + } + if(FD_ISSET(sock->client_fd_, readyfds)) { + u_int8_t buf[100]; + int len = unixdomain_read(sock, buf, sizeof(buf)); + if(len < 0) { + log_printf(ERROR, "key exchange: client error!!!!!"); + } if(!len) { + log_printf(INFO, "key exchange: client disconnected"); + sock->client_fd_ = -1; + } else { + buf[len] = 0; + log_printf(DEBUG, "key exchange: received string '%s'", buf); + } + } + + return 0; +} + + + int main_loop(tun_device_t* dev, udp_t* sock, options_t* opt) { log_printf(INFO, "entering main loop"); @@ -254,7 +283,9 @@ int main_loop(tun_device_t* dev, udp_t* sock, options_t* opt) while(!return_value) { memcpy(&readyfds, &readfds, sizeof(readyfds)); - int ret = select(nfds + 1, &readyfds, NULL, NULL, NULL); + int kx_max_fd = unixdomain_fill_fd_set(&kx_data, &readyfds); + int tmp = (nfds < kx_max_fd) ? kx_max_fd : nfds; + int ret = select(tmp + 1, &readyfds, NULL, NULL, NULL); if(ret == -1 && errno != EINTR) { log_printf(ERROR, "select returned with error: %s", strerror(errno)); return_value = -1; @@ -283,6 +314,13 @@ int main_loop(tun_device_t* dev, udp_t* sock, options_t* opt) break; } + if(FD_ISSET(kx_data.server_fd_, &readyfds) || FD_ISSET(kx_data.server_fd_, &readyfds) || + FD_ISSET(kx_data.client_fd_, &readyfds) || FD_ISSET(kx_data.client_fd_, &readyfds)) { + return_value = process_key_exchange(&kx_data, &readyfds); + if(return_value) + break; + } + udp_socket_t* s = sock->socks_; while(s) { if(FD_ISSET(s->fd_, &readyfds)) { diff --git a/src/unixdomain.c b/src/unixdomain.c index ceceed0..599ddc6 100644 --- a/src/unixdomain.c +++ b/src/unixdomain.c @@ -135,7 +135,7 @@ int unixdomain_accept(unixdomain_t* sock) int new_client = accept(sock->server_fd_, NULL, NULL); if(new_client < 0) { -// TODO: error HANDLING + // TODO: error HANDLING return -1; } |