mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-11-03 23:00:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2021, Dex♪ <dexes.ttp@gmail.com>
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: BSD-2-Clause
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <AK/Badge.h>
 | 
						|
#include <AK/ByteBuffer.h>
 | 
						|
#include <AK/ByteString.h>
 | 
						|
#include <AK/Function.h>
 | 
						|
#include <AK/RefCounted.h>
 | 
						|
#include <AK/WeakPtr.h>
 | 
						|
 | 
						|
namespace Requests {
 | 
						|
 | 
						|
class RequestClient;
 | 
						|
 | 
						|
class WebSocket : public RefCounted<WebSocket> {
 | 
						|
public:
 | 
						|
    struct CertificateAndKey {
 | 
						|
        ByteString certificate;
 | 
						|
        ByteString key;
 | 
						|
    };
 | 
						|
 | 
						|
    struct Message {
 | 
						|
        ByteBuffer data;
 | 
						|
        bool is_text { false };
 | 
						|
    };
 | 
						|
 | 
						|
    enum class Error {
 | 
						|
        CouldNotEstablishConnection,
 | 
						|
        ConnectionUpgradeFailed,
 | 
						|
        ServerClosedSocket,
 | 
						|
    };
 | 
						|
 | 
						|
    enum class ReadyState {
 | 
						|
        Connecting = 0,
 | 
						|
        Open = 1,
 | 
						|
        Closing = 2,
 | 
						|
        Closed = 3,
 | 
						|
    };
 | 
						|
 | 
						|
    static NonnullRefPtr<WebSocket> create_from_id(Badge<RequestClient>, RequestClient& client, i64 websocket_id)
 | 
						|
    {
 | 
						|
        return adopt_ref(*new WebSocket(client, websocket_id));
 | 
						|
    }
 | 
						|
 | 
						|
    i64 id() const { return m_websocket_id; }
 | 
						|
 | 
						|
    ReadyState ready_state();
 | 
						|
    void set_ready_state(ReadyState);
 | 
						|
 | 
						|
    ByteString subprotocol_in_use();
 | 
						|
    void set_subprotocol_in_use(ByteString);
 | 
						|
 | 
						|
    void send(ByteBuffer binary_or_text_message, bool is_text);
 | 
						|
    void send(StringView text_message);
 | 
						|
    void close(u16 code = 1005, ByteString reason = {});
 | 
						|
 | 
						|
    Function<void()> on_open;
 | 
						|
    Function<void(Message)> on_message;
 | 
						|
    Function<void(Error)> on_error;
 | 
						|
    Function<void(u16 code, ByteString reason, bool was_clean)> on_close;
 | 
						|
    Function<CertificateAndKey()> on_certificate_requested;
 | 
						|
 | 
						|
    void did_open(Badge<RequestClient>);
 | 
						|
    void did_receive(Badge<RequestClient>, ByteBuffer, bool);
 | 
						|
    void did_error(Badge<RequestClient>, i32);
 | 
						|
    void did_close(Badge<RequestClient>, u16, ByteString, bool);
 | 
						|
    void did_request_certificates(Badge<RequestClient>);
 | 
						|
 | 
						|
private:
 | 
						|
    explicit WebSocket(RequestClient&, i64 websocket_id);
 | 
						|
    WeakPtr<RequestClient> m_client;
 | 
						|
    ReadyState m_ready_state { ReadyState::Connecting };
 | 
						|
    ByteString m_subprotocol;
 | 
						|
    i64 m_websocket_id { -1 };
 | 
						|
};
 | 
						|
 | 
						|
}
 |