mirror of
https://github.com/RGBCube/serenity
synced 2025-05-18 21:35:06 +00:00
Kernel: Use a more detailed state machine for socket setup
This commit is contained in:
parent
638008da13
commit
bd6d2c0819
8 changed files with 64 additions and 11 deletions
|
@ -414,12 +414,14 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
|
|||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
||||
socket->send_tcp_packet(TCPFlags::ACK);
|
||||
socket->set_state(TCPSocket::State::Established);
|
||||
socket->set_setup_state(Socket::SetupState::Completed);
|
||||
socket->set_connected(true);
|
||||
return;
|
||||
default:
|
||||
kprintf("handle_tcp: unexpected flags in SynSent state\n");
|
||||
socket->send_tcp_packet(TCPFlags::RST);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
socket->set_setup_state(Socket::SetupState::Completed);
|
||||
return;
|
||||
}
|
||||
case TCPSocket::State::SynReceived:
|
||||
|
@ -427,8 +429,10 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
|
|||
case TCPFlags::ACK:
|
||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
||||
socket->set_state(TCPSocket::State::Established);
|
||||
if (socket->direction() == TCPSocket::Direction::Outgoing)
|
||||
if (socket->direction() == TCPSocket::Direction::Outgoing) {
|
||||
socket->set_setup_state(Socket::SetupState::Completed);
|
||||
socket->set_connected(true);
|
||||
}
|
||||
return;
|
||||
default:
|
||||
kprintf("handle_tcp: unexpected flags in SynReceived state\n");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue