From 60cfb09e77c7093b22e379f984e990cd861c2d75 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 16 Jun 2023 13:26:12 +0100 Subject: [PATCH] arti-client: address: Plumb StreamPrefs into enforce_config No functional change yet. We'll use this shortly. --- crates/arti-client/src/address.rs | 15 ++++++++++----- crates/arti-client/src/client.rs | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/crates/arti-client/src/address.rs b/crates/arti-client/src/address.rs index d2edd0927..a4817b02e 100644 --- a/crates/arti-client/src/address.rs +++ b/crates/arti-client/src/address.rs @@ -2,6 +2,7 @@ //! Tor can connect to. use crate::err::ErrorDetail; +use crate::StreamPrefs; use std::fmt::Display; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}; use std::str::FromStr; @@ -233,8 +234,9 @@ impl TorAddr { pub(crate) fn into_stream_instructions( self, cfg: &crate::config::ClientAddrConfig, + prefs: &StreamPrefs, ) -> Result { - self.enforce_config(cfg)?; + self.enforce_config(cfg, prefs)?; let port = self.port; Ok(match self.host { @@ -265,8 +267,9 @@ impl TorAddr { pub(crate) fn into_resolve_instructions( self, cfg: &crate::config::ClientAddrConfig, + prefs: &StreamPrefs, ) -> Result { - self.enforce_config(cfg)?; + self.enforce_config(cfg, prefs)?; Ok(match self.host { Host::Hostname(hostname) => ResolveInstructions::Exit(hostname), @@ -285,6 +288,8 @@ impl TorAddr { fn enforce_config( &self, cfg: &crate::config::ClientAddrConfig, + #[allow(unused_variables)] // will only be used in certain configurations + prefs: &StreamPrefs, ) -> Result<(), ErrorDetail> { if !cfg.allow_local_addrs && self.is_local() { return Err(ErrorDetail::LocalAddress); @@ -557,7 +562,7 @@ mod test { use crate::err::ErrorDetail; fn val(addr: A) -> Result { let toraddr = addr.into_tor_addr()?; - toraddr.enforce_config(&Default::default())?; + toraddr.enforce_config(&Default::default(), &Default::default())?; Ok(toraddr) } @@ -633,7 +638,7 @@ mod test { use StreamInstructions as SI; fn sap(s: &str) -> Result { - TorAddr::from(s).unwrap().into_stream_instructions(&Default::default()) + TorAddr::from(s).unwrap().into_stream_instructions(&Default::default(), &Default::default()) } assert_eq!( @@ -676,7 +681,7 @@ mod test { use ResolveInstructions as RI; fn sap(s: &str) -> Result { - TorAddr::from(s).unwrap().into_resolve_instructions(&Default::default()) + TorAddr::from(s).unwrap().into_resolve_instructions(&Default::default(), &Default::default()) } assert_eq!( diff --git a/crates/arti-client/src/client.rs b/crates/arti-client/src/client.rs index a63215261..1a26172a9 100644 --- a/crates/arti-client/src/client.rs +++ b/crates/arti-client/src/client.rs @@ -934,7 +934,7 @@ impl TorClient { ) -> crate::Result { let addr = target.into_tor_addr().map_err(wrap_err)?; - let (circ, addr, port) = match addr.into_stream_instructions(&self.addrcfg.get())? { + let (circ, addr, port) = match addr.into_stream_instructions(&self.addrcfg.get(), prefs)? { StreamInstructions::Exit { hostname: addr, port, @@ -1073,7 +1073,7 @@ impl TorClient { // should be a method on `Host`, not `TorAddr`. -Diziet. let addr = (hostname, 1).into_tor_addr().map_err(wrap_err)?; - match addr.into_resolve_instructions(&self.addrcfg.get())? { + match addr.into_resolve_instructions(&self.addrcfg.get(), prefs)? { ResolveInstructions::Exit(hostname) => { let circ = self.get_or_launch_exit_circ(&[], prefs).await?;