diff options
| author | tv <tv@krebsco.de> | 2026-11-05 03:49:13 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-05 03:49:13 +0100 |
| commit | a9fb4e6890bfaef1e25cdceb4eea9c997e3c7cdf (patch) | |
| tree | 8402deb8c70a033b1a323a10ab88c0bed3a339a8 /src/swarm/sync.rs | |
| parent | 11d098477cfc76da0bc4385635e4c4b7124a9259 (diff) | |
no swarm ID in sync
Diffstat (limited to 'src/swarm/sync.rs')
| -rw-r--r-- | src/swarm/sync.rs | 29 |
1 files changed, 7 insertions, 22 deletions
diff --git a/src/swarm/sync.rs b/src/swarm/sync.rs index 8660742..28f3ca0 100644 --- a/src/swarm/sync.rs +++ b/src/swarm/sync.rs @@ -239,14 +239,13 @@ async fn deliver_sync_to_peer(state: &AppState, peer: &str) -> Result<()> { return (session, Ok(None)); }; // What the envelope adds to an Automerge message (`swarm::stats`), and of - // that, the swarm ID and the epoch (msgpack: 36 bytes the epoch). + // that, the epoch (msgpack: 36 bytes). let inner = match &body { transport::SyncBody::Message(payload) => Some(payload.0.len()), transport::SyncBody::Delta(_) => None, }; - let ids = rmp_serde::encode::to_vec(&swarm_id).map_or(0, |id| id.len()) + 36; + let ids = 36; let envelope = transport::SyncEnvelope { - swarm_id, epoch, epoch_seq, body, @@ -390,13 +389,11 @@ pub(crate) async fn handle_sync( debug!(peer = %peer, "Dropping sync message from a peer that isn't a member yet"); true } - Standing::Member { swarm_id } if swarm_id != &envelope.swarm_id => { - bail!( - "Sync swarm mismatch for peer {peer}: validated_swarm={swarm_id}, envelope_swarm={}", - envelope.swarm_id - ); - } - Standing::Member { .. } => false, + // Its swarm was proven by the handshake (the envelope doesn't say it again). + Standing::Member { swarm_id } => match state.swarm_id().await { + Some(ours) if &ours == swarm_id => false, + _ => bail!("Sync from {peer}, a member of swarm {swarm_id}, which isn't ours"), + }, } }; @@ -409,18 +406,6 @@ pub(crate) async fn handle_sync( return Ok(()); } - let expected_swarm = state - .swarm_id() - .await - .ok_or_else(|| anyhow!("Missing expected swarm ID after peer membership"))?; - if envelope.swarm_id != expected_swarm { - bail!( - "Incompatible swarm from {peer}: expected {}, received {}", - expected_swarm, - envelope.swarm_id - ); - } - let epoch_label = envelope.epoch; let from_ready = envelope.ready; let writer = envelope.writer; |
