diff options
Diffstat (limited to 'Services')
-rw-r--r-- | Services/ProtocolServer/ClientConnection.cpp | 2 | ||||
-rw-r--r-- | Services/ProtocolServer/GeminiProtocol.cpp | 2 | ||||
-rw-r--r-- | Services/ProtocolServer/GeminiProtocol.h | 2 | ||||
-rw-r--r-- | Services/ProtocolServer/HttpProtocol.cpp | 8 | ||||
-rw-r--r-- | Services/ProtocolServer/HttpProtocol.h | 2 | ||||
-rw-r--r-- | Services/ProtocolServer/HttpsProtocol.cpp | 8 | ||||
-rw-r--r-- | Services/ProtocolServer/HttpsProtocol.h | 2 | ||||
-rw-r--r-- | Services/ProtocolServer/Protocol.h | 2 | ||||
-rw-r--r-- | Services/ProtocolServer/ProtocolServer.ipc | 2 |
9 files changed, 19 insertions, 11 deletions
diff --git a/Services/ProtocolServer/ClientConnection.cpp b/Services/ProtocolServer/ClientConnection.cpp index beaa55c4e1..86cc6344ce 100644 --- a/Services/ProtocolServer/ClientConnection.cpp +++ b/Services/ProtocolServer/ClientConnection.cpp @@ -66,7 +66,7 @@ OwnPtr<Messages::ProtocolServer::StartDownloadResponse> ClientConnection::handle auto* protocol = Protocol::find_by_name(url.protocol()); if (!protocol) return make<Messages::ProtocolServer::StartDownloadResponse>(-1); - auto download = protocol->start_download(*this, url, message.request_headers().entries()); + auto download = protocol->start_download(*this, message.method(), url, message.request_headers().entries(), message.request_body().to_byte_buffer()); if (!download) return make<Messages::ProtocolServer::StartDownloadResponse>(-1); auto id = download->id(); diff --git a/Services/ProtocolServer/GeminiProtocol.cpp b/Services/ProtocolServer/GeminiProtocol.cpp index 9bc61d54aa..f1167ecd61 100644 --- a/Services/ProtocolServer/GeminiProtocol.cpp +++ b/Services/ProtocolServer/GeminiProtocol.cpp @@ -40,7 +40,7 @@ GeminiProtocol::~GeminiProtocol() { } -OwnPtr<Download> GeminiProtocol::start_download(ClientConnection& client, const URL& url, const HashMap<String, String>&) +OwnPtr<Download> GeminiProtocol::start_download(ClientConnection& client, const String&, const URL& url, const HashMap<String, String>&, const ByteBuffer&) { Gemini::GeminiRequest request; request.set_url(url); diff --git a/Services/ProtocolServer/GeminiProtocol.h b/Services/ProtocolServer/GeminiProtocol.h index e3f28bf57d..f9ed21cca3 100644 --- a/Services/ProtocolServer/GeminiProtocol.h +++ b/Services/ProtocolServer/GeminiProtocol.h @@ -35,7 +35,7 @@ public: GeminiProtocol(); virtual ~GeminiProtocol() override; - virtual OwnPtr<Download> start_download(ClientConnection&, const URL&, const HashMap<String, String>&) override; + virtual OwnPtr<Download> start_download(ClientConnection&, const String& method, const URL&, const HashMap<String, String>&, const ByteBuffer& request_body) override; }; } diff --git a/Services/ProtocolServer/HttpProtocol.cpp b/Services/ProtocolServer/HttpProtocol.cpp index 7eaa51287c..f6b618d4b0 100644 --- a/Services/ProtocolServer/HttpProtocol.cpp +++ b/Services/ProtocolServer/HttpProtocol.cpp @@ -40,12 +40,16 @@ HttpProtocol::~HttpProtocol() { } -OwnPtr<Download> HttpProtocol::start_download(ClientConnection& client, const URL& url, const HashMap<String, String>& headers) +OwnPtr<Download> HttpProtocol::start_download(ClientConnection& client, const String& method, const URL& url, const HashMap<String, String>& headers, const ByteBuffer& request_body) { HTTP::HttpRequest request; - request.set_method(HTTP::HttpRequest::Method::GET); + if (method.equals_ignoring_case("post")) + request.set_method(HTTP::HttpRequest::Method::POST); + else + request.set_method(HTTP::HttpRequest::Method::GET); request.set_url(url); request.set_headers(headers); + request.set_body(request_body); auto job = request.schedule(); if (!job) return nullptr; diff --git a/Services/ProtocolServer/HttpProtocol.h b/Services/ProtocolServer/HttpProtocol.h index ee0c0f5f3b..aa9601b8ce 100644 --- a/Services/ProtocolServer/HttpProtocol.h +++ b/Services/ProtocolServer/HttpProtocol.h @@ -35,7 +35,7 @@ public: HttpProtocol(); virtual ~HttpProtocol() override; - virtual OwnPtr<Download> start_download(ClientConnection&, const URL&, const HashMap<String, String>& headers) override; + virtual OwnPtr<Download> start_download(ClientConnection&, const String& method, const URL&, const HashMap<String, String>& headers, const ByteBuffer& request_body) override; }; } diff --git a/Services/ProtocolServer/HttpsProtocol.cpp b/Services/ProtocolServer/HttpsProtocol.cpp index ab1181cb69..3de9ca8e2b 100644 --- a/Services/ProtocolServer/HttpsProtocol.cpp +++ b/Services/ProtocolServer/HttpsProtocol.cpp @@ -40,12 +40,16 @@ HttpsProtocol::~HttpsProtocol() { } -OwnPtr<Download> HttpsProtocol::start_download(ClientConnection& client, const URL& url, const HashMap<String, String>& headers) +OwnPtr<Download> HttpsProtocol::start_download(ClientConnection& client, const String& method, const URL& url, const HashMap<String, String>& headers, const ByteBuffer& request_body) { HTTP::HttpRequest request; - request.set_method(HTTP::HttpRequest::Method::GET); + if (method.equals_ignoring_case("post")) + request.set_method(HTTP::HttpRequest::Method::POST); + else + request.set_method(HTTP::HttpRequest::Method::GET); request.set_url(url); request.set_headers(headers); + request.set_body(request_body); auto job = HTTP::HttpsJob::construct(request); auto download = HttpsDownload::create_with_job({}, client, (HTTP::HttpsJob&)*job); job->start(); diff --git a/Services/ProtocolServer/HttpsProtocol.h b/Services/ProtocolServer/HttpsProtocol.h index 92f72e8729..9cb0ce190b 100644 --- a/Services/ProtocolServer/HttpsProtocol.h +++ b/Services/ProtocolServer/HttpsProtocol.h @@ -35,7 +35,7 @@ public: HttpsProtocol(); virtual ~HttpsProtocol() override; - virtual OwnPtr<Download> start_download(ClientConnection&, const URL&, const HashMap<String, String>& headers) override; + virtual OwnPtr<Download> start_download(ClientConnection&, const String& method, const URL&, const HashMap<String, String>& headers, const ByteBuffer& request_body) override; }; } diff --git a/Services/ProtocolServer/Protocol.h b/Services/ProtocolServer/Protocol.h index 13cff2e7bb..035b56cb6e 100644 --- a/Services/ProtocolServer/Protocol.h +++ b/Services/ProtocolServer/Protocol.h @@ -37,7 +37,7 @@ public: virtual ~Protocol(); const String& name() const { return m_name; } - virtual OwnPtr<Download> start_download(ClientConnection&, const URL&, const HashMap<String, String>& headers) = 0; + virtual OwnPtr<Download> start_download(ClientConnection&, const String& method, const URL&, const HashMap<String, String>& headers, const ByteBuffer& request_body) = 0; static Protocol* find_by_name(const String&); diff --git a/Services/ProtocolServer/ProtocolServer.ipc b/Services/ProtocolServer/ProtocolServer.ipc index e819eb3234..4cf1204520 100644 --- a/Services/ProtocolServer/ProtocolServer.ipc +++ b/Services/ProtocolServer/ProtocolServer.ipc @@ -10,7 +10,7 @@ endpoint ProtocolServer = 9 IsSupportedProtocol(String protocol) => (bool supported) // Download API - StartDownload(URL url, IPC::Dictionary request_headers) => (i32 download_id) + StartDownload(String method, URL url, IPC::Dictionary request_headers, String request_body) => (i32 download_id) StopDownload(i32 download_id) => (bool success) SetCertificate(i32 download_id, String certificate, String key) => (bool success) } |