only send next TCP PSH if client's acked seq has changed
This commit is contained in:
@@ -1166,6 +1166,7 @@ void IPStackSimulator::on_client_tcp_frame(
|
|||||||
throw runtime_error("non-SYN frame does not correspond to any open TCP connection");
|
throw runtime_error("non-SYN frame does not correspond to any open TCP connection");
|
||||||
}
|
}
|
||||||
bool conn_valid = true;
|
bool conn_valid = true;
|
||||||
|
bool acked_seq_changed = false;
|
||||||
|
|
||||||
if (fi.tcp->flags & TCPHeader::Flag::ACK) {
|
if (fi.tcp->flags & TCPHeader::Flag::ACK) {
|
||||||
ip_stack_simulator_log.debug("Client sent ACK %08" PRIX32, fi.tcp->ack_num.load());
|
ip_stack_simulator_log.debug("Client sent ACK %08" PRIX32, fi.tcp->ack_num.load());
|
||||||
@@ -1189,6 +1190,7 @@ void IPStackSimulator::on_client_tcp_frame(
|
|||||||
conn->acked_server_seq += ack_delta;
|
conn->acked_server_seq += ack_delta;
|
||||||
conn->resend_push_usecs = DEFAULT_RESEND_PUSH_USECS;
|
conn->resend_push_usecs = DEFAULT_RESEND_PUSH_USECS;
|
||||||
conn->next_push_max_frame_size = conn->max_frame_size;
|
conn->next_push_max_frame_size = conn->max_frame_size;
|
||||||
|
acked_seq_changed = true;
|
||||||
|
|
||||||
ip_stack_simulator_log.debug("Removed %08" PRIX32 " bytes from pending buffer and advanced acked_server_seq to %08" PRIX32,
|
ip_stack_simulator_log.debug("Removed %08" PRIX32 " bytes from pending buffer and advanced acked_server_seq to %08" PRIX32,
|
||||||
ack_delta, conn->acked_server_seq);
|
ack_delta, conn->acked_server_seq);
|
||||||
@@ -1298,7 +1300,7 @@ void IPStackSimulator::on_client_tcp_frame(
|
|||||||
conn_str.c_str(), conn->acked_server_seq, conn->next_client_seq, conn->bytes_received);
|
conn_str.c_str(), conn->acked_server_seq, conn->next_client_seq, conn->bytes_received);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn_valid) {
|
if (conn_valid && acked_seq_changed) {
|
||||||
// Try to send some more data if the client is waiting on it
|
// Try to send some more data if the client is waiting on it
|
||||||
this->send_pending_push_frame(c, *conn);
|
this->send_pending_push_frame(c, *conn);
|
||||||
}
|
}
|
||||||
@@ -1385,8 +1387,7 @@ void IPStackSimulator::send_pending_push_frame(shared_ptr<IPClient> c, IPClient:
|
|||||||
if (conn.resend_push_usecs > 5000000) {
|
if (conn.resend_push_usecs > 5000000) {
|
||||||
conn.resend_push_usecs = 5000000;
|
conn.resend_push_usecs = 5000000;
|
||||||
}
|
}
|
||||||
conn.next_push_max_frame_size = max<size_t>(
|
conn.next_push_max_frame_size = max<size_t>(0x100, conn.next_push_max_frame_size - 0x100);
|
||||||
0x100, conn.next_push_max_frame_size - 0x100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IPStackSimulator::send_tcp_frame(
|
void IPStackSimulator::send_tcp_frame(
|
||||||
|
|||||||
Reference in New Issue
Block a user