diff options
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)) |
