From d2f527e36851657aea3c596f2e35a602a2d97f22 Mon Sep 17 00:00:00 2001 From: hashbk Date: Sun, 11 Oct 2026 15:10:45 +0800 Subject: [PATCH 1/4] feat: forward WebRTC SDP and ICE candidates through rendezvous server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Align the hbb_common submodule with the rustdesk client (rustdesk/hbb_common @229b904) so the WebRTC proto fields are available, then wire up the rendezvous server to relay them: - PunchHoleRequest.webrtc_sdp_offer → PunchHole.webrtc_sdp_offer - PunchHoleSent.webrtc_sdp_answer → PunchHoleResponse.webrtc_sdp_answer - IceCandidate messages are forwarded to the peer identified by socket_addr (B→A) or id (A→B), with routing fields stripped --- .gitmodules | 2 +- libs/hbb_common | 2 +- src/rendezvous_server/punch_hole.rs | 2 ++ src/rendezvous_server/tcp_handler.rs | 50 ++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index b30b382..a443645 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "libs/hbb_common"] path = libs/hbb_common - url = https://github.com/databk/hbb_common.git + url = https://github.com/rustdesk/hbb_common.git diff --git a/libs/hbb_common b/libs/hbb_common index 29cf7cb..229b904 160000 --- a/libs/hbb_common +++ b/libs/hbb_common @@ -1 +1 @@ -Subproject commit 29cf7cbe4d38ce36020749f713fb066299f02431 +Subproject commit 229b904508364c8997aad0fb5af57effac859f60 diff --git a/src/rendezvous_server/punch_hole.rs b/src/rendezvous_server/punch_hole.rs index 6c538ea..1b66caf 100644 --- a/src/rendezvous_server/punch_hole.rs +++ b/src/rendezvous_server/punch_hole.rs @@ -31,6 +31,7 @@ impl RendezvousServer { pk: self.get_pk(&phs.version, phs.id).await, relay_server: phs.relay_server.clone(), is_udp: socket.is_some(), + webrtc_sdp_answer: phs.webrtc_sdp_answer, ..Default::default() }; if let Ok(t) = phs.nat_type.enum_value() { @@ -200,6 +201,7 @@ impl RendezvousServer { relay_server, udp_port: ph.udp_port, force_relay: ph.force_relay, + webrtc_sdp_offer: ph.webrtc_sdp_offer, ..Default::default() }); } diff --git a/src/rendezvous_server/tcp_handler.rs b/src/rendezvous_server/tcp_handler.rs index 46932e1..1e8c45d 100644 --- a/src/rendezvous_server/tcp_handler.rs +++ b/src/rendezvous_server/tcp_handler.rs @@ -291,6 +291,10 @@ impl RendezvousServer { } return true; } + Some(rendezvous_message::Union::IceCandidate(ice)) => { + self.handle_ice_candidate(ice).await; + return true; + } _ => {} } } @@ -327,4 +331,50 @@ impl RendezvousServer { } Ok(()) } + + /// Forward a WebRTC ICE candidate to the peer identified by `socket_addr` + /// (B → A, the answerer knows the offerer's mangled address) or by `id` + /// (A → B, the offerer knows only the peer id). The routing fields are + /// stripped before forwarding so neither peer learns the other's address + /// from this hop; only `session_key` and `candidate` are delivered. + #[inline] + async fn handle_ice_candidate(&mut self, ice: IceCandidate) { + let target_addr = if !ice.socket_addr.is_empty() { + Some(AddrMangle::decode(&ice.socket_addr)) + } else if !ice.id.is_empty() { + if let Some(peer) = self.pm.get_in_memory(&ice.id).await { + Some(peer.read().await.socket_addr) + } else { + None + } + } else { + None + }; + let Some(target_addr) = target_addr else { + return; + }; + let msg_out = { + let mut m = RendezvousMessage::new(); + m.set_ice_candidate(IceCandidate { + session_key: ice.session_key, + candidate: ice.candidate, + ..Default::default() + }); + m + }; + let addr_v4 = try_into_v4(target_addr); + let sink_arc = self.ws_map.lock().await.get(&addr_v4).cloned(); + if let Some(sink_arc) = sink_arc { + let mut ws_sink = sink_arc.lock().await; + Self::send_to_sink(&mut *ws_sink, msg_out).await; + } else { + let sink_arc = self.tcp_map.lock().await.get(&addr_v4).cloned(); + if let Some(sink_arc) = sink_arc { + let mut tcp_sink = sink_arc.lock().await; + Self::send_to_sink(&mut *tcp_sink, msg_out).await; + } else { + self.tx.send(Data::Msg(msg_out.into(), target_addr)).ok(); + } + } + } } From 338a0d1dabba05c38e680e9d41d5d2fb54ccd9ab Mon Sep 17 00:00:00 2001 From: hashbk Date: Sun, 11 Oct 2026 15:34:18 +0800 Subject: [PATCH 2/4] fix: update Cargo.lock for hbb_common submodule bump The hbb_common submodule was aligned with the rustdesk client (229b904), bringing in new dependencies (webrtc, etc.). The Cargo.lock was not regenerated, causing all CI jobs using --locked to fail. --- Cargo.lock | 418 +++++++++++++++++++++++++++-------------------------- 1 file changed, 213 insertions(+), 205 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 132b947..3e45003 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -195,7 +195,7 @@ dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", "syn 2.0.119", - "synstructure", + "synstructure 0.13.2", ] [[package]] @@ -211,9 +211,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.44" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "515a1f282e33d55983c499d7e9e87082e81cbc32974825bf9032f928392d5844" +checksum = "ee19bd99b43e3691acbad4e840420a4881cea6c0b66a208125a824f8fd53f5a1" dependencies = [ "compression-codecs", "compression-core", @@ -223,13 +223,13 @@ dependencies = [ [[package]] name = "async-recursion" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +checksum = "4f8abc12baad266b1c8cec146854c195b5864b4221d4b2ca7296a7ae82d9e451" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 2.0.119", + "syn 3.0.7", ] [[package]] @@ -251,7 +251,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", ] [[package]] @@ -358,6 +358,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64ct" version = "1.8.3" @@ -416,9 +422,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" @@ -480,9 +486,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.5" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" +checksum = "50a649af8a827553c29fb0cb4bd4a6f1a0dd695bd3232b9bc98bd9c8a3ffbb8b" dependencies = [ "find-msvc-tools", "jobserver", @@ -519,9 +525,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" @@ -591,18 +597,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -612,9 +618,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "colorchoice" @@ -634,9 +640,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.39" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fe67f2944eef52fc7b106b8c9450d243a88701a0c065f7f57235e76abaed7df" +checksum = "98fc98460ba0ad5317075d3632b8dfc45d0be8c4a49347c2a38272019717614a" dependencies = [ "compression-core", "flate2", @@ -728,27 +734,27 @@ checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" [[package]] name = "crc32fast" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.16" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -756,27 +762,27 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26" +checksum = "03e8bd762f7479489c70ed6c768ddca99d7296857de437a68dcb2a94365b3fae" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crypto-bigint" @@ -893,7 +899,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -978,7 +984,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", ] [[package]] @@ -1053,9 +1059,9 @@ dependencies = [ [[package]] name = "either" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" +checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" [[package]] name = "elliptic-curve" @@ -1160,9 +1166,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" [[package]] name = "flate2" @@ -1322,7 +1328,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", ] [[package]] @@ -1486,7 +1492,7 @@ dependencies = [ "base64 0.22.1", "bytes", "chrono", - "clap 4.6.6", + "clap 4.6.7", "confy", "default_net", "directories-next", @@ -1521,12 +1527,12 @@ dependencies = [ "thiserror 1.0.69", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.5", + "tokio-rustls 0.26.6", "tokio-socks", - "tokio-tungstenite 0.26.2", + "tokio-tungstenite 0.29.0", "tokio-util", "toml 0.7.8", - "tungstenite 0.26.2", + "tungstenite 0.29.0", "url", "users", "uuid", @@ -1765,13 +1771,12 @@ dependencies = [ [[package]] name = "hyper" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" +checksum = "2c3e324da4c95177d6291d4c8730197c0d1822f8a9766814a4a44fa5ab797c9c" dependencies = [ "atomic-waker", "bytes", - "futures-channel", "futures-core", "http 1.5.0", "http-body 1.1.0", @@ -1785,17 +1790,17 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.9" +version = "0.27.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53" dependencies = [ "http 1.5.0", - "hyper 1.11.1", + "hyper 1.12.0", "hyper-util", - "rustls 0.23.43", + "rustls 0.23.45", "rustls-native-certs", "tokio", - "tokio-rustls 0.26.5", + "tokio-rustls 0.26.6", "tower-service", "webpki-roots 1.0.9", ] @@ -1808,7 +1813,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.11.1", + "hyper 1.12.0", "hyper-util", "native-tls", "tokio", @@ -1818,17 +1823,18 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff" dependencies = [ - "base64 0.22.1", + "base64 0.23.1", "bytes", "futures-channel", "futures-util", "http 1.5.0", "http-body 1.1.0", - "hyper 1.11.1", + "httparse", + "hyper 1.12.0", "ipnet", "libc", "percent-encoding", @@ -2028,9 +2034,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.12.1" +version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" [[package]] name = "ipnetwork" @@ -2066,9 +2072,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.35" +version = "0.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" +checksum = "b2b005715dcbeb0089a3c0dab99f2ff1cc3b2525323552703d648585d342a383" dependencies = [ "defmt", "jiff-core", @@ -2081,18 +2087,19 @@ dependencies = [ [[package]] name = "jiff-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c" dependencies = [ "defmt", + "log", ] [[package]] name = "jiff-static" -version = "0.2.35" +version = "0.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +checksum = "2cc9817253cf7c7ee4684451bd327e88d6f3658014e54a29198625590650695c" dependencies = [ "jiff-core", "proc-macro2 1.0.107", @@ -2156,9 +2163,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ "cfg-if", "futures-util", @@ -2181,9 +2188,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" [[package]] name = "lazycell" @@ -2206,9 +2213,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.189" +version = "0.2.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" [[package]] name = "libloading" @@ -2222,11 +2229,11 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.23" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d8f1ea3f21fd3405dcaf6c9b5c1630af9afc422d9073ea39c5f6d6c772e08ed" +checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "libc", "plain", "redox_syscall 0.9.4", @@ -2302,18 +2309,18 @@ checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru-slab" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "mac_address" -version = "1.1.8" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" +checksum = "f3d0581a75c45969c63afd2bb87b1d8b25cfcc556c7a918cf9bb13b0fe8d2381" dependencies = [ - "nix 0.29.0", - "winapi", + "nix 0.31.3", + "windows-sys 0.61.2", ] [[package]] @@ -2418,9 +2425,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee" dependencies = [ "libc", "wasi", @@ -2484,11 +2491,11 @@ dependencies = [ [[package]] name = "nix" -version = "0.29.0" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "cfg-if", "cfg_aliases", "libc", @@ -2620,7 +2627,7 @@ version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "cfg-if", "foreign-types", "libc", @@ -2823,9 +2830,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "13bee6c73da26345c729282832b60b0363cf3dd9f4bfd81d8551b7a1c889a113" [[package]] name = "ping" @@ -2898,9 +2905,9 @@ dependencies = [ [[package]] name = "powerfmt" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" [[package]] name = "ppv-lite86" @@ -2998,9 +3005,9 @@ checksum = "e9e1dcb320d6839f6edb64f7a4a59d39b30480d4d1765b56873f7c858538a5fe" [[package]] name = "quinn" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" dependencies = [ "bytes", "cfg_aliases", @@ -3008,9 +3015,9 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.3", - "rustls 0.23.43", + "rustls 0.23.45", "socket2 0.6.5", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tracing", "web-time", @@ -3018,21 +3025,21 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" +checksum = "0e750cca55fe4f0439a15d0bb529da9651e79993e8e72c61a899a36d462befbe" dependencies = [ "bytes", "getrandom 0.4.3", "lru-slab", - "rand 0.10.2", + "rand 0.10.3", "rand_pcg", "ring 0.17.14", "rustc-hash 2.1.3", - "rustls 0.23.43", + "rustls 0.23.45", "rustls-pki-types", "slab", - "thiserror 2.0.20", + "thiserror 2.0.21", "tinyvec", "tracing", "web-time", @@ -3040,9 +3047,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" +checksum = "af66907df18639dcf4db56ca65490cabc4b27a97dbadd96f2926cca73298f016" dependencies = [ "cfg_aliases", "libc", @@ -3105,9 +3112,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ "chacha20", "getrandom 0.4.3", @@ -3216,7 +3223,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", ] [[package]] @@ -3225,7 +3232,7 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "737970939a87c6fa31e7acad13307bccbb017a073b695b6089a2c484f929e20e" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", ] [[package]] @@ -3282,7 +3289,7 @@ dependencies = [ "http 1.5.0", "http-body 1.1.0", "http-body-util", - "hyper 1.11.1", + "hyper 1.12.0", "hyper-rustls", "hyper-tls", "hyper-util", @@ -3292,7 +3299,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.43", + "rustls 0.23.45", "rustls-native-certs", "rustls-pki-types", "serde", @@ -3301,7 +3308,7 @@ dependencies = [ "sync_wrapper 1.0.2", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.5", + "tokio-rustls 0.26.6", "tokio-util", "tower 0.5.3", "tower-http 0.6.11", @@ -3424,7 +3431,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3433,11 +3440,11 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.12.1", @@ -3458,9 +3465,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.43" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "log", "once_cell", @@ -3513,7 +3520,7 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.43", + "rustls 0.23.45", "rustls-native-certs", "rustls-platform-verifier-android", "rustls-webpki", @@ -3618,7 +3625,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "core-foundation", "core-foundation-sys", "libc", @@ -3668,14 +3675,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "1741ab7a6cc54a03a89b5d563ed60075c277d9e3cfa73ad0c1f23f23974703c6" dependencies = [ "itoa", "memchr", @@ -3790,7 +3797,7 @@ checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" dependencies = [ "num-bigint", "num-traits", - "thiserror 2.0.20", + "thiserror 2.0.21", "time", ] @@ -3802,9 +3809,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.16.0" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" [[package]] name = "smol_str" @@ -4097,9 +4104,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.5" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +checksum = "d62a2e0561533f2ca2561d0cf27fd9fedb640a1bf2616ff5d5c80d99017faadc" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", @@ -4132,6 +4139,17 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "synstructure" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2 1.0.107", + "quote 1.0.47", + "syn 3.0.7", +] + [[package]] name = "sysinfo" version = "0.29.10" @@ -4155,7 +4173,7 @@ dependencies = [ "fastrand", "getrandom 0.4.3", "once_cell", - "rustix 1.1.4", + "rustix 1.1.5", "windows-sys 0.61.2", ] @@ -4188,11 +4206,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" dependencies = [ - "thiserror-impl 2.0.20", + "thiserror-impl 2.0.21", ] [[package]] @@ -4208,13 +4226,13 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", ] [[package]] @@ -4261,24 +4279,15 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf0ded5c4e56918d8f8a339e1bb67d038d3bc6d144ac407904015ba2e4cde9b" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044" dependencies = [ "bytes", "libc", @@ -4299,7 +4308,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", ] [[package]] @@ -4325,11 +4334,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.5" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db" dependencies = [ - "rustls 0.23.43", + "rustls 0.23.45", "tokio", ] @@ -4344,7 +4353,7 @@ dependencies = [ "futures-sink", "futures-util", "pin-project", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-util", ] @@ -4374,28 +4383,27 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +version = "0.29.0" +source = "git+https://github.com/rustdesk-org/tokio-tungstenite?rev=c241b11b03de4881faf1ecd2fe6e867c92f3013b#c241b11b03de4881faf1ecd2fe6e867c92f3013b" dependencies = [ "futures-util", "log", "native-tls", - "rustls 0.23.43", + "rustls 0.23.45", "rustls-native-certs", "rustls-pki-types", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.5", - "tungstenite 0.26.2", + "tokio-rustls 0.26.6", + "tungstenite 0.29.0", "webpki-roots 0.26.11", ] [[package]] name = "tokio-util" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +checksum = "e464cf451ba96ebfc6f9b6542f17ee8b8956e33f1e40d9690624e59d7a7f8a4b" dependencies = [ "bytes", "futures-core", @@ -4515,7 +4523,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "bytes", "futures-util", "http 1.5.0", @@ -4586,9 +4594,9 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.26.2" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" dependencies = [ "bytes", "data-encoding", @@ -4597,12 +4605,11 @@ dependencies = [ "log", "native-tls", "rand 0.9.5", - "rustls 0.23.43", + "rustls 0.23.45", "rustls-native-certs", "rustls-pki-types", "sha1", - "thiserror 2.0.20", - "utf-8", + "thiserror 2.0.21", "webpki-roots 0.26.11", ] @@ -4635,9 +4642,9 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicase" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" +checksum = "357cc3acc6a036009fd6c973ed009037c732d60d0b4f6c673e9041497482a28f" [[package]] name = "unicode-bidi" @@ -4647,9 +4654,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-normalization" @@ -4754,9 +4761,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.26.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812" +checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -4802,9 +4809,9 @@ dependencies = [ [[package]] name = "want" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "ec4cdd0dd910afe868b7ef477227d8d538b46b3075031afee8a9f2acb0a2ed0b" dependencies = [ "try-lock", ] @@ -4832,9 +4839,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -4845,19 +4852,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.78" +version = "0.4.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" dependencies = [ "js-sys", + "tokio", "wasm-bindgen", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote 1.0.47", "wasm-bindgen-macro-support", @@ -4865,31 +4873,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ "bumpalo", "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.128" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.105" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -4972,7 +4980,7 @@ dependencies = [ "ring 0.17.14", "rtcp", "rtp", - "rustls 0.23.43", + "rustls 0.23.45", "sdp", "serde", "serde_json", @@ -5034,7 +5042,7 @@ dependencies = [ "rand_core 0.6.4", "rcgen", "ring 0.17.14", - "rustls 0.23.43", + "rustls 0.23.45", "sec1", "serde", "sha1", @@ -5617,30 +5625,30 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 2.0.119", - "synstructure", + "syn 3.0.7", + "synstructure 0.14.0", ] [[package]] name = "zerocopy" -version = "0.8.56" +version = "0.8.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +checksum = "86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.56" +version = "0.8.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +checksum = "5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", @@ -5658,21 +5666,21 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 2.0.119", - "synstructure", + "syn 3.0.7", + "synstructure 0.14.0", ] [[package]] name = "zeroize" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879" dependencies = [ "zeroize_derive", ] @@ -5718,14 +5726,14 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2 1.0.107", "quote 1.0.47", - "syn 3.0.5", + "syn 3.0.7", ] [[package]] name = "zlib-rs" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" [[package]] name = "zmij" @@ -5753,9 +5761,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.1.0+zstd.1.5.7" +version = "2.1.1+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef0a8027ec3ee71300ab3bcbcd0393f434aa72b91ca6d635a39941deae8eea0" +checksum = "aeec9eaf2dffbbd09201e23bd0ffcbaa33bb8e9266a10734fd7ed90a85eca078" dependencies = [ "cc", "pkg-config", From 22be8526d62434daa663d9ff77164d47a39bd486 Mon Sep 17 00:00:00 2001 From: hashbk Date: Sun, 11 Oct 2026 15:57:27 +0800 Subject: [PATCH 3/4] chore: fix compiler warnings across the codebase Remove unused imports, suppress dead code with #[allow(dead_code)], fix unnecessary mut and unused variables. No behavioral changes. --- src/common.rs | 2 ++ src/database.rs | 1 + src/management.rs | 1 + src/peer.rs | 2 ++ src/relay_server/connection.rs | 2 +- src/relay_server/mod.rs | 3 +-- src/rendezvous_server/command.rs | 4 +--- src/rendezvous_server/helper.rs | 5 ----- src/rendezvous_server/listener.rs | 11 +++-------- src/rendezvous_server/mod.rs | 3 --- src/rendezvous_server/punch_hole.rs | 3 +-- src/rendezvous_server/register.rs | 2 +- src/rendezvous_server/relay.rs | 2 +- src/rendezvous_server/server.rs | 4 +--- src/rendezvous_server/sink.rs | 2 +- src/rendezvous_server/tcp_handler.rs | 2 -- src/rendezvous_server/udp_handler.rs | 3 +-- 17 files changed, 18 insertions(+), 34 deletions(-) diff --git a/src/common.rs b/src/common.rs index df1a7df..5fa6161 100644 --- a/src/common.rs +++ b/src/common.rs @@ -279,6 +279,7 @@ pub async fn listen_signal() -> Result<()> { } +#[allow(dead_code)] pub fn check_software_update() { const ONE_DAY_IN_SECONDS: u64 = 60 * 60 * 24; std::thread::spawn(move || loop { @@ -287,6 +288,7 @@ pub fn check_software_update() { }); } +#[allow(dead_code)] #[tokio::main(flavor = "current_thread")] async fn check_software_update_() -> hbb_common::ResultType<()> { let (request, url) = hbb_common::version_check_request(hbb_common::VER_TYPE_RUSTDESK_SERVER.to_string()); diff --git a/src/database.rs b/src/database.rs index 1ea016e..fb7c66b 100644 --- a/src/database.rs +++ b/src/database.rs @@ -36,6 +36,7 @@ pub struct Database { } #[derive(Default)] +#[allow(dead_code)] pub struct Peer { pub guid: Vec, pub id: String, diff --git a/src/management.rs b/src/management.rs index 5822f7d..306ae28 100644 --- a/src/management.rs +++ b/src/management.rs @@ -93,6 +93,7 @@ pub fn is_banned(id: &str, ip: &str) -> bool { BANS.read().unwrap().contains(id, ip) } +#[allow(dead_code)] pub fn set_peers(peers: Vec) { *PEERS.write().unwrap() = peers; } diff --git a/src/peer.rs b/src/peer.rs index 5457c79..99ee3d4 100644 --- a/src/peer.rs +++ b/src/peer.rs @@ -11,6 +11,7 @@ use serde_derive::{Deserialize, Serialize}; use std::{collections::HashMap, collections::HashSet, net::SocketAddr, sync::Arc, time::Instant}; type IpBlockMap = HashMap, Instant))>; +#[allow(dead_code)] type UserStatusMap = HashMap, Arc<(Option>, bool)>>; type IpChangesMap = HashMap)>; lazy_static::lazy_static! { @@ -195,6 +196,7 @@ impl PeerMap { } #[inline] + #[allow(dead_code)] pub(crate) async fn is_in_memory(&self, id: &str) -> bool { self.map.read().await.contains_key(id) } diff --git a/src/relay_server/connection.rs b/src/relay_server/connection.rs index 00f71a3..034af35 100644 --- a/src/relay_server/connection.rs +++ b/src/relay_server/connection.rs @@ -2,7 +2,7 @@ use super::*; use async_speed_limit::Limiter; use hbb_common::{ allow_err, bail, - bytes::Bytes, + log, protobuf::Message as _, rendezvous_proto::*, diff --git a/src/relay_server/mod.rs b/src/relay_server/mod.rs index 1c51dd9..a853e0e 100644 --- a/src/relay_server/mod.rs +++ b/src/relay_server/mod.rs @@ -4,11 +4,10 @@ mod helper; mod server; mod stream; -use async_speed_limit::Limiter; use hbb_common::tokio::sync::{Mutex, RwLock}; use std::{ collections::{HashMap, HashSet}, - sync::atomic::{AtomicUsize, Ordering}, + sync::atomic::AtomicUsize, }; pub use server::start_with_bind; diff --git a/src/rendezvous_server/command.rs b/src/rendezvous_server/command.rs index 7d0c8b4..5001347 100644 --- a/src/rendezvous_server/command.rs +++ b/src/rendezvous_server/command.rs @@ -1,7 +1,5 @@ use super::*; -use crate::common::*; use crate::peer::*; -use hbb_common::rendezvous_proto::*; use std::net::IpAddr; use std::sync::atomic::Ordering; @@ -126,7 +124,7 @@ impl RendezvousServer { if let Some("-") = arg { lock.clear(); } else { - let mut start = arg.and_then(|x| x.parse::().ok()).unwrap_or(0); + let start = arg.and_then(|x| x.parse::().ok()).unwrap_or(0); let mut page_size = fds.next().and_then(|x| x.parse::().ok()).unwrap_or(10); if page_size == 0 { page_size = 10; diff --git a/src/rendezvous_server/helper.rs b/src/rendezvous_server/helper.rs index 0450b16..bd93fad 100644 --- a/src/rendezvous_server/helper.rs +++ b/src/rendezvous_server/helper.rs @@ -1,23 +1,18 @@ use super::*; use crate::common::*; -use crate::peer::*; use hbb_common::{ bail, bytes::Bytes, config, - futures_util::stream::StreamExt, log, protobuf::Message as _, rendezvous_proto::*, - tcp::FramedStream, - timeout, tokio::{ self, net::TcpListener, time::{interval, Duration}, }, udp::FramedSocket, - AddrMangle, ResultType, }; use sodiumoxide::crypto::sign; diff --git a/src/rendezvous_server/listener.rs b/src/rendezvous_server/listener.rs index af1b491..f59b7bb 100644 --- a/src/rendezvous_server/listener.rs +++ b/src/rendezvous_server/listener.rs @@ -1,6 +1,4 @@ use super::*; -use crate::common::*; -use crate::peer::*; use hbb_common::{ allow_err, bail, bytes::Bytes, @@ -9,20 +7,18 @@ use hbb_common::{ log, protobuf::Message as _, rendezvous_proto::*, - tcp::{Encrypt, FramedStream}, + tcp::Encrypt, timeout, tokio::{ self, io::{AsyncReadExt, AsyncWriteExt}, net::TcpStream, - sync::Mutex, }, tokio_util::codec::Framed, try_into_v4, ResultType, }; use sodiumoxide::crypto::{box_, sign}; use std::net::SocketAddr; -use std::sync::Arc; impl RendezvousServer { pub(crate) async fn handle_listener2(&self, stream: TcpStream, addr: SocketAddr) { @@ -182,12 +178,11 @@ impl RendezvousServer { async fn handle_listener_inner( &mut self, stream: TcpStream, - mut addr: SocketAddr, + addr: SocketAddr, key: &str, ws: bool, ) -> ResultType<()> { let mut sink; - let mut forwarded_ip: Option = None; if ws { use tokio_tungstenite::tungstenite::handshake::server::{Request, Response}; let forwarded_ip_cell: std::sync::Arc>> = @@ -222,7 +217,7 @@ impl RendezvousServer { Ok(response) }; let ws_stream = tokio_tungstenite::accept_hdr_async(stream, callback).await?; - forwarded_ip = forwarded_ip_cell.lock().unwrap().clone(); + let forwarded_ip = forwarded_ip_cell.lock().unwrap().clone(); let (a, mut b) = ws_stream.split(); sink = Some(Sink::Ws(a)); while let Ok(Some(res)) = timeout(30_000, b.next()).await { diff --git a/src/rendezvous_server/mod.rs b/src/rendezvous_server/mod.rs index 77692e1..b585f19 100644 --- a/src/rendezvous_server/mod.rs +++ b/src/rendezvous_server/mod.rs @@ -13,7 +13,6 @@ use crate::peer::*; use hbb_common::{ bytes::Bytes, bytes_codec::BytesCodec, - protobuf::MessageField, rendezvous_proto::*, tcp::Encrypt, tokio::{ @@ -22,8 +21,6 @@ use hbb_common::{ sync::{mpsc, Mutex}, }, tokio_util::codec::Framed, - udp::FramedSocket, - ResultType, }; use ipnetwork::Ipv4Network; use sodiumoxide::crypto::sign; diff --git a/src/rendezvous_server/punch_hole.rs b/src/rendezvous_server/punch_hole.rs index 1b66caf..a2bfce7 100644 --- a/src/rendezvous_server/punch_hole.rs +++ b/src/rendezvous_server/punch_hole.rs @@ -1,6 +1,5 @@ use super::*; -use crate::common::*; -use crate::peer::*; + use hbb_common::bytes::BytesMut; use hbb_common::{ log, rendezvous_proto::*, tcp::FramedStream, try_into_v4, udp::FramedSocket, AddrMangle, diff --git a/src/rendezvous_server/register.rs b/src/rendezvous_server/register.rs index 1a7834e..9a0f4f1 100644 --- a/src/rendezvous_server/register.rs +++ b/src/rendezvous_server/register.rs @@ -1,5 +1,5 @@ use super::*; -use crate::common::*; + use crate::peer::*; use hbb_common::{ log, diff --git a/src/rendezvous_server/relay.rs b/src/rendezvous_server/relay.rs index 5639c28..4555825 100644 --- a/src/rendezvous_server/relay.rs +++ b/src/rendezvous_server/relay.rs @@ -4,7 +4,7 @@ use hbb_common::{ config, futures::future::join_all, log, - rendezvous_proto::*, + tcp::FramedStream, tokio::sync::Mutex, }; diff --git a/src/rendezvous_server/server.rs b/src/rendezvous_server/server.rs index 51b0d4b..83e47dd 100644 --- a/src/rendezvous_server/server.rs +++ b/src/rendezvous_server/server.rs @@ -2,10 +2,8 @@ use super::*; use crate::common::*; use crate::peer::*; use hbb_common::{ - allow_err, config, - futures_util::stream::StreamExt, + allow_err, log, - rendezvous_proto::*, tokio::{ self, net::TcpListener, diff --git a/src/rendezvous_server/sink.rs b/src/rendezvous_server/sink.rs index 3e2ce7c..e85c787 100644 --- a/src/rendezvous_server/sink.rs +++ b/src/rendezvous_server/sink.rs @@ -1,5 +1,5 @@ use super::*; -use crate::common::*; + use hbb_common::{ allow_err, bytes::Bytes, diff --git a/src/rendezvous_server/tcp_handler.rs b/src/rendezvous_server/tcp_handler.rs index 1e8c45d..5e559a0 100644 --- a/src/rendezvous_server/tcp_handler.rs +++ b/src/rendezvous_server/tcp_handler.rs @@ -1,6 +1,4 @@ use super::*; -use crate::common::*; -use crate::peer::*; use hbb_common::tokio::sync::Mutex; use hbb_common::{ allow_err, diff --git a/src/rendezvous_server/udp_handler.rs b/src/rendezvous_server/udp_handler.rs index 4a8431e..81dcda9 100644 --- a/src/rendezvous_server/udp_handler.rs +++ b/src/rendezvous_server/udp_handler.rs @@ -1,6 +1,5 @@ use super::*; use crate::common::*; -use crate::peer::*; use hbb_common::bytes::BytesMut; use hbb_common::{ log, protobuf::Message as _, rendezvous_proto::*, try_into_v4, udp::FramedSocket, ResultType, @@ -16,7 +15,7 @@ impl RendezvousServer { bytes: &BytesMut, addr: SocketAddr, socket: &mut FramedSocket, - key: &str, + _key: &str, ) -> ResultType<()> { if crate::management::is_banned("", &try_into_v4(addr).ip().to_string()) { return Ok(()); From dc34db8b4a479f8f19b6f28cbef79725493018b0 Mon Sep 17 00:00:00 2001 From: hashbk Date: Sun, 11 Oct 2026 16:03:32 +0800 Subject: [PATCH 4/4] fix: apply ban checks to IceCandidate forwarding Add IceCandidate ID to the target-id ban check in handle_tcp, and check the resolved target IP in handle_ice_candidate before forwarding. This closes a gap where a banned peer could still exchange WebRTC ICE candidates through the rendezvous server. --- src/rendezvous_server/tcp_handler.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rendezvous_server/tcp_handler.rs b/src/rendezvous_server/tcp_handler.rs index 5e559a0..61b565b 100644 --- a/src/rendezvous_server/tcp_handler.rs +++ b/src/rendezvous_server/tcp_handler.rs @@ -39,6 +39,7 @@ impl RendezvousServer { Some(rendezvous_message::Union::PunchHoleSent(v)) => v.id.as_str(), Some(rendezvous_message::Union::LocalAddr(v)) => v.id.as_str(), Some(rendezvous_message::Union::RelayResponse(v)) => v.id(), + Some(rendezvous_message::Union::IceCandidate(v)) => v.id.as_str(), _ => "", }; if crate::management::is_banned(target_id, "") { @@ -351,6 +352,9 @@ impl RendezvousServer { let Some(target_addr) = target_addr else { return; }; + if crate::management::is_banned("", &try_into_v4(target_addr).ip().to_string()) { + return; + } let msg_out = { let mut m = RendezvousMessage::new(); m.set_ice_candidate(IceCandidate {