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.
1112mod cmdcheck;
13#[cfg(feature = "stream-ctrl")]
14mod ctrl;
15mod data;
16mod flow_control;
17#[cfg(feature = "hs-service")]
18mod incoming;
19mod params;
20mod raw;
21mod resolve;
2223pub(crate) use cmdcheck::{AnyCmdChecker, CmdChecker, StreamStatus};
24pub use data::{DataReader, DataStream, DataWriter};
25#[cfg(feature = "hs-service")]
26#[cfg_attr(docsrs, doc(cfg(feature = "hs-service")))]
27pub(crate) use incoming::IncomingCmdChecker;
28#[cfg(feature = "hs-service")]
29#[cfg_attr(docsrs, doc(cfg(feature = "hs-service")))]
30pub use incoming::{
31 IncomingStream, IncomingStreamRequest, IncomingStreamRequestContext,
32 IncomingStreamRequestDisposition, IncomingStreamRequestFilter,
33};
34pub use params::StreamParameters;
35pub use raw::StreamReader;
36pub use resolve::ResolveStream;
37pub(crate) use {data::DataCmdChecker, resolve::ResolveCmdChecker};
3839pub use tor_cell::relaycell::msg::IpVersionPreference;
4041#[cfg(feature = "stream-ctrl")]
42#[cfg_attr(docsrs, doc(cfg(feature = "stream-ctrl")))]
43pub use {ctrl::ClientStreamCtrl, data::ClientDataStreamCtrl};
4445pub(crate) use flow_control::StreamSendFlowControl;