aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/peer/keepalive.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/swarm/peer/keepalive.rs')
-rw-r--r--src/swarm/peer/keepalive.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/swarm/peer/keepalive.rs b/src/swarm/peer/keepalive.rs
index 11817cc..8597dcd 100644
--- a/src/swarm/peer/keepalive.rs
+++ b/src/swarm/peer/keepalive.rs
@@ -71,6 +71,9 @@ pub(super) async fn note_alive(state: &AppState, peer: &str, message: &ParsedMes
if ping {
// Its keepalive (or a path probe): the next is ours.
peer_state.keepalive_received_at = Some(now);
+ if let Some(at) = peer_state.keepalive_due_at(&state.timing) {
+ state.peers_due.by(at);
+ }
}
})
.await;
@@ -181,6 +184,9 @@ pub(super) async fn status_received(state: &AppState, peer: &str) {
let now = Instant::now();
peer_state.keepalive_received_at = Some(now);
peer_state.last_status_at = Some(now);
+ if let Some(at) = peer_state.keepalive_due_at(&state.timing) {
+ state.peers_due.by(at);
+ }
}
}
@@ -195,6 +201,10 @@ pub(super) async fn note_status(state: &AppState, peer: &str, remote: &transport
// its HELLO when it's back, makes it active again).
remote.leaving && p.say_farewell(Instant::now())
});
+ if left {
+ // Probed from now on.
+ state.peers_due.now();
+ }
let became_ready = remote.ready && peer_state.reports_ready != Some(true);
peer_state.reports_ready = Some(remote.ready);
peer_state.reported_heads = remote.heads.heads().map(<[_]>::len);