Files
aria2-rust-pro/crates/aria2-rust-pro-rpc/src/server/tests.rs
T

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
}