aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/wire.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-06 19:54:09 +0100
committertv <tv@krebsco.de>2026-11-06 19:54:09 +0100
commit5994b49412c058079639585501a78e6458fdbb6f (patch)
treeca78aa3cd7d0d6d2a48bfa42d61afcddb8efd6df /src/transport/wire.rs
parent7c0c318dca3054be6c7bacf5a4b3f5a4e47cc949 (diff)
HyParView (slim)
Diffstat (limited to 'src/transport/wire.rs')
-rw-r--r--src/transport/wire.rs32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/transport/wire.rs b/src/transport/wire.rs
index 729acd3..0733d9c 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 = 37;
+pub(crate) const VERSION: u8 = 38;
/// What the second byte of a payload says.
fn tag(kind: MessageKind) -> u8 {
@@ -35,6 +35,9 @@ fn tag(kind: MessageKind) -> u8 {
MessageKind::ProbeReply => 13,
MessageKind::Prune => 14,
MessageKind::Graft => 15,
+ MessageKind::Neighbour => 16,
+ MessageKind::NeighbourReply => 17,
+ MessageKind::Disconnect => 18,
}
}
@@ -94,6 +97,10 @@ pub(crate) fn encode(message: &ParsedMessage) -> Result<Vec<u8>, WireError> {
ParsedMessage::Prune(link) | ParsedMessage::Graft(link) => {
rmp_serde::encode::write(&mut payload, link)?
}
+ ParsedMessage::Neighbour(request) => rmp_serde::encode::write(&mut payload, request)?,
+ ParsedMessage::NeighbourReply(answer) | ParsedMessage::Disconnect(answer) => {
+ rmp_serde::encode::write(&mut payload, answer)?
+ }
}
Ok(payload)
}
@@ -171,6 +178,12 @@ pub(crate) fn decode(payload: &[u8]) -> Result<ParsedMessage, WireError> {
ParsedMessage::Prune(rmp_serde::from_slice(body)?)
} else if is(MessageKind::Graft) {
ParsedMessage::Graft(rmp_serde::from_slice(body)?)
+ } else if is(MessageKind::Neighbour) {
+ ParsedMessage::Neighbour(rmp_serde::from_slice(body)?)
+ } else if is(MessageKind::NeighbourReply) {
+ ParsedMessage::NeighbourReply(rmp_serde::from_slice(body)?)
+ } else if is(MessageKind::Disconnect) {
+ ParsedMessage::Disconnect(rmp_serde::from_slice(body)?)
} else {
return Err(WireError::UnknownKind(kind));
})
@@ -551,6 +564,21 @@ pub(crate) fn samples() -> Vec<ParsedMessage> {
epoch_seq: 1,
writer: 5,
}),
+ ParsedMessage::Neighbour(crate::transport::NeighbourRequest {
+ epoch,
+ epoch_seq: 1,
+ high: true,
+ }),
+ ParsedMessage::NeighbourReply(crate::transport::NeighbourAnswer {
+ epoch,
+ epoch_seq: 1,
+ agreed: true,
+ }),
+ ParsedMessage::Disconnect(crate::transport::NeighbourAnswer {
+ epoch,
+ epoch_seq: 1,
+ agreed: false,
+ }),
]
}
@@ -582,7 +610,7 @@ mod tests {
#[test]
fn every_kind_round_trips() {
let samples = samples();
- assert_eq!(samples.len(), 16, "a kind is missing from `samples`");
+ assert_eq!(samples.len(), 19, "a kind is missing from `samples`");
for message in samples {
let bytes = encode(&message).unwrap();
let decoded = decode(&bytes).unwrap();