diff --git a/crates/tor-circmgr/src/tunnel.rs b/crates/tor-circmgr/src/tunnel.rs index c11fd30c2176c2e69dcefff01e05659df4d907fb..2dd2fa00f0e130cd71af69c9bbbbc629475b4ba0 100644 --- a/crates/tor-circmgr/src/tunnel.rs +++ b/crates/tor-circmgr/src/tunnel.rs @@ -467,11 +467,9 @@ impl ServiceOnionServiceDataTunnel { allow_commands: &'a [tor_cell::relaycell::RelayCmd], hop: TargetHop, filter: FILT, - ) -> Result< - impl futures::Stream + use<'a, FILT>, - > + ) -> Result + use<'a, FILT>> where - FILT: tor_proto::client::stream::IncomingStreamRequestFilter, + FILT: tor_proto::stream::IncomingStreamRequestFilter, { self.tunnel_ref() .allow_stream_requests(allow_commands, hop, filter) diff --git a/crates/tor-hsrproxy/src/proxy.rs b/crates/tor-hsrproxy/src/proxy.rs index 031819d9f6f3d853ef0ce5ded2a273fcfed509cf..655a453913e4b211b79d8e8099f4597d1f25642c 100644 --- a/crates/tor-hsrproxy/src/proxy.rs +++ b/crates/tor-hsrproxy/src/proxy.rs @@ -16,7 +16,8 @@ use tor_cell::relaycell::msg as relaymsg; use tor_error::{ErrorKind, HasKind, debug_report}; use tor_hsservice::{HsNickname, RendRequest, StreamRequest}; use tor_log_ratelim::log_ratelim; -use tor_proto::client::stream::{DataStream, IncomingStreamRequest}; +use tor_proto::client::stream::DataStream; +use tor_proto::stream::IncomingStreamRequest; use tor_rtcompat::{Runtime, SpawnExt as _}; use crate::config::{ diff --git a/crates/tor-hsservice/src/rend_handshake.rs b/crates/tor-hsservice/src/rend_handshake.rs index c4e6f9141fe19da5f067de135ca6cec08249053b..d62a414f01c09730b50226c8775489311228df58 100644 --- a/crates/tor-hsservice/src/rend_handshake.rs +++ b/crates/tor-hsservice/src/rend_handshake.rs @@ -14,7 +14,7 @@ use tor_proto::{ self, hs_ntor::{self, HsNtorHkdfKeyGenerator}, }, - client::stream::{IncomingStream, IncomingStreamRequestFilter}, + stream::{IncomingStream, IncomingStreamRequestFilter}, }; /// An error produced while trying to process an introduction request we have @@ -215,15 +215,15 @@ pub(crate) struct RequestFilter { impl IncomingStreamRequestFilter for RequestFilter { fn disposition( &mut self, - _ctx: &tor_proto::client::stream::IncomingStreamRequestContext<'_>, + _ctx: &tor_proto::stream::IncomingStreamRequestContext<'_>, circ: &tor_proto::circuit::CircHopSyncView<'_>, - ) -> tor_proto::Result { + ) -> tor_proto::Result { if circ.n_open_streams() >= self.max_concurrent_streams { // TODO: We may want to have a way to send back an END message as // well and not tear down the circuit. - Ok(tor_proto::client::stream::IncomingStreamRequestDisposition::CloseCircuit) + Ok(tor_proto::stream::IncomingStreamRequestDisposition::CloseCircuit) } else { - Ok(tor_proto::client::stream::IncomingStreamRequestDisposition::Accept) + Ok(tor_proto::stream::IncomingStreamRequestDisposition::Accept) } } } diff --git a/crates/tor-hsservice/src/req.rs b/crates/tor-hsservice/src/req.rs index 1a1667b3388883bdfe6f728f2fad0c0bfd4cf74e..2bc3231415fe389c414367461fa220cf2b845d34 100644 --- a/crates/tor-hsservice/src/req.rs +++ b/crates/tor-hsservice/src/req.rs @@ -9,7 +9,7 @@ use tor_cell::relaycell::msg::{Connected, End, Introduce2}; use tor_circmgr::ServiceOnionServiceDataTunnel; use tor_hscrypto::Subcredential; use tor_keymgr::ArtiPath; -use tor_proto::client::stream::{IncomingStream, IncomingStreamRequest}; +use tor_proto::stream::{IncomingStream, IncomingStreamRequest}; /// Request to complete an introduction/rendezvous handshake. /// diff --git a/crates/tor-proto/semver.md b/crates/tor-proto/semver.md new file mode 100644 index 0000000000000000000000000000000000000000..bead3289c1922ac1e512fd0de42a75a7d8069dde --- /dev/null +++ b/crates/tor-proto/semver.md @@ -0,0 +1 @@ +BREAKING: Many stream-related types are now exported from `tor_proto::stream` rather than `tor_proto::client::stream` diff --git a/crates/tor-proto/src/circuit/reactor.rs b/crates/tor-proto/src/circuit/reactor.rs index fbcc6c6b69c37a9d73dbefd43af2404587a8d210..fde23cbcb6b9ff47ead39d970ae1828a7925bb93 100644 --- a/crates/tor-proto/src/circuit/reactor.rs +++ b/crates/tor-proto/src/circuit/reactor.rs @@ -601,7 +601,7 @@ pub(crate) mod test { use chanmsg::AnyChanMsg; #[cfg(feature = "hs-service")] - use crate::client::stream::IncomingStreamRequestFilter; + use crate::stream::IncomingStreamRequestFilter; pub(crate) fn rmsg_to_ccmsg( id: Option, @@ -629,10 +629,10 @@ pub(crate) mod test { impl IncomingStreamRequestFilter for AllowAllStreamsFilter { fn disposition( &mut self, - _ctx: &crate::client::stream::IncomingStreamRequestContext<'_>, + _ctx: &crate::stream::IncomingStreamRequestContext<'_>, _circ: &crate::circuit::CircHopSyncView<'_>, - ) -> crate::Result { - Ok(crate::client::stream::IncomingStreamRequestDisposition::Accept) + ) -> crate::Result { + Ok(crate::stream::IncomingStreamRequestDisposition::Accept) } } } diff --git a/crates/tor-proto/src/client.rs b/crates/tor-proto/src/client.rs index 725026d65c5ee23dc9e078a32455523a4a939d0d..16a3c2196c0baff5db08d505cfa5b112a428194d 100644 --- a/crates/tor-proto/src/client.rs +++ b/crates/tor-proto/src/client.rs @@ -25,7 +25,6 @@ pub use crate::client::circuit::padding::{ }; use crate::client::stream::{ DataStream, OutboundDataCmdChecker, ResolveCmdChecker, ResolveStream, StreamParameters, - StreamReceiver, }; use crate::congestion::sendme::StreamRecvWindow; use crate::crypto::cell::HopNum; @@ -33,7 +32,7 @@ use crate::memquota::{SpecificAccount as _, StreamAccount}; use crate::stream::STREAM_READER_BUFFER; use crate::stream::cmdcheck::AnyCmdChecker; use crate::stream::flow_ctrl::xon_xoff::reader::XonXoffReaderCtrl; -use crate::stream::{RECV_WINDOW_INIT, StreamComponents, StreamTarget, Tunnel}; +use crate::stream::{RECV_WINDOW_INIT, StreamComponents, StreamReceiver, StreamTarget, Tunnel}; use crate::{Error, ResolveError, Result}; use circuit::{ClientCirc, Path}; use reactor::{CtrlCmd, CtrlMsg, FlowCtrlMsg, MetaCellHandler}; @@ -47,10 +46,7 @@ use tor_memquota::derive_deftly_template_HasMemoryCost; use tor_memquota::mq_queue::{ChannelSpec as _, MpscSpec}; #[cfg(feature = "hs-service")] -use crate::stream::incoming::StreamReqInfo; - -#[cfg(feature = "hs-service")] -use crate::client::stream::{IncomingCmdChecker, IncomingStream}; +use crate::stream::{IncomingCmdChecker, IncomingStream, StreamReqInfo}; #[cfg(feature = "send-control-msg")] use msghandler::{MsgHandler, UserMsgHandler}; @@ -260,7 +256,7 @@ impl ClientTunnel { filter: FILT, ) -> Result + use<'a, FILT>> where - FILT: crate::client::stream::IncomingStreamRequestFilter + 'a, + FILT: crate::stream::IncomingStreamRequestFilter + 'a, { use futures::stream::StreamExt; diff --git a/crates/tor-proto/src/client/reactor/circuit.rs b/crates/tor-proto/src/client/reactor/circuit.rs index 95290a2bb3aa2f01c0549e78151c0c902a642515..0eed8f038250b0954c04a64c133b1e01f4b8b2e2 100644 --- a/crates/tor-proto/src/client/reactor/circuit.rs +++ b/crates/tor-proto/src/client/reactor/circuit.rs @@ -70,7 +70,7 @@ use extender::HandshakeAuxDataHandler; #[cfg(feature = "hs-service")] use { crate::circuit::CircHopSyncView, - crate::client::stream::{InboundDataCmdChecker, IncomingStreamRequest}, + crate::stream::{InboundDataCmdChecker, IncomingStreamRequest}, tor_cell::relaycell::msg::Begin, }; @@ -882,9 +882,9 @@ impl Circuit { let req = IncomingStreamRequest::Begin(begin); { - use crate::client::stream::IncomingStreamRequestDisposition::*; + use crate::stream::IncomingStreamRequestDisposition::*; - let ctx = crate::client::stream::IncomingStreamRequestContext { request: &req }; + let ctx = crate::stream::IncomingStreamRequestContext { request: &req }; // IMPORTANT: super::syncview::CircHopSyncView::n_open_streams() (called via disposition() below) // accesses the stream map mutexes! // diff --git a/crates/tor-proto/src/client/reactor/control.rs b/crates/tor-proto/src/client/reactor/control.rs index a3c732a1ff4e8aab79432e1bf18dd5983664d904..5f23a428dd8f6b0e78b8597d47ba0673ff14f513 100644 --- a/crates/tor-proto/src/client/reactor/control.rs +++ b/crates/tor-proto/src/client/reactor/control.rs @@ -32,7 +32,7 @@ use tracing::{debug, trace}; #[cfg(feature = "hs-service")] use { crate::client::reactor::IncomingStreamRequestHandler, - crate::client::stream::IncomingStreamRequestFilter, crate::stream::incoming::StreamReqSender, + crate::stream::IncomingStreamRequestFilter, crate::stream::incoming::StreamReqSender, }; #[cfg(test)] diff --git a/crates/tor-proto/src/client/stream.rs b/crates/tor-proto/src/client/stream.rs index 5045869c724143a162a3eb38a237c02969653169..5f2e5a21cc0344972586056bff8f56846b4854a5 100644 --- a/crates/tor-proto/src/client/stream.rs +++ b/crates/tor-proto/src/client/stream.rs @@ -15,25 +15,12 @@ mod data; mod params; mod resolve; -#[cfg(feature = "hs-service")] -#[cfg_attr(docsrs, doc(cfg(feature = "hs-service")))] -pub(crate) use crate::stream::incoming::IncomingCmdChecker; pub use data::{DataReader, DataStream, DataWriter}; -// TODO(relay): stop reexporting these from here -#[cfg(feature = "hs-service")] -pub use crate::stream::incoming::{ - IncomingStream, IncomingStreamRequest, IncomingStreamRequestContext, - IncomingStreamRequestDisposition, IncomingStreamRequestFilter, -}; -pub use crate::stream::raw::StreamReceiver; pub use params::StreamParameters; pub use resolve::ResolveStream; pub(crate) use {data::OutboundDataCmdChecker, resolve::ResolveCmdChecker}; -#[cfg(feature = "hs-service")] -pub(crate) use crate::stream::incoming::InboundDataCmdChecker; - pub use tor_cell::relaycell::msg::IpVersionPreference; #[cfg(feature = "stream-ctrl")] diff --git a/crates/tor-proto/src/client/stream/data.rs b/crates/tor-proto/src/client/stream/data.rs index acca16210bfbc0943871cbb4528869b1084472b1..aeead4001457e6a89a23e0d3dd6595315cbffdcc 100644 --- a/crates/tor-proto/src/client/stream/data.rs +++ b/crates/tor-proto/src/client/stream/data.rs @@ -33,8 +33,8 @@ use std::sync::{Mutex, Weak}; use educe::Educe; use crate::client::ClientTunnel; -use crate::client::stream::StreamReceiver; use crate::memquota::StreamAccount; +use crate::stream::StreamReceiver; use crate::stream::StreamTarget; use crate::stream::cmdcheck::{AnyCmdChecker, CmdChecker, StreamStatus}; use crate::stream::flow_ctrl::state::StreamRateLimit; diff --git a/crates/tor-proto/src/client/stream/resolve.rs b/crates/tor-proto/src/client/stream/resolve.rs index 10f36fa1ca318a23ed593d105b2383da0590758d..5dd66af96e607e750d30e163de2afa65e4ede292 100644 --- a/crates/tor-proto/src/client/stream/resolve.rs +++ b/crates/tor-proto/src/client/stream/resolve.rs @@ -1,7 +1,7 @@ //! Declare a type for streams that do hostname lookups -use crate::client::stream::StreamReceiver; use crate::memquota::StreamAccount; +use crate::stream::StreamReceiver; use crate::stream::cmdcheck::{AnyCmdChecker, CmdChecker, StreamStatus}; use crate::{Error, Result}; diff --git a/crates/tor-proto/src/lib.rs b/crates/tor-proto/src/lib.rs index 5fd2ae6cba680d2c34138004fae08f1ebe92ca28..692379d3cbc157fed332f447df8ead0063a28a25 100644 --- a/crates/tor-proto/src/lib.rs +++ b/crates/tor-proto/src/lib.rs @@ -66,7 +66,7 @@ mod congestion; mod crypto; pub mod memquota; pub mod peer; -mod stream; +pub mod stream; pub(crate) mod streammap; pub(crate) mod tunnel; mod util; diff --git a/crates/tor-proto/src/stream.rs b/crates/tor-proto/src/stream.rs index d47724ba1fa3e1e70581da2b1cb0b74cbd9438d7..1b9240a301426dfc9d5b9f9d5186d0c9fe097533 100644 --- a/crates/tor-proto/src/stream.rs +++ b/crates/tor-proto/src/stream.rs @@ -27,9 +27,20 @@ use flow_ctrl::state::StreamRateLimit; use crate::memquota::StreamAccount; use crate::stream::flow_ctrl::xon_xoff::reader::XonXoffReaderCtrl; -use crate::stream::raw::StreamReceiver; use crate::{ClientTunnel, Error, HopLocation, Result}; +#[cfg(any(feature = "hs-service", feature = "relay"))] +pub use incoming::{ + IncomingStream, IncomingStreamRequest, IncomingStreamRequestContext, + IncomingStreamRequestDisposition, IncomingStreamRequestFilter, +}; + +pub use raw::StreamReceiver; + +#[cfg_attr(docsrs, doc(cfg(any(feature = "hs-service", feature = "relay"))))] +#[cfg(any(feature = "hs-service", feature = "relay"))] +pub(crate) use incoming::{InboundDataCmdChecker, IncomingCmdChecker, StreamReqInfo}; + use std::pin::Pin; use std::sync::Arc; diff --git a/examples/axum/axum-hello-world/src/main.rs b/examples/axum/axum-hello-world/src/main.rs index 962d478932b4090ed91b44f93a60c3443ba05678..418ebf014fa8ac4bd4c650dd8e77e0f5bff8a297 100644 --- a/examples/axum/axum-hello-world/src/main.rs +++ b/examples/axum/axum-hello-world/src/main.rs @@ -13,7 +13,7 @@ use safelog::{DisplayRedacted as _, sensitive}; use tor_cell::relaycell::msg::Connected; use tor_hsservice::StreamRequest; use tor_hsservice::config::OnionServiceConfigBuilder; -use tor_proto::client::stream::IncomingStreamRequest; +use tor_proto::stream::IncomingStreamRequest; #[tokio::main] async fn main() { diff --git a/examples/hyper-examples/src/bin/hyper-http-hs-example.rs b/examples/hyper-examples/src/bin/hyper-http-hs-example.rs index 7368f88a6ad80338d92f11591f437639ed118749..b788b43e039013a8dbf2f9e8d3b1b01e1fdafb6d 100644 --- a/examples/hyper-examples/src/bin/hyper-http-hs-example.rs +++ b/examples/hyper-examples/src/bin/hyper-http-hs-example.rs @@ -15,7 +15,7 @@ use safelog::{DisplayRedacted, sensitive}; use tor_cell::relaycell::msg::Connected; use tor_hsservice::StreamRequest; use tor_hsservice::config::OnionServiceConfigBuilder; -use tor_proto::client::stream::IncomingStreamRequest; +use tor_proto::stream::IncomingStreamRequest; struct WebHandler { shutdown: CancellationToken,