Serenity Operating System
at master 39 lines 1.2 kB view raw
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}