arti-client: Create an HsClientConnector

This commit is contained in:
Ian Jackson 2023-03-21 17:28:28 +00:00
parent a2aa701eb6
commit 3d33ad7fdf
4 changed files with 25 additions and 1 deletions

1
Cargo.lock generated
View File

@ -185,6 +185,7 @@ dependencies = [
"tor-dirmgr", "tor-dirmgr",
"tor-error", "tor-error",
"tor-guardmgr", "tor-guardmgr",
"tor-hsclient",
"tor-hscrypto", "tor-hscrypto",
"tor-llcrypto", "tor-llcrypto",
"tor-netdir", "tor-netdir",

View File

@ -67,7 +67,7 @@ experimental = [
experimental-api = [] experimental-api = []
dirfilter = ["tor-dirmgr/dirfilter"] dirfilter = ["tor-dirmgr/dirfilter"]
error_detail = [] error_detail = []
onion-client = ["tor-hscrypto"] onion-client = ["tor-hsclient", "tor-hscrypto"]
[dependencies] [dependencies]
cfg-if = "1.0.0" cfg-if = "1.0.0"
@ -96,6 +96,7 @@ tor-dirmgr = { path = "../tor-dirmgr", version = "0.9.2", default-features = fal
] } ] }
tor-error = { path = "../tor-error", version = "0.4.1" } tor-error = { path = "../tor-error", version = "0.4.1" }
tor-guardmgr = { path = "../tor-guardmgr", version = "0.8.2" } tor-guardmgr = { path = "../tor-guardmgr", version = "0.8.2" }
tor-hsclient = { path = "../tor-hsclient", version = "0.1.1", optional = true }
tor-hscrypto = { path = "../tor-hscrypto", version = "0.1.1", optional = true } tor-hscrypto = { path = "../tor-hscrypto", version = "0.1.1", optional = true }
tor-llcrypto = { path = "../tor-llcrypto", version = "0.4.2" } tor-llcrypto = { path = "../tor-llcrypto", version = "0.4.2" }
tor-netdir = { path = "../tor-netdir", version = "0.8.0" } tor-netdir = { path = "../tor-netdir", version = "0.8.0" }

View File

@ -17,6 +17,8 @@ use tor_dirmgr::bridgedesc::BridgeDescMgr;
use tor_dirmgr::{DirMgrStore, Timeliness}; use tor_dirmgr::{DirMgrStore, Timeliness};
use tor_error::{internal, Bug, ErrorReport}; use tor_error::{internal, Bug, ErrorReport};
use tor_guardmgr::GuardMgr; use tor_guardmgr::GuardMgr;
#[cfg(feature = "onion-client")]
use tor_hsclient::HsClientConnector;
use tor_netdir::{params::NetParameters, NetDirProvider}; use tor_netdir::{params::NetParameters, NetDirProvider};
use tor_persist::{FsStateMgr, StateMgr}; use tor_persist::{FsStateMgr, StateMgr};
use tor_proto::circuit::ClientCirc; use tor_proto::circuit::ClientCirc;
@ -92,6 +94,10 @@ pub struct TorClient<R: Runtime> {
/// Pluggable transport manager. /// Pluggable transport manager.
#[cfg(feature = "pt-client")] #[cfg(feature = "pt-client")]
pt_mgr: Arc<tor_ptmgr::PtMgr<R>>, pt_mgr: Arc<tor_ptmgr::PtMgr<R>>,
/// HS client connector
#[allow(dead_code)] // TODO HS remove
#[cfg(feature = "onion-client")]
hsclient: HsClientConnector<R>,
/// Guard manager /// Guard manager
#[cfg_attr(not(feature = "bridge-client"), allow(dead_code))] #[cfg_attr(not(feature = "bridge-client"), allow(dead_code))]
guardmgr: GuardMgr<R>, guardmgr: GuardMgr<R>,
@ -521,6 +527,13 @@ impl<R: Runtime> TorClient<R> {
#[cfg(feature = "bridge-client")] #[cfg(feature = "bridge-client")]
let bridge_desc_mgr = Arc::new(Mutex::new(None)); let bridge_desc_mgr = Arc::new(Mutex::new(None));
#[cfg(feature = "onion-client")]
let hsclient = HsClientConnector::new(
runtime.clone(),
circmgr.clone(),
dirmgr.clone().upcast_arc(),
)?;
runtime runtime
.spawn(tasks_monitor_dormant( .spawn(tasks_monitor_dormant(
dormant_recv, dormant_recv,
@ -558,6 +571,8 @@ impl<R: Runtime> TorClient<R> {
bridge_desc_mgr, bridge_desc_mgr,
#[cfg(feature = "pt-client")] #[cfg(feature = "pt-client")]
pt_mgr, pt_mgr,
#[cfg(feature = "onion-client")]
hsclient,
guardmgr, guardmgr,
statemgr, statemgr,
addrcfg: Arc::new(addr_cfg.into()), addrcfg: Arc::new(addr_cfg.into()),

View File

@ -139,6 +139,11 @@ enum ErrorDetail {
#[error("Error setting up the persistent state manager")] #[error("Error setting up the persistent state manager")]
StateMgrSetup(#[source] tor_persist::Error), StateMgrSetup(#[source] tor_persist::Error),
/// Error setting up the hidden service client connector.
#[error("Error setting up the hidden service client connector")]
#[cfg(feature = "onion-client")]
HsClientConnectorSetup(#[from] tor_hsclient::StartupError),
/// Failed to obtain exit circuit /// Failed to obtain exit circuit
#[error("Failed to obtain exit circuit for ports {exit_ports}")] #[error("Failed to obtain exit circuit for ports {exit_ports}")]
ObtainExitCircuit { ObtainExitCircuit {
@ -316,6 +321,8 @@ impl tor_error::HasKind for ErrorDetail {
E::CircMgrSetup(e) => e.kind(), E::CircMgrSetup(e) => e.kind(),
E::DirMgrSetup(e) => e.kind(), E::DirMgrSetup(e) => e.kind(),
E::StateMgrSetup(e) => e.kind(), E::StateMgrSetup(e) => e.kind(),
#[cfg(feature = "onion-client")]
E::HsClientConnectorSetup(e) => e.kind(),
E::DirMgrBootstrap(e) => e.kind(), E::DirMgrBootstrap(e) => e.kind(),
#[cfg(feature = "pt-client")] #[cfg(feature = "pt-client")]
E::PluggableTransport(e) => e.kind(), E::PluggableTransport(e) => e.kind(),