mirror of https://github.com/M66B/NetGuard.git
Calculate receive winodw after forwarding data
This commit is contained in:
parent
aa0c35452b
commit
a055791d4a
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue