Move TorClientBuilder into tor_client::config, for consistency.
This commit is contained in:
parent
d245147c7f
commit
ed6ca1bc18
|
@ -5,19 +5,17 @@
|
|||
//! connections ("streams") over the Tor network using
|
||||
//! `TorClient::connect()`.
|
||||
use crate::address::IntoTorAddr;
|
||||
use crate::config::ClientAddrConfig;
|
||||
use tor_circmgr::{CircMgrConfig, IsolationToken, TargetPort};
|
||||
use tor_dirmgr::{DirEvent, DirMgrConfig};
|
||||
use crate::config::{ClientAddrConfig, TorClientConfig};
|
||||
use tor_circmgr::{IsolationToken, TargetPort};
|
||||
use tor_dirmgr::DirEvent;
|
||||
use tor_proto::circuit::{ClientCirc, IpVersionPreference};
|
||||
use tor_proto::stream::DataStream;
|
||||
use tor_rtcompat::{Runtime, SleepProviderExt};
|
||||
|
||||
use derive_builder::Builder;
|
||||
use futures::stream::StreamExt;
|
||||
use futures::task::SpawnExt;
|
||||
use std::convert::TryInto;
|
||||
use std::net::IpAddr;
|
||||
use std::path::PathBuf;
|
||||
use std::str::FromStr;
|
||||
use std::sync::{Arc, Weak};
|
||||
use std::time::Duration;
|
||||
|
@ -136,61 +134,6 @@ impl Default for ConnectPrefs {
|
|||
}
|
||||
}
|
||||
|
||||
/// Configuration used to bootstrap a `TorClient`.
|
||||
#[derive(Clone, Debug, Builder)]
|
||||
pub struct TorClientConfig {
|
||||
/// A directory suitable for storing persistent Tor state in.
|
||||
state_cfg: PathBuf,
|
||||
/// Configuration for the network directory manager.
|
||||
dir_cfg: DirMgrConfig,
|
||||
/// Configuration for the network circuit manager.
|
||||
circ_cfg: CircMgrConfig,
|
||||
/// Other client configuration.
|
||||
addr_cfg: ClientAddrConfig,
|
||||
}
|
||||
|
||||
impl TorClientConfig {
|
||||
/// Returns a `TorClientConfig` using reasonably sane defaults.
|
||||
///
|
||||
/// This uses `tor_config`'s definitions for `APP_LOCAL_DATA` and `APP_CACHE` for the state and
|
||||
/// cache directories respectively.
|
||||
pub fn sane_defaults() -> Result<Self> {
|
||||
let state_dir = tor_config::CfgPath::new("${APP_LOCAL_DATA}".into())
|
||||
.path()
|
||||
.map_err(|e| Error::Configuration(format!("failed to find APP_LOCAL_DATA: {:?}", e)))?;
|
||||
let cache_dir = tor_config::CfgPath::new("${APP_CACHE}".into())
|
||||
.path()
|
||||
.map_err(|e| Error::Configuration(format!("failed to find APP_CACHE: {:?}", e)))?;
|
||||
|
||||
Self::with_directories(state_dir, cache_dir)
|
||||
}
|
||||
|
||||
/// Returns a `TorClientConfig` using the specified state and cache directories, with other
|
||||
/// configuration options set to defaults.
|
||||
pub fn with_directories<P, Q>(state_dir: P, cache_dir: Q) -> Result<Self>
|
||||
where
|
||||
P: Into<PathBuf>,
|
||||
Q: Into<PathBuf>,
|
||||
{
|
||||
Ok(Self {
|
||||
state_cfg: state_dir.into(),
|
||||
dir_cfg: DirMgrConfig::builder()
|
||||
.cache_path(cache_dir.into())
|
||||
.build()
|
||||
.map_err(|e| {
|
||||
Error::Configuration(format!("failed to build DirMgrConfig: {}", e))
|
||||
})?,
|
||||
circ_cfg: Default::default(),
|
||||
addr_cfg: Default::default(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Return a new builder to construct a `TorClientConfig`.
|
||||
pub fn builder() -> TorClientConfigBuilder {
|
||||
TorClientConfigBuilder::default()
|
||||
}
|
||||
}
|
||||
|
||||
impl<R: Runtime> TorClient<R> {
|
||||
/// Bootstrap a network connection configured by `dir_cfg` and `circ_cfg`.
|
||||
///
|
||||
|
|
|
@ -2,8 +2,10 @@
|
|||
//!
|
||||
//! Some of these are re-exported from lower-level crates.
|
||||
|
||||
use crate::{Error, Result};
|
||||
use derive_builder::Builder;
|
||||
use serde::Deserialize;
|
||||
use std::path::PathBuf;
|
||||
|
||||
/// Types for configuring how Tor circuits are built.
|
||||
pub mod circ {
|
||||
|
@ -46,3 +48,58 @@ impl Default for ClientAddrConfig {
|
|||
ClientAddrConfigBuilder::default().build().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
/// Configuration used to bootstrap a `TorClient`.
|
||||
#[derive(Clone, Debug, Builder)]
|
||||
pub struct TorClientConfig {
|
||||
/// A directory suitable for storing persistent Tor state in.
|
||||
pub(crate) state_cfg: PathBuf,
|
||||
/// Configuration for the network directory manager.
|
||||
pub(crate) dir_cfg: dir::DirMgrConfig,
|
||||
/// Configuration for the network circuit manager.
|
||||
pub(crate) circ_cfg: circ::CircMgrConfig,
|
||||
/// Other client configuration.
|
||||
pub(crate) addr_cfg: ClientAddrConfig,
|
||||
}
|
||||
|
||||
impl TorClientConfig {
|
||||
/// Returns a `TorClientConfig` using reasonably sane defaults.
|
||||
///
|
||||
/// This uses `tor_config`'s definitions for `APP_LOCAL_DATA` and `APP_CACHE` for the state and
|
||||
/// cache directories respectively.
|
||||
pub fn sane_defaults() -> Result<Self> {
|
||||
let state_dir = tor_config::CfgPath::new("${APP_LOCAL_DATA}".into())
|
||||
.path()
|
||||
.map_err(|e| Error::Configuration(format!("failed to find APP_LOCAL_DATA: {:?}", e)))?;
|
||||
let cache_dir = tor_config::CfgPath::new("${APP_CACHE}".into())
|
||||
.path()
|
||||
.map_err(|e| Error::Configuration(format!("failed to find APP_CACHE: {:?}", e)))?;
|
||||
|
||||
Self::with_directories(state_dir, cache_dir)
|
||||
}
|
||||
|
||||
/// Returns a `TorClientConfig` using the specified state and cache directories, with other
|
||||
/// configuration options set to defaults.
|
||||
pub fn with_directories<P, Q>(state_dir: P, cache_dir: Q) -> Result<Self>
|
||||
where
|
||||
P: Into<PathBuf>,
|
||||
Q: Into<PathBuf>,
|
||||
{
|
||||
Ok(Self {
|
||||
state_cfg: state_dir.into(),
|
||||
dir_cfg: dir::DirMgrConfig::builder()
|
||||
.cache_path(cache_dir.into())
|
||||
.build()
|
||||
.map_err(|e| {
|
||||
Error::Configuration(format!("failed to build DirMgrConfig: {}", e))
|
||||
})?,
|
||||
circ_cfg: Default::default(),
|
||||
addr_cfg: Default::default(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Return a new builder to construct a `TorClientConfig`.
|
||||
pub fn builder() -> TorClientConfigBuilder {
|
||||
TorClientConfigBuilder::default()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -101,7 +101,8 @@ mod client;
|
|||
pub mod config;
|
||||
|
||||
pub use address::{DangerouslyIntoTorAddr, IntoTorAddr, TorAddr, TorAddrError};
|
||||
pub use client::{ConnectPrefs, TorClient, TorClientConfig};
|
||||
pub use client::{ConnectPrefs, TorClient};
|
||||
pub use config::TorClientConfig;
|
||||
|
||||
pub use tor_circmgr::IsolationToken;
|
||||
/// An anonymized stream over the Tor network.
|
||||
|
|
Loading…
Reference in New Issue