49 lines
1.5 KiB
Rust
49 lines
1.5 KiB
Rust
use std::{
|
|
collections::BTreeMap,
|
|
io::Write,
|
|
net::{Shutdown, TcpListener, TcpStream},
|
|
sync::{Arc, Mutex},
|
|
thread,
|
|
time::Duration,
|
|
};
|
|
|
|
use super::{
|
|
http_surface::{
|
|
HttpRequest, dispatch_json_request, dispatch_xml_request, handle_rpc_http_request,
|
|
},
|
|
websocket_session::flush_websocket_session_queue_shared,
|
|
websocket_surface::{
|
|
flush_websocket_session_queue, handle_websocket_rpc_frame,
|
|
process_websocket_session_frames, read_websocket_frame, serve_upgraded_websocket_session,
|
|
websocket_frame_from_bytes, websocket_frame_to_bytes,
|
|
},
|
|
*,
|
|
};
|
|
use crate::{
|
|
InProcessRpcDispatcher, JsonRpcRequest, RpcMeta, RpcMethod, RpcNotificationEvent,
|
|
RpcNotificationKind, RpcValue, RpcWebSocketFrame, WebSocketSessionRegistry, XmlRpcMethodCall,
|
|
XmlRpcParam, XmlRpcValue, jsonrpc::JsonRpcId,
|
|
};
|
|
|
|
mod http_surface;
|
|
mod websocket_dispatch;
|
|
mod websocket_handshake;
|
|
mod websocket_session;
|
|
|
|
#[doc(hidden)]
|
|
fn masked_text_frame_bytes(text: &str) -> Vec<u8> {
|
|
let payload = text.as_bytes();
|
|
let mask = [0x11, 0x22, 0x33, 0x44];
|
|
let masked_payload = payload
|
|
.iter()
|
|
.enumerate()
|
|
.map(|(index, byte)| byte ^ mask[index % mask.len()])
|
|
.collect::<Vec<_>>();
|
|
let payload_len =
|
|
u8::try_from(payload.len()).expect("test websocket payload should fit in a short frame");
|
|
let mut frame = vec![0x81, 0x80 | payload_len];
|
|
frame.extend_from_slice(&mask);
|
|
frame.extend_from_slice(&masked_payload);
|
|
frame
|
|
}
|