diff options
Diffstat (limited to 'src/transport')
| -rw-r--r-- | src/transport/sim.rs | 8 |
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; } |
