/* * Copyright (c) 2020, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace HTTP { class HttpsJob final : public Job { C_OBJECT(HttpsJob) public: virtual ~HttpsJob() override { } virtual void start(NonnullRefPtr) override; virtual void shutdown(ShutdownMode) 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: explicit HttpsJob(HttpRequest&& request, OutputStream& output_stream, const Vector* override_certs = nullptr) : Job(move(request), output_stream) , m_override_ca_certificates(override_certs) { } RefPtr m_socket; const Vector* m_override_ca_certificates { nullptr }; }; }