diff --git a/Libraries/LibRequests/NetworkError.h b/Libraries/LibRequests/NetworkError.h index b1b3dc46742..5250d99e318 100644 --- a/Libraries/LibRequests/NetworkError.h +++ b/Libraries/LibRequests/NetworkError.h @@ -20,6 +20,7 @@ enum class NetworkError { SSLVerificationFailed, MalformedUrl, InvalidContentEncoding, + RequestServerDied, Unknown, }; @@ -44,6 +45,8 @@ constexpr StringView network_error_to_string(NetworkError network_error) return "The URL is not formatted properly"sv; case NetworkError::InvalidContentEncoding: return "Response could not be decoded with its Content-Encoding"sv; + case NetworkError::RequestServerDied: + return "RequestServer is currently unavailable"sv; case NetworkError::Unknown: return "An unexpected network error occurred"sv; } diff --git a/Libraries/LibRequests/RequestClient.cpp b/Libraries/LibRequests/RequestClient.cpp index e80f5bed499..e07427c75f0 100644 --- a/Libraries/LibRequests/RequestClient.cpp +++ b/Libraries/LibRequests/RequestClient.cpp @@ -19,8 +19,12 @@ RequestClient::~RequestClient() = default; void RequestClient::die() { - // FIXME: Gracefully handle this, or relaunch and reconnect to RequestServer. - warnln("\033[31;1m {} Lost connection to RequestServer\033[0m", Core::System::getpid()); + for (auto& [id, request] : m_requests) { + if (request) + request->did_finish({}, {}, {}, NetworkError::RequestServerDied); + } + + m_requests.clear(); } void RequestClient::ensure_connection(URL::URL const& url, ::RequestServer::CacheLevel cache_level) diff --git a/Libraries/LibRequests/RequestClient.h b/Libraries/LibRequests/RequestClient.h index 43fa504d1d7..5c74e3edd78 100644 --- a/Libraries/LibRequests/RequestClient.h +++ b/Libraries/LibRequests/RequestClient.h @@ -39,6 +39,8 @@ public: bool stop_request(Badge, Request&); bool set_certificate(Badge, Request&, ByteString, ByteString); + Function on_request_server_died; + private: virtual void die() override;