Skip to main content

tor_proto/client/
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::client::ClientTunnel::begin_stream].
7//!
8//! # Limitations
9//!
10//! There is no fairness, rate-limiting, or flow control.
11
12#[cfg(feature = "stream-ctrl")]
13mod ctrl;
14mod data;
15mod params;
16mod resolve;
17
18#[cfg(feature = "hs-service")]
19#[cfg_attr(docsrs, doc(cfg(feature = "hs-service")))]
20pub(crate) use crate::stream::incoming::IncomingCmdChecker;
21pub use data::{DataReader, DataStream, DataWriter};
22
23// TODO(relay): stop reexporting these from here
24#[cfg(feature = "hs-service")]
25pub use crate::stream::incoming::{
26    IncomingStream, IncomingStreamRequest, IncomingStreamRequestContext,
27    IncomingStreamRequestDisposition, IncomingStreamRequestFilter,
28};
29pub use crate::stream::raw::StreamReceiver;
30pub use params::StreamParameters;
31pub use resolve::ResolveStream;
32pub(crate) use {data::OutboundDataCmdChecker, resolve::ResolveCmdChecker};
33
34#[cfg(feature = "hs-service")]
35pub(crate) use crate::stream::incoming::InboundDataCmdChecker;
36
37pub use tor_cell::relaycell::msg::IpVersionPreference;
38
39#[cfg(feature = "stream-ctrl")]
40pub use {ctrl::ClientStreamCtrl, data::ClientDataStreamCtrl};