mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-18 09:04:49 -04:00
Small improvements of TCP
This commit is contained in:
parent
7271d7ffd0
commit
1b99265fc3
@ -208,6 +208,9 @@ void network::tcp::decode(network::interface_descriptor& interface, network::eth
|
|||||||
auto next_seq = ack;
|
auto next_seq = ack;
|
||||||
auto next_ack = seq + tcp_payload_len(packet);;
|
auto next_ack = seq + tcp_payload_len(packet);;
|
||||||
|
|
||||||
|
logging::logf(logging::log_level::TRACE, "tcp: Next Seq Number %u \n", size_t(next_seq));
|
||||||
|
logging::logf(logging::log_level::TRACE, "tcp: Next Ack Number %u \n", size_t(next_ack));
|
||||||
|
|
||||||
auto connection_ptr = connections.get_connection_for_packet(source_port, target_port);
|
auto connection_ptr = connections.get_connection_for_packet(source_port, target_port);
|
||||||
|
|
||||||
if(connection_ptr){
|
if(connection_ptr){
|
||||||
@ -411,9 +414,6 @@ std::expected<void> network::tcp::finalize_packet(network::interface_descriptor&
|
|||||||
|
|
||||||
connection.listening = true;
|
connection.listening = true;
|
||||||
|
|
||||||
uint32_t seq = 0;
|
|
||||||
uint32_t ack = 0;
|
|
||||||
|
|
||||||
bool received = false;
|
bool received = false;
|
||||||
|
|
||||||
for(size_t t = 0; t < max_tries; ++t){
|
for(size_t t = 0; t < max_tries; ++t){
|
||||||
@ -473,9 +473,6 @@ std::expected<void> network::tcp::finalize_packet(network::interface_descriptor&
|
|||||||
if (correct_ack) {
|
if (correct_ack) {
|
||||||
logging::logf(logging::log_level::TRACE, "tcp: Received ACK\n");
|
logging::logf(logging::log_level::TRACE, "tcp: Received ACK\n");
|
||||||
|
|
||||||
seq = switch_endian_32(tcp_header->sequence_number);
|
|
||||||
ack = switch_endian_32(tcp_header->ack_number);
|
|
||||||
|
|
||||||
delete[] received_packet.payload;
|
delete[] received_packet.payload;
|
||||||
|
|
||||||
received = true;
|
received = true;
|
||||||
@ -507,10 +504,6 @@ std::expected<void> network::tcp::finalize_packet(network::interface_descriptor&
|
|||||||
connection.listening = false;
|
connection.listening = false;
|
||||||
|
|
||||||
if(received){
|
if(received){
|
||||||
// Set the future sequence and acknowledgement numbers
|
|
||||||
connection.seq_number = ack;
|
|
||||||
connection.ack_number = seq + 1;
|
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
} else {
|
} else {
|
||||||
return std::make_unexpected<void>(std::ERROR_SOCKET_TCP_ERROR);
|
return std::make_unexpected<void>(std::ERROR_SOCKET_TCP_ERROR);
|
||||||
@ -748,7 +741,7 @@ std::expected<void> network::tcp::disconnect(network::socket& sock) {
|
|||||||
connection.ack_number = seq + 1;
|
connection.ack_number = seq + 1;
|
||||||
|
|
||||||
logging::logf(logging::log_level::TRACE, "tcp: Received FIN/ACK waiting for ACK\n");
|
logging::logf(logging::log_level::TRACE, "tcp: Received FIN/ACK waiting for ACK\n");
|
||||||
} else {
|
} else if(rec_fin_ack) {
|
||||||
logging::logf(logging::log_level::TRACE, "tcp: Received FIN/ACK directly waiting for ACK\n");
|
logging::logf(logging::log_level::TRACE, "tcp: Received FIN/ACK directly waiting for ACK\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user