mod activity_tracked_stream;
mod activity_tracker;
mod h2mux_client_handler;
mod h2mux_client_session;
mod h2mux_client_stream;
mod h2mux_padding;
pub mod h2mux_protocol;
mod h2mux_server_session;
mod h2mux_server_stream;
mod h2mux_stream;
pub use h2mux_client_handler::H2MuxClientHandler;
pub use h2mux_server_session::handle_h2mux_session;
#[allow(unused_imports)]
pub use h2mux_client_session::H2MuxClientSession;
#[allow(unused_imports)]
pub use h2mux_padding::H2MuxPaddingStream;
#[allow(unused_imports)]
pub use h2mux_server_session::{H2MuxServerSession, InboundStream};
#[allow(unused_imports)]
pub use h2mux_stream::H2MuxStream;
pub const MUX_DESTINATION_HOST: &str = "sp.mux.sing-box.arpa";
pub const MUX_DESTINATION_PORT: u16 = 444;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum MuxProtocol {
Smux = 0,
Yamux = 1,
H2Mux = 2,
}
impl MuxProtocol {
pub fn from_u8(v: u8) -> Option<Self> {
match v {
0 => Some(Self::Smux),
1 => Some(Self::Yamux),
2 => Some(Self::H2Mux),
_ => None,
}
}
#[allow(dead_code)]
pub fn from_str(s: &str) -> Option<Self> {
match s.to_lowercase().as_str() {
"" | "h2mux" => Some(Self::H2Mux),
"smux" => Some(Self::Smux),
"yamux" => Some(Self::Yamux),
_ => None,
}
}
}
#[derive(Debug, Clone)]
pub struct H2MuxOptions {
pub protocol: MuxProtocol,
#[allow(dead_code)]
pub max_streams: u32,
#[allow(dead_code)]
pub min_streams: u32,
#[allow(dead_code)]
pub max_connections: u32,
pub padding: bool,
}
impl Default for H2MuxOptions {
fn default() -> Self {
Self {
protocol: MuxProtocol::H2Mux,
max_streams: 0, min_streams: 4,
max_connections: 4,
padding: false,
}
}
}