From 7af8f58d46737bb5835aa1625485f22ecf374ebe Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 27 Oct 2026 00:33:03 +0100 Subject: add Transport::delivery_limit --- src/transport/firewall.rs | 4 ++++ src/transport/mod.rs | 4 ++++ src/transport/mycelium/mod.rs | 6 ++++++ src/transport/sim.rs | 4 ++++ src/transport/traffic.rs | 4 ++++ 5 files changed, 22 insertions(+) (limited to 'src/transport') diff --git a/src/transport/firewall.rs b/src/transport/firewall.rs index 2cc1dba..df82aa7 100644 --- a/src/transport/firewall.rs +++ b/src/transport/firewall.rs @@ -68,6 +68,10 @@ impl Transport for FirewallTransport { self.inner.is_peer_id(id) } + fn delivery_limit(&self) -> std::time::Duration { + self.inner.delivery_limit() + } + async fn resolve_seed(&self, seed: &str) -> Result { self.inner.resolve_seed(seed).await } diff --git a/src/transport/mod.rs b/src/transport/mod.rs index febbdf0..d97c51c 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -486,6 +486,10 @@ pub(crate) trait Transport: Send + Sync { /// key). Identities other peers name to us (in a HELLO_REPLY) are checked with it. fn is_peer_id(&self, id: &str) -> bool; + /// How long the transport tries to deliver a message before dropping it: after that, + /// a message sent is delivered or lost for good. + fn delivery_limit(&self) -> std::time::Duration; + /// Resolves a seed (anything that leads to a node, e.g. an address) to that node's /// identity, as `local_id` gives it on that node. async fn resolve_seed(&self, seed: &str) -> Result; diff --git a/src/transport/mycelium/mod.rs b/src/transport/mycelium/mod.rs index 6304819..17344c7 100644 --- a/src/transport/mycelium/mod.rs +++ b/src/transport/mycelium/mod.rs @@ -15,6 +15,8 @@ pub(crate) mod daemon; pub(crate) use daemon::{MyceliumSetup, MyceliumSpawnConfig}; const MYCELIUM_POLL_TIMEOUT_SECS: u64 = 300; +/// How long Mycelium tries to deliver a message before dropping it. +const DELIVERY_LIMIT: Duration = Duration::from_secs(300); /// The largest inbound message read (its JSON, base64 payload included: about 190 MiB of /// payload). Anyone can send us anything; this bounds what one message costs before it /// is even parsed. Generous, because a sync message can carry a whole history until @@ -188,6 +190,10 @@ impl Transport for MyceliumTransport { is_pubkey(id) } + fn delivery_limit(&self) -> Duration { + DELIVERY_LIMIT + } + async fn resolve_seed(&self, hint: &str) -> Result { if is_pubkey(hint) { return Ok(hint.to_owned()); diff --git a/src/transport/sim.rs b/src/transport/sim.rs index 05160f8..149798b 100644 --- a/src/transport/sim.rs +++ b/src/transport/sim.rs @@ -260,6 +260,10 @@ impl Transport for SimTransport { !id.is_empty() } + fn delivery_limit(&self) -> std::time::Duration { + crate::simtest::DELIVERY_LIMIT + } + /// A seed is a node ID; one no node has doesn't resolve (yet). async fn resolve_seed(&self, seed: &str) -> Result { if self.net.is_known(seed) { diff --git a/src/transport/traffic.rs b/src/transport/traffic.rs index 6c3d683..0d93525 100644 --- a/src/transport/traffic.rs +++ b/src/transport/traffic.rs @@ -141,6 +141,10 @@ impl Transport for CountingTransport { self.inner.is_peer_id(id) } + fn delivery_limit(&self) -> std::time::Duration { + self.inner.delivery_limit() + } + async fn resolve_seed(&self, seed: &str) -> Result { self.inner.resolve_seed(seed).await } -- cgit v1.3.1