LibTLS: Forward non blocking errors to caller

This commit is contained in:
devgianlu 2025-02-22 12:38:48 +01:00 committed by Ali Mohammad Pur
commit ad6d0f6014
Notes: github-actions[bot] 2025-02-22 17:41:34 +00:00

View file

@ -43,7 +43,6 @@ void TLSv12::wait_for_activity(bool read)
ErrorOr<Bytes> TLSv12::read_some(Bytes bytes) ErrorOr<Bytes> TLSv12::read_some(Bytes bytes)
{ {
while (true) {
auto ret = SSL_read(m_ssl, bytes.data(), bytes.size()); auto ret = SSL_read(m_ssl, bytes.data(), bytes.size());
if (ret <= 0) { if (ret <= 0) {
auto err = SSL_get_error(m_ssl, ret); auto err = SSL_get_error(m_ssl, ret);
@ -51,11 +50,8 @@ ErrorOr<Bytes> TLSv12::read_some(Bytes bytes)
case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_ZERO_RETURN:
return Bytes { bytes.data(), 0 }; return Bytes { bytes.data(), 0 };
case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_READ:
wait_for_activity(true);
continue;
case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_WRITE:
wait_for_activity(false); return Error::from_errno(EAGAIN);
continue;
default: default:
return AK::Error::from_string_literal("Failed reading from SSL connection"); return AK::Error::from_string_literal("Failed reading from SSL connection");
} }
@ -63,21 +59,16 @@ ErrorOr<Bytes> TLSv12::read_some(Bytes bytes)
return Bytes { bytes.data(), static_cast<unsigned long>(ret) }; return Bytes { bytes.data(), static_cast<unsigned long>(ret) };
} }
}
ErrorOr<size_t> TLSv12::write_some(ReadonlyBytes bytes) ErrorOr<size_t> TLSv12::write_some(ReadonlyBytes bytes)
{ {
while (true) {
auto ret = SSL_write(m_ssl, bytes.data(), bytes.size()); auto ret = SSL_write(m_ssl, bytes.data(), bytes.size());
if (ret <= 0) { if (ret <= 0) {
auto err = SSL_get_error(m_ssl, ret); auto err = SSL_get_error(m_ssl, ret);
switch (err) { switch (err) {
case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_READ:
wait_for_activity(true);
continue;
case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_WRITE:
wait_for_activity(false); return Error::from_errno(EAGAIN);
continue;
default: default:
return AK::Error::from_string_literal("Failed writing to SSL connection"); return AK::Error::from_string_literal("Failed writing to SSL connection");
} }
@ -85,7 +76,6 @@ ErrorOr<size_t> TLSv12::write_some(ReadonlyBytes bytes)
return ret; return ret;
} }
}
bool TLSv12::is_eof() const bool TLSv12::is_eof() const
{ {