diff --git a/src/client.rs b/src/client.rs index 321a49e..95e7860 100644 --- a/src/client.rs +++ b/src/client.rs @@ -712,7 +712,18 @@ impl Client { }; let mut direct = !conn.is_err(); - if interface.is_force_relay() || conn.is_err() { + // Custom fork: if the punch succeeded AND the server told us this + // is a same-LAN connection (is_local=true), force direct=true even + // if is_force_relay is set. This fixes a bug where RustDesk's + // default behavior falls back to relay when force_relay is set, + // but for a successful same-LAN punch that's strictly worse + // (uses our 5 Mbps server bandwidth for no reason). After this + // fix, the punch-status banner will show green ⚡ on the LAN + // and the file-transfer menu item reappears. + if is_local && !conn.is_err() { + direct = true; + } + if (interface.is_force_relay() && !direct) || conn.is_err() { if !relay_server.is_empty() { conn = Self::request_relay( peer_id,