Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/HashMap.h>
10#include <LibIPC/ConnectionToServer.h>
11#include <RequestServer/RequestClientEndpoint.h>
12#include <RequestServer/RequestServerEndpoint.h>
13
14namespace Protocol {
15
16class Request;
17
18class RequestClient final
19 : public IPC::ConnectionToServer<RequestClientEndpoint, RequestServerEndpoint>
20 , public RequestClientEndpoint {
21 IPC_CLIENT_CONNECTION(RequestClient, "/tmp/session/%sid/portal/request"sv)
22
23public:
24 template<typename RequestHashMapTraits = Traits<DeprecatedString>>
25 RefPtr<Request> start_request(DeprecatedString const& method, URL const&, HashMap<DeprecatedString, DeprecatedString, RequestHashMapTraits> const& request_headers = {}, ReadonlyBytes request_body = {}, Core::ProxyData const& = {});
26
27 void ensure_connection(URL const&, ::RequestServer::CacheLevel);
28
29 bool stop_request(Badge<Request>, Request&);
30 bool set_certificate(Badge<Request>, Request&, DeprecatedString, DeprecatedString);
31
32private:
33 RequestClient(NonnullOwnPtr<Core::LocalSocket>);
34
35 virtual void request_progress(i32, Optional<u32> const&, u32) override;
36 virtual void request_finished(i32, bool, u32) override;
37 virtual void certificate_requested(i32) override;
38 virtual void headers_became_available(i32, IPC::Dictionary const&, Optional<u32> const&) override;
39
40 HashMap<i32, RefPtr<Request>> m_requests;
41};
42
43}