summaryrefslogtreecommitdiffstats
path: root/src/transport
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/firewall.rs4
-rw-r--r--src/transport/mod.rs4
-rw-r--r--src/transport/mycelium/mod.rs6
-rw-r--r--src/transport/sim.rs4
-rw-r--r--src/transport/traffic.rs4
5 files changed, 22 insertions, 0 deletions
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<String> {
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<String>;
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<String> {
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<String> {
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<String> {
self.inner.resolve_seed(seed).await
}