tor_proto/
stream.rs

1//! Implements Tor's "stream"s from a client perspective
2//!
3//! A stream is an anonymized conversation; multiple streams can be
4//! multiplexed over a single circuit.
5//!
6//! To create a stream, use [crate::tunnel::circuit::ClientCirc::begin_stream].
7//!
8//! # Limitations
9//!
10//! There is no fairness, rate-limiting, or flow control.
11
12mod cmdcheck;
13#[cfg(feature = "stream-ctrl")]
14mod ctrl;
15mod data;
16mod flow_control;
17#[cfg(feature = "hs-service")]
18mod incoming;
19mod params;
20pub(crate) mod queue;
21mod raw;
22mod resolve;
23pub(crate) mod xon_xoff;
24
25pub(crate) use cmdcheck::{AnyCmdChecker, CmdChecker, StreamStatus};
26pub use data::{DataReader, DataStream, DataWriter};
27#[cfg(feature = "hs-service")]
28#[cfg_attr(docsrs, doc(cfg(feature = "hs-service")))]
29pub(crate) use incoming::IncomingCmdChecker;
30#[cfg(feature = "hs-service")]
31#[cfg_attr(docsrs, doc(cfg(feature = "hs-service")))]
32pub use incoming::{
33    IncomingStream, IncomingStreamRequest, IncomingStreamRequestContext,
34    IncomingStreamRequestDisposition, IncomingStreamRequestFilter,
35};
36pub use params::StreamParameters;
37pub use raw::StreamReceiver;
38pub use resolve::ResolveStream;
39pub(crate) use {data::DataCmdChecker, resolve::ResolveCmdChecker};
40
41pub use tor_cell::relaycell::msg::IpVersionPreference;
42
43#[cfg(feature = "stream-ctrl")]
44#[cfg_attr(docsrs, doc(cfg(feature = "stream-ctrl")))]
45pub use {ctrl::ClientStreamCtrl, data::ClientDataStreamCtrl};
46
47pub(crate) use flow_control::{DrainRateRequest, StreamFlowControl, StreamRateLimit};