arti-client: address: Plumb StreamPrefs into enforce_config
No functional change yet. We'll use this shortly.
This commit is contained in:
parent
bf93519cdd
commit
60cfb09e77
|
@ -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<StreamInstructions, ErrorDetail> {
|
||||
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<ResolveInstructions, ErrorDetail> {
|
||||
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<A: IntoTorAddr>(addr: A) -> Result<TorAddr, ErrorDetail> {
|
||||
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<StreamInstructions, ErrorDetail> {
|
||||
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<ResolveInstructions, ErrorDetail> {
|
||||
TorAddr::from(s).unwrap().into_resolve_instructions(&Default::default())
|
||||
TorAddr::from(s).unwrap().into_resolve_instructions(&Default::default(), &Default::default())
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
|
|
|
@ -934,7 +934,7 @@ impl<R: Runtime> TorClient<R> {
|
|||
) -> crate::Result<DataStream> {
|
||||
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<R: Runtime> TorClient<R> {
|
|||
// 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?;
|
||||
|
||||
|
|
Loading…
Reference in New Issue