aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-04 23:32:40 +0100
committertv <tv@krebsco.de>2026-11-04 23:32:40 +0100
commitd9c61bd526fd83165d583cb5d75be66385611be4 (patch)
tree639727ed0fd624b2607b4728995aca1edafaa054 /src/transport
parent0203eeda95d31900dead926267e69575735e78c4 (diff)
time blob messages
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/mod.rs3
-rw-r--r--src/transport/mycelium/mod.rs2
-rw-r--r--src/transport/wire.rs4
3 files changed, 8 insertions, 1 deletions
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<ParsedMessage> {
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(_)));