aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/mod.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-30 15:36:47 +0100
committertv <tv@krebsco.de>2026-10-30 15:36:47 +0100
commit54a8d7b3409f6a5857b6fc9a964a36b66c28ae25 (patch)
treed9e8faca35c98b21b13030e845bbeaec3cd43298 /src/transport/mod.rs
parentbff42bf27f58bacb8bce58458dea7da74cda2c05 (diff)
refactor transports to start themselves
Diffstat (limited to 'src/transport/mod.rs')
-rw-r--r--src/transport/mod.rs34
1 files changed, 34 insertions, 0 deletions
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<crate::identity::NodeKey>,
+ stop: tokio::sync::watch::Receiver<bool>,
+) -> Result<Option<(&'static str, std::sync::Arc<dyn Transport>)>> {
+ use std::sync::Arc;
+ let _ = key;
+ let started: Option<(&'static str, Arc<dyn Transport>)> = match name {
+ "mycelium" => mycelium::start(settings, stop)
+ .await?
+ .map(|transport| (mycelium::SCHEME, Arc::new(transport) as Arc<dyn Transport>)),
+ #[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<dyn Transport>,
+ ))
+ }
+ #[cfg(feature = "tor")]
+ "tor" => tor::TorTransport::from_settings(settings, key, stop)
+ .await?
+ .map(|transport| (tor::SCHEME, Arc::new(transport) as Arc<dyn Transport>)),
+ 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];