summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2014-06-29 18:46:48 +0000
committerChristian Pointner <equinox@anytun.org>2014-06-29 18:46:48 +0000
commitc46e345801601988194a01c4428eb10690e01461 (patch)
treeb22d4d485c519f2587549c6c45038ec902a09a20
parentcreating and closing unix domain sockets works now (diff)
accepting new clients and receiving data from unix sockets work now
-rw-r--r--src/uanytun.c40
-rw-r--r--src/unixdomain.c2
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;
}