aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/libp2p.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/libp2p.rs
parentbff42bf27f58bacb8bce58458dea7da74cda2c05 (diff)
refactor transports to start themselves
Diffstat (limited to 'src/transport/libp2p.rs')
-rw-r--r--src/transport/libp2p.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/transport/libp2p.rs b/src/transport/libp2p.rs
index 610b94e..2d67d2c 100644
--- a/src/transport/libp2p.rs
+++ b/src/transport/libp2p.rs
@@ -205,6 +205,41 @@ pub(crate) struct Libp2pConfig {
}
impl Libp2pConfig {
+ /// The configuration `settings` give; `relay_only`: a relay that is no node
+ /// (`--relay-only`).
+ pub(crate) fn from_settings(
+ settings: &crate::config::Settings,
+ relay_only: bool,
+ ) -> Result<Self> {
+ let parse = |option: &str, addresses: &[String]| {
+ addresses
+ .iter()
+ .map(|address| {
+ address
+ .parse::<Multiaddr>()
+ .with_context(|| format!("{option} {address:?}"))
+ })
+ .collect::<Result<Vec<_>>>()
+ };
+ Ok(Self {
+ key: Self::load_key(settings.libp2p_key_file.as_deref())?,
+ listen: parse("libp2p-listen", &settings.libp2p_listen)?,
+ announce: parse("libp2p-announce", &settings.libp2p_announce)?,
+ relays: parse("libp2p-relays", &settings.libp2p_relays)?,
+ relay: settings.libp2p_relay || relay_only,
+ continuum: !relay_only,
+ mdns: settings.libp2p_mdns,
+ upnp: settings.libp2p_upnp,
+ ignore: settings
+ .libp2p_ignore
+ .iter()
+ .map(|range| range.parse().context("libp2p-ignore"))
+ .collect::<Result<Vec<_>>>()?,
+ public: settings.libp2p_public,
+ memory: false,
+ })
+ }
+
/// The key in `path` (32 raw bytes, an Ed25519 secret key), or a new one each start
/// without a file: the peer ID only says where a node is, so a new one costs nothing
/// but the WHO that finds it again (`transport::identity`).