From a055791d4afd8a84fff127e839611203665e25c6 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 3 Mar 2016 11:02:45 +0100 Subject: [PATCH] Calculate receive winodw after forwarding data --- app/src/main/jni/netguard/tcp.c | 46 ++++++++++++++++----------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/app/src/main/jni/netguard/tcp.c b/app/src/main/jni/netguard/tcp.c index 67abfce1..7583394b 100644 --- a/app/src/main/jni/netguard/tcp.c +++ b/app/src/main/jni/netguard/tcp.c @@ -212,29 +212,6 @@ void check_tcp_sockets(const struct arguments *args, fd_set *rfds, fd_set *wfds, } } } else { - // Calculate recv window - int unsent = 0; - int window = TCP_RECV_WINDOW; - if (cur->socket >= 0) { - if (ioctl(cur->socket, SIOCOUTQ, &unsent)) - log_android(ANDROID_LOG_WARN, "ioctl SIOCOUTQ %d: %s", - errno, strerror(errno)); - else { - struct segment *q = cur->forward; - while (q != NULL) { - unsent += q->len; - q = q->next; - } - window = (unsent < TCP_RECV_WINDOW ? TCP_RECV_WINDOW - unsent : 0); - } - } - - int prev = cur->recv_window; - cur->recv_window = (uint16_t) window; - if ((prev == 0 && window > 0) || (prev > 0 && window == 0)) - log_android(ANDROID_LOG_WARN, "%s recv window %d > %d", - session, prev, window); - // Always forward data int fwd = 0; if (FD_ISSET(cur->socket, wfds)) { @@ -279,6 +256,29 @@ void check_tcp_sockets(const struct arguments *args, fd_set *rfds, fd_set *wfds, } } + // Calculate recv window + int unsent = 0; + int window = TCP_RECV_WINDOW; + if (cur->socket >= 0) { + if (ioctl(cur->socket, SIOCOUTQ, &unsent)) + log_android(ANDROID_LOG_WARN, "ioctl SIOCOUTQ %d: %s", + errno, strerror(errno)); + else { + struct segment *q = cur->forward; + while (q != NULL) { + unsent += q->len; + q = q->next; + } + window = (unsent < TCP_RECV_WINDOW ? TCP_RECV_WINDOW - unsent : 0); + } + } + + int prev = cur->recv_window; + cur->recv_window = (uint16_t) window; + if ((prev == 0 && window > 0) || (prev > 0 && window == 0)) + log_android(ANDROID_LOG_WARN, "%s recv window %d > %d", + session, prev, window); + // Acknowledge forwarded data if (fwd || (prev == 0 && window > 0)) { if (fwd && cur->forward == NULL && cur->state == TCP_CLOSE_WAIT) {