/* * Copyright (c) 2020, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Gemini { class GeminiJob final : public Job { C_OBJECT(GeminiJob) public: explicit GeminiJob(const GeminiRequest& request, OutputStream& output_stream, const Vector* override_certificates = nullptr) : Job(request, output_stream) , m_override_ca_certificates(override_certificates) { } virtual ~GeminiJob() override { } virtual void start(NonnullRefPtr) override; virtual void shutdown() override; void set_certificate(String certificate, String key); Core::Socket const* socket() const { return m_socket; } URL url() const { return m_request.url(); } Function on_certificate_requested; protected: virtual void register_on_ready_to_read(Function) override; virtual void register_on_ready_to_write(Function) override; virtual bool can_read_line() const override; virtual String read_line(size_t) override; virtual bool can_read() const override; virtual ByteBuffer receive(size_t) override; virtual bool eof() const override; virtual bool write(ReadonlyBytes) override; virtual bool is_established() const override { return m_socket->is_established(); } virtual bool should_fail_on_empty_payload() const override { return false; } virtual void read_while_data_available(Function) override; private: RefPtr m_socket; const Vector* m_override_ca_certificates { nullptr }; }; }