From d9c61bd526fd83165d583cb5d75be66385611be4 Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 4 Nov 2026 23:32:40 +0100 Subject: time blob messages --- src/transport/mod.rs | 3 +++ src/transport/mycelium/mod.rs | 2 ++ src/transport/wire.rs | 4 +++- 3 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src/transport') diff --git a/src/transport/mod.rs b/src/transport/mod.rs index ae6b593..4ddfe32 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -295,6 +295,9 @@ pub(crate) struct BlobMessage { pub(crate) epoch_seq: u32, pub(crate) id: BlobId, pub(crate) body: BlobBody, + /// When the sender sent it, by its clock (as `SyncEnvelope::sent`): the receiver + /// takes how long it took to come (`swarm::hop`), and of a chunk, the throughput. + pub(crate) sent: crate::clock::UnixMillis, } #[derive(Clone, Serialize, Deserialize)] diff --git a/src/transport/mycelium/mod.rs b/src/transport/mycelium/mod.rs index 3e33a9f..3552edf 100644 --- a/src/transport/mycelium/mod.rs +++ b/src/transport/mycelium/mod.rs @@ -752,6 +752,7 @@ mod tests { index: 5, data: vec![1u8; 64 * 1024].into(), }, + sent: crate::clock::UnixMillis(6), }); let bytes = wire::encode(&chunk).unwrap(); // A 64 KiB chunk costs only a few bytes of framing. @@ -773,6 +774,7 @@ mod tests { chunk_size: 64, hashes: vec![[1; 32], [2; 32]], }, + sent: crate::clock::UnixMillis(6), }); let decoded = decode_blob(&wire::encode(&manifest).unwrap()); assert!(matches!( diff --git a/src/transport/wire.rs b/src/transport/wire.rs index d1b3353..b3a8ee9 100644 --- a/src/transport/wire.rs +++ b/src/transport/wire.rs @@ -14,7 +14,7 @@ use super::{EncodedMessage, MessageKind, ParsedMessage}; /// The wire format's version, the first byte of every payload. Bump it with every change /// to a message type or a codec (`golden_bytes` fails then). -pub(crate) const VERSION: u8 = 26; +pub(crate) const VERSION: u8 = 27; /// What the second byte of a payload says. fn tag(kind: MessageKind) -> u8 { @@ -420,6 +420,7 @@ pub(crate) fn samples() -> Vec { epoch_seq: 1, id: BlobId::Content([5; 32]), body: BlobBody::Missing, + sent: crate::clock::UnixMillis(9), }), ParsedMessage::Who(proof.clone()), ParsedMessage::Me(proof), @@ -603,6 +604,7 @@ mod tests { epoch_seq: 0, id: BlobId::Content([1; 32]), body: BlobBody::Missing, + sent: crate::clock::UnixMillis(2), }); let payload = encode(&blob).unwrap(); assert!(matches!(decode(&payload).unwrap(), ParsedMessage::Blob(_))); -- cgit v1.3.1