1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 23:27:35 +00:00

Revert "LibTLS: Close the underlying socket on EOF"

This reverts commit 23febbed41.

It breaks the TestTLSHandshake test used in CI, it causes it
to hang, and all CI jobs have been hanging.
This commit is contained in:
Brian Gianforcaro 2021-09-16 00:28:18 -07:00 committed by Brian Gianforcaro
parent 9f50e288f7
commit b61eff8730
2 changed files with 13 additions and 21 deletions

View file

@ -142,21 +142,20 @@ bool TLSv12::common_connect(const struct sockaddr* saddr, socklen_t length)
return true; return true;
} }
void TLSv12::notify_client_for_app_data()
{
if (m_context.application_buffer.size() > 0) {
if (!m_has_scheduled_app_data_flush) {
deferred_invoke([this] { notify_client_for_app_data(); });
m_has_scheduled_app_data_flush = true;
}
if (on_tls_ready_to_read)
on_tls_ready_to_read(*this);
}
m_has_scheduled_app_data_flush = false;
}
void TLSv12::read_from_socket() void TLSv12::read_from_socket()
{ {
auto did_schedule_read = false;
auto notify_client_for_app_data = [&] {
if (m_context.application_buffer.size() > 0) {
if (!did_schedule_read) {
deferred_invoke([&] { read_from_socket(); });
did_schedule_read = true;
}
if (on_tls_ready_to_read)
on_tls_ready_to_read(*this);
}
};
// If there's anything before we consume stuff, let the client know // If there's anything before we consume stuff, let the client know
// since we won't be consuming things if the connection is terminated. // since we won't be consuming things if the connection is terminated.
notify_client_for_app_data(); notify_client_for_app_data();
@ -189,15 +188,10 @@ void TLSv12::write_into_socket()
bool TLSv12::check_connection_state(bool read) bool TLSv12::check_connection_state(bool read)
{ {
if (m_context.connection_finished)
return false;
if (!Core::Socket::is_open() || !Core::Socket::is_connected() || Core::Socket::eof()) { if (!Core::Socket::is_open() || !Core::Socket::is_connected() || Core::Socket::eof()) {
// an abrupt closure (the server is a jerk) // an abrupt closure (the server is a jerk)
dbgln_if(TLS_DEBUG, "Socket not open, assuming abrupt closure"); dbgln_if(TLS_DEBUG, "Socket not open, assuming abrupt closure");
m_context.connection_finished = true; m_context.connection_finished = true;
Core::Socket::close();
return false;
} }
if (m_context.critical_error) { if (m_context.critical_error) {
dbgln_if(TLS_DEBUG, "CRITICAL ERROR {} :(", m_context.critical_error); dbgln_if(TLS_DEBUG, "CRITICAL ERROR {} :(", m_context.critical_error);
@ -216,7 +210,7 @@ bool TLSv12::check_connection_state(bool read)
m_context.tls_buffer.size(), m_context.tls_buffer.size(),
m_context.application_buffer.size()); m_context.application_buffer.size());
} else { } else {
m_context.connection_finished = true; m_context.connection_finished = false;
dbgln_if(TLS_DEBUG, "FINISHED"); dbgln_if(TLS_DEBUG, "FINISHED");
} }
if (!m_context.application_buffer.size()) { if (!m_context.application_buffer.size()) {

View file

@ -412,7 +412,6 @@ private:
void read_from_socket(); void read_from_socket();
bool check_connection_state(bool read); bool check_connection_state(bool read);
void notify_client_for_app_data();
ssize_t handle_server_hello(ReadonlyBytes, WritePacketStage&); ssize_t handle_server_hello(ReadonlyBytes, WritePacketStage&);
ssize_t handle_handshake_finished(ReadonlyBytes, WritePacketStage&); ssize_t handle_handshake_finished(ReadonlyBytes, WritePacketStage&);
@ -516,7 +515,6 @@ private:
CipherVariant m_cipher_remote { Empty {} }; CipherVariant m_cipher_remote { Empty {} };
bool m_has_scheduled_write_flush { false }; bool m_has_scheduled_write_flush { false };
bool m_has_scheduled_app_data_flush { false };
i32 m_max_wait_time_for_handshake_in_seconds { 10 }; i32 m_max_wait_time_for_handshake_in_seconds { 10 };
RefPtr<Core::Timer> m_handshake_timeout_timer; RefPtr<Core::Timer> m_handshake_timeout_timer;