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 {
|
} 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
|
// Always forward data
|
||||||
int fwd = 0;
|
int fwd = 0;
|
||||||
if (FD_ISSET(cur->socket, wfds)) {
|
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
|
// Acknowledge forwarded data
|
||||||
if (fwd || (prev == 0 && window > 0)) {
|
if (fwd || (prev == 0 && window > 0)) {
|
||||||
if (fwd && cur->forward == NULL && cur->state == TCP_CLOSE_WAIT) {
|
if (fwd && cur->forward == NULL && cur->state == TCP_CLOSE_WAIT) {
|
||||||
|
|
Loading…
Reference in New Issue