diff --git a/glorytun.c b/glorytun.c index c7aece2..1465a60 100644 --- a/glorytun.c +++ b/glorytun.c @@ -28,8 +28,10 @@ struct option { struct netio { int fd; - buffer_t recv; - buffer_t send; // TODO + struct { + buffer_t buf; + ssize_t ret; + } write, read; }; struct crypto_ctx { @@ -634,8 +636,8 @@ int main (int argc, char **argv) fd_set_nonblock(tun.fd); - buffer_setup(&tun.recv, NULL, GT_BUFFER_SIZE); - buffer_setup(&sock.recv, NULL, GT_BUFFER_SIZE); + buffer_setup(&sock.write.buf, NULL, GT_BUFFER_SIZE); + buffer_setup(&sock.read.buf, NULL, GT_BUFFER_SIZE); int fd = -1; @@ -687,11 +689,11 @@ int main (int argc, char **argv) return 1; } - buffer_shift(&tun.recv); + buffer_shift(&sock.write.buf); if (fds[0].revents & POLLIN) { while (1) { - if (buffer_write_size(&tun.recv)0) - tun.recv.read += r; + if (sock.write.ret>0) + sock.write.buf.read += sock.write.ret; } - buffer_shift(&sock.recv); + buffer_shift(&sock.read.buf); if (fds[1].revents & POLLIN) { - ssize_t r = fd_read(fds[1].fd, sock.recv.write, buffer_write_size(&sock.recv)); + sock.read.ret = fd_read(fds[1].fd, sock.read.buf.write, buffer_write_size(&sock.read.buf)); - if (!r) + if (!sock.read.ret) goto restart; - if (r>0) - sock.recv.write += r; + if (sock.read.ret>0) + sock.read.buf.write += sock.read.ret; } if (fds[0].revents & POLLOUT) @@ -747,8 +749,8 @@ int main (int argc, char **argv) while (1) { if (!tunw.size) { - size_t size = buffer_read_size(&sock.recv); - ssize_t ip_size = get_ip_size(sock.recv.read, size); + size_t size = buffer_read_size(&sock.read.buf); + ssize_t ip_size = get_ip_size(sock.read.buf.read, size); if (!ip_size) goto restart; @@ -756,7 +758,7 @@ int main (int argc, char **argv) if (ip_size<0 || (size_t)ip_size+16>size) break; - if (decrypt_packet(&ctx, tunw.buf, ip_size, &sock.recv)) { + if (decrypt_packet(&ctx, tunw.buf, ip_size, &sock.read.buf)) { fprintf(stderr, "%s: message could not be verified!\n", sockname); goto restart; } @@ -792,8 +794,8 @@ int main (int argc, char **argv) freeaddrinfo(ai); - free(tun.recv.data); - free(sock.recv.data); + free(sock.write.buf.data); + free(sock.read.buf.data); return 0; }