//! alksocks — SOCKS5 (RFC 1928) as a produced resource on alkcall //! channels. //! //! A producer/consumer protocol crate (the alktty/alktunnels shape): //! the producer half registers the `channels/socks5/sub` open op and //! drives the RFC 1928 conversation in-stream over the channel's //! `BiStream`; the consumer half opens SOCKS5 channels and speaks the //! protocol inside them. The defining posture: the protocol never //! binds a port — kernel binds exist only as explicit, feature-gated //! assembly shapes (`local`), never in the protocol layer. //! //! The RFC wire vocabulary and the explicit typestate live in //! [`rfc1928`]: a targeted fork of fast-socks5 v1.0.0's `T`-generic //! subset (MIT, third-party upstream) carrying two deliberate changes //! (BIND support, `new_reply` publication) — see //! `docs/architecture/rfc1928.md`, ADR-013, and ADR-011. //! //! Architecture: `docs/architecture/overview.md` (spec set: //! wire.md, producer.md, consumer.md, rfc1928.md). #![forbid(unsafe_code)] pub mod rfc1928; pub mod consumer; pub mod egress; pub mod error; pub mod params; pub mod producer; pub mod wire; pub use error::{ ReplyError, SocksError, SocksEstablishmentReason, SocksOpenError, SocksServerError, SocksSessionError, }; pub use params::{ establishment_reason, socks5_open_spec, Socks5Params, OP_SOCKS5_OPEN, SOCKS5_ALPN, SOCKS5_BIND_SCOPE, SOCKS5_OPEN_SCOPE, }; pub use wire::{addr_encoding_len, frame, DatagramReader, WireError, MAX_INNER_LEN};