diff options
| author | tv <tv@krebsco.de> | 2026-11-03 02:43:15 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-03 02:43:15 +0100 |
| commit | 5cd26d321b706113afb8431aba35ab8fb32281c4 (patch) | |
| tree | ae1a64479a29182c44a2375417f74583e4ee074a /src/swarm/peer/inbound.rs | |
| parent | e4709cc6ab3fca7f7ce40793aa5cceb64f0bfea3 (diff) | |
announcements answered only if heads differ
Diffstat (limited to 'src/swarm/peer/inbound.rs')
| -rw-r--r-- | src/swarm/peer/inbound.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/swarm/peer/inbound.rs b/src/swarm/peer/inbound.rs index 18d29d5..1454c3e 100644 --- a/src/swarm/peer/inbound.rs +++ b/src/swarm/peer/inbound.rs @@ -143,8 +143,15 @@ pub(crate) async fn handle_message( crate::swarm::blob::handle(state, &peer, blob).await; } transport::ParsedMessage::Status(remote) => { - status_received(state, &peer).await; + // An announcement is no keepalive; it is answered only if our heads differ, + // so the announcer learns what we have that it lacks. + if !remote.announcing { + status_received(state, &peer).await; + } let local = on_status(state, &peer, &remote, reactivated).await; + if remote.announcing && local.heads == remote.heads { + return Ok(()); + } if let Err(error) = state .transport .send_message(&peer, &ParsedMessage::StatusReply(local)) |
