mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:32:44 +00:00 
			
		
		
		
	 5e1499d104
			
		
	
	
		5e1499d104
		
	
	
	
	
		
			
			This commit un-deprecates DeprecatedString, and repurposes it as a byte
string.
As the null state has already been removed, there are no other
particularly hairy blockers in repurposing this type as a byte string
(what it _really_ is).
This commit is auto-generated:
  $ xs=$(ack -l \bDeprecatedString\b\|deprecated_string AK Userland \
    Meta Ports Ladybird Tests Kernel)
  $ perl -pie 's/\bDeprecatedString\b/ByteString/g;
    s/deprecated_string/byte_string/g' $xs
  $ clang-format --style=file -i \
    $(git diff --name-only | grep \.cpp\|\.h)
  $ gn format $(git ls-files '*.gn' '*.gni')
		
	
			
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			80 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>
 | |
| #include <LibCore/Notifier.h>
 | |
| #include <LibIPC/Forward.h>
 | |
| 
 | |
| namespace Protocol {
 | |
| 
 | |
| class WebSocketClient;
 | |
| 
 | |
| 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<WebSocketClient>, WebSocketClient& client, i32 connection_id)
 | |
|     {
 | |
|         return adopt_ref(*new WebSocket(client, connection_id));
 | |
|     }
 | |
| 
 | |
|     int id() const { return m_connection_id; }
 | |
| 
 | |
|     ReadyState ready_state();
 | |
| 
 | |
|     ByteString subprotocol_in_use();
 | |
| 
 | |
|     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<WebSocketClient>);
 | |
|     void did_receive(Badge<WebSocketClient>, ByteBuffer, bool);
 | |
|     void did_error(Badge<WebSocketClient>, i32);
 | |
|     void did_close(Badge<WebSocketClient>, u16, ByteString, bool);
 | |
|     void did_request_certificates(Badge<WebSocketClient>);
 | |
| 
 | |
| private:
 | |
|     explicit WebSocket(WebSocketClient&, i32 connection_id);
 | |
|     WeakPtr<WebSocketClient> m_client;
 | |
|     int m_connection_id { -1 };
 | |
| };
 | |
| 
 | |
| }
 |