RequestServer: Do not randomly assign preconnect request IDs
Let's avoid the possibility that we randomly generate a request ID that already exists and is in use.
This commit is contained in:
parent
624611aa3f
commit
a5bc2e96c3
5 changed files with 9 additions and 11 deletions
|
|
@ -34,7 +34,8 @@ void RequestClient::die()
|
|||
|
||||
void RequestClient::ensure_connection(URL::URL const& url, ::RequestServer::CacheLevel cache_level)
|
||||
{
|
||||
async_ensure_connection(url, cache_level);
|
||||
auto request_id = m_next_request_id++;
|
||||
async_ensure_connection(request_id, url, cache_level);
|
||||
}
|
||||
|
||||
RefPtr<Request> RequestClient::start_request(ByteString const& method, URL::URL const& url, Optional<HTTP::HeaderList const&> request_headers, ReadonlyBytes request_body, Core::ProxyData const& proxy_data)
|
||||
|
|
@ -43,9 +44,7 @@ RefPtr<Request> RequestClient::start_request(ByteString const& method, URL::URL
|
|||
if (body_result_or_error.is_error())
|
||||
return nullptr;
|
||||
|
||||
static u64 s_next_request_id = 0;
|
||||
auto request_id = s_next_request_id++;
|
||||
|
||||
auto request_id = m_next_request_id++;
|
||||
auto headers = request_headers.map([](auto const& headers) { return headers.headers().span(); }).value_or({});
|
||||
|
||||
auto body_result = body_result_or_error.release_value();
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ private:
|
|||
virtual void estimated_cache_size(u64 cache_size_estimation_id, CacheSizes sizes) override;
|
||||
|
||||
HashMap<u64, RefPtr<Request>> m_requests;
|
||||
u64 m_next_request_id { 0 };
|
||||
|
||||
HashMap<u64, NonnullRefPtr<WebSocket>> m_websockets;
|
||||
u64 m_next_websocket_id { 0 };
|
||||
|
|
|
|||
|
|
@ -295,12 +295,10 @@ Messages::RequestServer::SetCertificateResponse ConnectionFromClient::set_certif
|
|||
TODO();
|
||||
}
|
||||
|
||||
void ConnectionFromClient::ensure_connection(URL::URL url, ::RequestServer::CacheLevel cache_level)
|
||||
void ConnectionFromClient::ensure_connection(u64 request_id, URL::URL url, ::RequestServer::CacheLevel cache_level)
|
||||
{
|
||||
auto connect_only_request_id = get_random<u64>();
|
||||
|
||||
auto request = Request::connect(connect_only_request_id, *this, m_curl_multi, m_resolver, move(url), cache_level);
|
||||
m_active_requests.set(connect_only_request_id, move(request));
|
||||
auto request = Request::connect(request_id, *this, m_curl_multi, m_resolver, move(url), cache_level);
|
||||
m_active_requests.set(request_id, move(request));
|
||||
}
|
||||
|
||||
void ConnectionFromClient::estimate_cache_size_accessed_since(u64 cache_size_estimation_id, UnixDateTime since)
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ private:
|
|||
virtual void start_request(u64 request_id, ByteString, URL::URL, Vector<HTTP::Header>, ByteBuffer, Core::ProxyData) override;
|
||||
virtual Messages::RequestServer::StopRequestResponse stop_request(u64 request_id) override;
|
||||
virtual Messages::RequestServer::SetCertificateResponse set_certificate(u64 request_id, ByteString, ByteString) override;
|
||||
virtual void ensure_connection(URL::URL url, ::RequestServer::CacheLevel cache_level) override;
|
||||
virtual void ensure_connection(u64 request_id, URL::URL url, ::RequestServer::CacheLevel cache_level) override;
|
||||
|
||||
virtual void estimate_cache_size_accessed_since(u64 cache_size_estimation_id, UnixDateTime since) override;
|
||||
virtual void remove_cache_entries_accessed_since(UnixDateTime since) override;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ endpoint RequestServer
|
|||
stop_request(u64 request_id) => (bool success)
|
||||
set_certificate(u64 request_id, ByteString certificate, ByteString key) => (bool success)
|
||||
|
||||
ensure_connection(URL::URL url, ::RequestServer::CacheLevel cache_level) =|
|
||||
ensure_connection(u64 request_id, URL::URL url, ::RequestServer::CacheLevel cache_level) =|
|
||||
|
||||
estimate_cache_size_accessed_since(u64 cache_size_estimation_id, UnixDateTime since) =|
|
||||
remove_cache_entries_accessed_since(UnixDateTime since) =|
|
||||
|
|
|
|||
Loading…
Reference in a new issue