/* * Copyright (c) 2025, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace RequestServer { class WebSocketImplCurl final : public WebSocket::WebSocketImpl { public: virtual ~WebSocketImplCurl() override; static NonnullRefPtr create(CURLM*); virtual void connect(WebSocket::ConnectionInfo const&) override; virtual bool can_read_line() override; virtual ErrorOr read_line(size_t) override; virtual ErrorOr read(int max_size) override; virtual bool send(ReadonlyBytes) override; virtual bool eof() override; virtual void discard_connection() override; virtual bool handshake_complete_when_connected() const override { return true; } bool did_connect(); private: explicit WebSocketImplCurl(CURLM*); CURLM* m_multi_handle { nullptr }; CURL* m_easy_handle { nullptr }; RefPtr m_read_notifier; RefPtr m_error_notifier; Vector m_curl_string_lists; AllocatingMemoryStream m_read_buffer; }; }