//! WebSocket subsystem: the browser bidirectional path //! (ADR-067, `docs/architecture/decisions`). //! //! A WS session carries the **channels protocol**: the 8-byte chunk //! header multiplexes N logical channels over the WS binary message //! stream; channel 0 is pre-negotiated as `alk/call` and dispatched by //! the shared `Dispatcher`. The WS↔byte-stream adapter (`byte_adapter`) //! is the single seam between axum's WS and //! alkcall's byte-oriented channels machinery — shared with the //! `from_wss` consumer path ([ADR-070]). //! //! Feature sides: `upgrade` (and the axum flavor of the adapter) //! compile under `server`; the tungstenite flavor compiles under `wss` //! (and under `test-support`); both are available with both features. #[cfg(any(feature = "server", feature = "wss", test))] pub mod byte_adapter; #[cfg(feature = "server")] pub mod upgrade; #[cfg(any(feature = "server", feature = "wss", test))] pub use byte_adapter::{ WsByteStream, WsPumps, DEFAULT_WS_IDLE_TIMEOUT, DEFAULT_WS_WRITE_TIMEOUT, INBOUND_WS_FRAME_CAP, INBOUND_WS_MESSAGE_CAP, MAX_CHUNK_LEN, PENDING_BUFFER_CAP, WS_GOING_AWAY, WS_MESSAGE_CAP, WS_PROTOCOL_ERROR, }; #[cfg(feature = "server")] pub use byte_adapter::{ split_ws_to_bytes, split_ws_to_bytes_idle, split_ws_to_bytes_idle_with_write, }; #[cfg(feature = "server")] pub use alkcall::channels::operations::ChannelCore; #[cfg(any(test, feature = "wss"))] pub use byte_adapter::split_tungstenite_to_bytes; #[cfg(all(test, feature = "server", feature = "wss"))] pub(crate) use upgrade::adapter_install_channel_zero; #[cfg(feature = "server")] pub use upgrade::{ run_channels_session, ws_bearer_auth, ws_upgrade_handler, ChannelsPolicy, OpRegisterAcl, OpenableAlpn, OpenableAlpns, SessionSlots, SessionState, WsSessions, WsTimeouts, DEFAULT_WS_MAX_SESSIONS, }; #[cfg(all(any(test, feature = "test-support"), feature = "server"))] pub use upgrade::test_support::{frame_channel0_chunk, ChunkAssembler, FrameAssembler, WsClient};