From 46b4e21e8c1ecf1dd94ddff3cf83d52267cda40d Mon Sep 17 00:00:00 2001
From: rustdesk <info@rustdesk.com>
Date: Fri, 26 Jan 2024 18:58:05 +0800
Subject: [PATCH] less udp message if failure

---
 src/rendezvous_mediator.rs | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs
index 2d02a9ff9..cbae601c4 100644
--- a/src/rendezvous_mediator.rs
+++ b/src/rendezvous_mediator.rs
@@ -171,6 +171,7 @@ impl RendezvousMediator {
                 let mut latency = last_register_sent
                     .map(|x| x.elapsed().as_micros() as i64)
                     .unwrap_or(0);
+                last_register_sent = None;
                 if latency < 0 || latency > 1_000_000 {
                     return;
                 }
@@ -216,11 +217,9 @@ impl RendezvousMediator {
                         continue;
                     }
                     last_timer = now;
-                    let elapsed_resp = last_register_resp.map(|x| x.elapsed().as_millis() as i64).unwrap_or(REG_INTERVAL);
-                    let timeout = (elapsed_resp - last_register_sent.map(|x| x.elapsed().as_millis() as i64).unwrap_or(REG_INTERVAL)) > REG_TIMEOUT;
-                    if timeout || elapsed_resp >= REG_INTERVAL {
-                        rz.register_peer(Sink::Framed(&mut socket, &addr)).await?;
-                        last_register_sent = now;
+                    let expired = last_register_resp.map(|x| x.elapsed().as_millis() as i64 >= REG_INTERVAL).unwrap_or(true);
+                    let timeout = last_register_sent.map(|x| x.elapsed().as_millis() as i64 >= REG_TIMEOUT).unwrap_or(false);
+                    if timeout || (last_register_sent.is_none() && expired) {
                         if timeout {
                             fails += 1;
                             if fails > MAX_FAILS2 {
@@ -240,6 +239,8 @@ impl RendezvousMediator {
                                 old_latency = 0;
                             }
                         }
+                        rz.register_peer(Sink::Framed(&mut socket, &addr)).await?;
+                        last_register_sent = now;
                     }
                 }
             }