summaryrefslogtreecommitdiffstats
path: root/src/transport
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/sim.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/transport/sim.rs b/src/transport/sim.rs
index 3e0163f..1556d69 100644
--- a/src/transport/sim.rs
+++ b/src/transport/sim.rs
@@ -25,7 +25,7 @@ use tokio::sync::{mpsc, oneshot};
use tracing::{debug, warn};
use super::mycelium::{decode_message, encode_message};
-use super::{EncodedMessage, MessageHandler, ParsedMessage, Transport};
+use super::{EncodedMessage, MessageHandler, MessageKind, ParsedMessage, Transport};
/// How one direction of a link behaves.
#[derive(Clone, Debug)]
@@ -36,6 +36,9 @@ pub(crate) struct LinkParams {
pub(crate) duplicate: f64,
/// Delay, uniform in this range. Overlapping delays reorder messages.
pub(crate) delay: (Duration, Duration),
+ /// Messages of these kinds are always lost: a peer that answers some messages but
+ /// not others (e.g. keepalives but not sync).
+ pub(crate) drop: Vec<MessageKind>,
}
impl Default for LinkParams {
@@ -45,6 +48,7 @@ impl Default for LinkParams {
loss: 0.0,
duplicate: 0.0,
delay: (Duration::from_millis(1), Duration::from_millis(5)),
+ drop: Vec::new(),
}
}
}
@@ -155,7 +159,7 @@ impl SimNet {
.get(&(from.to_owned(), message.peer.clone()))
.unwrap_or(&inner.default_link)
.clone();
- if inner.rng.chance(params.loss) {
+ if params.drop.contains(&message.kind) || inner.rng.chance(params.loss) {
inner.counts.lost += 1;
return;
}