Serenity Operating System
1/*
2 * Copyright (c) 2020, the SerenityOS developers.
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include "ConnectionCache.h"
8#include <LibGemini/GeminiRequest.h>
9#include <LibGemini/Job.h>
10#include <RequestServer/GeminiProtocol.h>
11#include <RequestServer/GeminiRequest.h>
12
13namespace RequestServer {
14
15GeminiProtocol::GeminiProtocol()
16 : Protocol("gemini")
17{
18}
19
20OwnPtr<Request> GeminiProtocol::start_request(ConnectionFromClient& client, DeprecatedString const&, const URL& url, HashMap<DeprecatedString, DeprecatedString> const&, ReadonlyBytes, Core::ProxyData proxy_data)
21{
22 Gemini::GeminiRequest request;
23 request.set_url(url);
24
25 auto pipe_result = get_pipe_for_request();
26 if (pipe_result.is_error())
27 return {};
28
29 auto output_stream = MUST(Core::File::adopt_fd(pipe_result.value().write_fd, Core::File::OpenMode::Write));
30 auto job = Gemini::Job::construct(request, *output_stream);
31 auto protocol_request = GeminiRequest::create_with_job({}, client, *job, move(output_stream));
32 protocol_request->set_request_fd(pipe_result.value().read_fd);
33
34 ConnectionCache::get_or_create_connection(ConnectionCache::g_tls_connection_cache, url, *job, proxy_data);
35
36 return protocol_request;
37}
38
39}