diff --git a/src/main.c b/src/main.c index 9fa2b27..4b2cafc 100644 --- a/src/main.c +++ b/src/main.c @@ -51,11 +51,6 @@ struct fdbuf { buffer_t write; }; -struct blk { - size_t size; - uint8_t data[GT_MTU_MAX] _align_(16); -}; - struct crypto_ctx { struct { crypto_aead_aes256gcm_state state; @@ -966,14 +961,6 @@ int main (int argc, char **argv) return 1; } - struct blk *blks = calloc(256, sizeof(struct blk)); - size_t blk_count = 0; - uint8_t blk_read = 0; - uint8_t blk_write = 0; - - if (!blks) - return 1; - fd_set_nonblock(tun.fd); buffer_setup(&tun.write, NULL, GT_TUNW_SIZE); @@ -1126,7 +1113,9 @@ int main (int argc, char **argv) goto restart; FD_CLR(tun.fd, &rfds); } else { - if (!blks[blk_write].size) { + buffer_shift(&tun.read); + + if (buffer_write_size(&tun.read)>=GT_MTU_MAX) { FD_SET(tun.fd, &rfds); } else { FD_CLR(tun.fd, &rfds); @@ -1157,9 +1146,13 @@ int main (int argc, char **argv) // gettimeofday(&now, NULL); if (FD_ISSET(tun.fd, &rfds)) { - while (!blks[blk_write].size) { - uint8_t *data = blks[blk_write].data; - const ssize_t r = tun_read(tun.fd, data, GT_MTU_MAX); + while (1) { + const size_t size = buffer_write_size(&tun.read); + + if (size0) { sock.write.read += r; - } else { - if (!r) - stop_loop |= (1<<2); - break; + } else if (!r) { + stop_loop |= (1<<2); } } @@ -1305,8 +1276,6 @@ int main (int argc, char **argv) freeaddrinfo(ai); - free(blks); - free(sock.write.data); free(sock.read.data);