From 54a8d7b3409f6a5857b6fc9a964a36b66c28ae25 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 30 Oct 2026 15:36:47 +0100 Subject: refactor transports to start themselves --- src/transport/mod.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/transport/mod.rs') diff --git a/src/transport/mod.rs b/src/transport/mod.rs index b10c799..9d43e5a 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -28,6 +28,40 @@ pub(crate) mod tor; pub(crate) mod traffic; pub(crate) mod wire; +/// Starts the transport `name` (one of `config::TRANSPORTS`) as `settings` configure +/// it: its scheme and the transport, or None if `stop` came first (some take a while to +/// start: a supervised Mycelium daemon, arti). `key`: the node key, which some prove +/// themselves. +pub(crate) async fn start( + name: &str, + settings: &crate::config::Settings, + key: &std::sync::Arc, + stop: tokio::sync::watch::Receiver, +) -> Result)>> { + use std::sync::Arc; + let _ = key; + let started: Option<(&'static str, Arc)> = match name { + "mycelium" => mycelium::start(settings, stop) + .await? + .map(|transport| (mycelium::SCHEME, Arc::new(transport) as Arc)), + #[cfg(feature = "libp2p")] + "libp2p" => { + let _ = stop; + let config = libp2p::Libp2pConfig::from_settings(settings, false)?; + Some(( + libp2p::SCHEME, + Arc::new(libp2p::Libp2pTransport::start(config)?) as Arc, + )) + } + #[cfg(feature = "tor")] + "tor" => tor::TorTransport::from_settings(settings, key, stop) + .await? + .map(|transport| (tor::SCHEME, Arc::new(transport) as Arc)), + other => anyhow::bail!("transports: no {other} in this build"), + }; + Ok(started) +} + /// Random identifier of one run of a node (from start to exit). pub(crate) type RunId = [u8; 16]; -- cgit v1.3.1