diff --git a/Cargo.lock b/Cargo.lock index 8b46c0fc7..aa18fb9ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -763,9 +763,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" dependencies = [ "serde 1.0.190", ] @@ -1101,7 +1101,7 @@ dependencies = [ [[package]] name = "confy" version = "0.4.0-2" -source = "git+https://github.com/open-trade/confy#7855cd3c32b1a60b44e5076ee8f6b4131da10350" +source = "git+https://github.com/rustdesk-org/confy#83db9ec19a2f97e9718aef69e4fc5611bb382479" dependencies = [ "directories-next", "serde 1.0.190", @@ -2092,7 +2092,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ - "spin 0.9.8", + "spin", ] [[package]] @@ -2903,7 +2903,6 @@ dependencies = [ "osascript", "protobuf", "protobuf-codegen", - "quinn", "rand 0.8.5", "regex", "rustls-pki-types", @@ -2918,7 +2917,7 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls 0.26.0", - "tokio-socks 0.5.1-2", + "tokio-socks 0.5.2", "tokio-util", "toml 0.7.8", "url", @@ -3764,15 +3763,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "miow" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" -dependencies = [ - "windows-sys 0.48.0", -] - [[package]] name = "mouce" version = "0.2.1" @@ -4394,12 +4384,11 @@ dependencies = [ [[package]] name = "parity-tokio-ipc" version = "0.7.3-3" -source = "git+https://github.com/rustdesk-org/parity-tokio-ipc#f2d1fcf8fb002335d9a62bec308559d40698694d" +source = "git+https://github.com/rustdesk-org/parity-tokio-ipc#e8448ade10d6d972d0b2307646424b36ab202ff5" dependencies = [ "futures", "libc", "log", - "miow", "rand 0.8.5", "tokio", "winapi 0.3.9", @@ -4822,56 +4811,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "quinn" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8b432585672228923edbbf64b8b12c14e1112f62e88737655b4a083dbcd78e" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls 0.20.9", - "thiserror", - "tokio", - "tracing", - "webpki", -] - -[[package]] -name = "quinn-proto" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" -dependencies = [ - "bytes", - "rand 0.8.5", - "ring 0.16.20", - "rustc-hash", - "rustls 0.20.9", - "rustls-native-certs 0.6.3", - "slab", - "thiserror", - "tinyvec", - "tracing", - "webpki", -] - -[[package]] -name = "quinn-udp" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4" -dependencies = [ - "libc", - "quinn-proto", - "socket2 0.4.10", - "tracing", - "windows-sys 0.42.0", -] - [[package]] name = "quote" version = "0.6.13" @@ -5230,21 +5169,6 @@ dependencies = [ "winreg 0.50.0", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi 0.3.9", -] - [[package]] name = "ring" version = "0.17.5" @@ -5254,8 +5178,8 @@ dependencies = [ "cc", "getrandom", "libc", - "spin 0.9.8", - "untrusted 0.9.0", + "spin", + "untrusted", "windows-sys 0.48.0", ] @@ -5513,17 +5437,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "rustls" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" -dependencies = [ - "ring 0.16.20", - "sct", - "webpki", -] - [[package]] name = "rustls" version = "0.21.10" @@ -5531,7 +5444,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring 0.17.5", + "ring", "rustls-webpki 0.101.7", "sct", ] @@ -5544,7 +5457,7 @@ checksum = "8c4d6d8ad9f2492485e13453acbb291dd08f64441b6609c491f1c2cd2c6b4fe1" dependencies = [ "log", "once_cell", - "ring 0.17.5", + "ring", "rustls-pki-types", "rustls-webpki 0.102.2", "subtle", @@ -5634,8 +5547,8 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.5", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] @@ -5644,9 +5557,9 @@ version = "0.102.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" dependencies = [ - "ring 0.17.5", + "ring", "rustls-pki-types", - "untrusted 0.9.0", + "untrusted", ] [[package]] @@ -5755,8 +5668,8 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.5", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] @@ -6015,12 +5928,6 @@ dependencies = [ "serde 1.0.190", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -6452,9 +6359,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.36.0" +version = "1.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" dependencies = [ "backtrace", "bytes", @@ -6513,8 +6420,20 @@ dependencies = [ [[package]] name = "tokio-socks" -version = "0.5.1-2" -source = "git+https://github.com/open-trade/tokio-socks#14a5c2564fa20a2765ea53d03c573ee2b7e20421" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +dependencies = [ + "either", + "futures-util", + "thiserror", + "tokio", +] + +[[package]] +name = "tokio-socks" +version = "0.5.2" +source = "git+https://github.com/rustdesk-org/tokio-socks#51037c93f8be34196fd2b6de9f674e8dfae3d01e" dependencies = [ "bytes", "either", @@ -6527,18 +6446,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "tokio-socks" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" -dependencies = [ - "either", - "futures-util", - "thiserror", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.10" @@ -6849,12 +6756,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -7188,16 +7089,6 @@ dependencies = [ "cc", ] -[[package]] -name = "webpki" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" -dependencies = [ - "ring 0.17.5", - "untrusted 0.9.0", -] - [[package]] name = "webpki-roots" version = "0.25.4" @@ -7435,21 +7326,6 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-sys" version = "0.45.0" diff --git a/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml index 16bf3f69f..e0a97e61b 100644 --- a/libs/hbb_common/Cargo.toml +++ b/libs/hbb_common/Cargo.toml @@ -9,15 +9,14 @@ edition = "2018" [dependencies] flexi_logger = { version = "0.27", features = ["async"] } protobuf = { version = "3.4", features = ["with-bytes"] } -tokio = { version = "1.36", features = ["full"] } +tokio = { version = "1.37", features = ["full"] } tokio-util = { version = "0.7", features = ["full"] } futures = "0.3" -bytes = { version = "1.4", features = ["serde"] } +bytes = { version = "1.6", features = ["serde"] } log = "0.4" env_logger = "0.10" socket2 = { version = "0.3", features = ["reuseport"] } zstd = "0.13" -quinn = {version = "0.9", optional = true } anyhow = "1.0" futures-util = "0.3" directories-next = "2.0" @@ -26,12 +25,12 @@ serde_derive = "1.0" serde = "1.0" serde_json = "1.0" lazy_static = "1.4" -confy = { git = "https://github.com/open-trade/confy" } +confy = { git = "https://github.com/rustdesk-org/confy" } dirs-next = "2.0" filetime = "0.2" sodiumoxide = "0.2" regex = "1.8" -tokio-socks = { git = "https://github.com/open-trade/tokio-socks" } +tokio-socks = { git = "https://github.com/rustdesk-org/tokio-socks" } chrono = "0.4" backtrace = "0.3" libc = "0.2" @@ -55,9 +54,6 @@ rustls-pki-types = "1.4" [target.'cfg(any(target_os = "macos", target_os = "windows"))'.dependencies] tokio-native-tls ="0.3" -[features] -quic = [] - [build-dependencies] protobuf-codegen = { version = "3.4" } diff --git a/libs/hbb_common/src/lib.rs b/libs/hbb_common/src/lib.rs index 57d38db09..11b791c91 100644 --- a/libs/hbb_common/src/lib.rs +++ b/libs/hbb_common/src/lib.rs @@ -23,8 +23,6 @@ pub mod udp; pub use env_logger; pub use log; pub mod bytes_codec; -#[cfg(feature = "quic")] -pub mod quic; pub use anyhow::{self, bail}; pub use futures_util; pub mod config; @@ -55,9 +53,6 @@ pub use uuid; pub use base64; pub use thiserror; -#[cfg(feature = "quic")] -pub type Stream = quic::Connection; -#[cfg(not(feature = "quic"))] pub type Stream = tcp::FramedStream; pub type SessionID = uuid::Uuid; diff --git a/libs/hbb_common/src/quic.rs b/libs/hbb_common/src/quic.rs deleted file mode 100644 index ada2acd63..000000000 --- a/libs/hbb_common/src/quic.rs +++ /dev/null @@ -1,135 +0,0 @@ -use crate::{allow_err, anyhow::anyhow, ResultType}; -use protobuf::Message; -use std::{net::SocketAddr, sync::Arc}; -use tokio::{self, stream::StreamExt, sync::mpsc}; - -const QUIC_HBB: &[&[u8]] = &[b"hbb"]; -const SERVER_NAME: &str = "hbb"; - -type Sender = mpsc::UnboundedSender; -type Receiver = mpsc::UnboundedReceiver; - -pub fn new_server(socket: std::net::UdpSocket) -> ResultType<(Server, SocketAddr)> { - let mut transport_config = quinn::TransportConfig::default(); - transport_config.stream_window_uni(0); - let mut server_config = quinn::ServerConfig::default(); - server_config.transport = Arc::new(transport_config); - let mut server_config = quinn::ServerConfigBuilder::new(server_config); - server_config.protocols(QUIC_HBB); - // server_config.enable_keylog(); - // server_config.use_stateless_retry(true); - let mut endpoint = quinn::Endpoint::builder(); - endpoint.listen(server_config.build()); - let (end, incoming) = endpoint.with_socket(socket)?; - Ok((Server { incoming }, end.local_addr()?)) -} - -pub async fn new_client(local_addr: &SocketAddr, peer: &SocketAddr) -> ResultType { - let mut endpoint = quinn::Endpoint::builder(); - let mut client_config = quinn::ClientConfigBuilder::default(); - client_config.protocols(QUIC_HBB); - //client_config.enable_keylog(); - endpoint.default_client_config(client_config.build()); - let (endpoint, _) = endpoint.bind(local_addr)?; - let new_conn = endpoint.connect(peer, SERVER_NAME)?.await?; - Connection::new_for_client(new_conn.connection).await -} - -pub struct Server { - incoming: quinn::Incoming, -} - -impl Server { - #[inline] - pub async fn next(&mut self) -> ResultType> { - Connection::new_for_server(&mut self.incoming).await - } -} - -pub struct Connection { - conn: quinn::Connection, - tx: quinn::SendStream, - rx: Receiver, -} - -type Value = ResultType>; - -impl Connection { - async fn new_for_server(incoming: &mut quinn::Incoming) -> ResultType> { - if let Some(conn) = incoming.next().await { - let quinn::NewConnection { - connection: conn, - // uni_streams, - mut bi_streams, - .. - } = conn.await?; - let (tx, rx) = mpsc::unbounded_channel::(); - tokio::spawn(async move { - loop { - let stream = bi_streams.next().await; - if let Some(stream) = stream { - let stream = match stream { - Err(e) => { - tx.send(Err(e.into())).ok(); - break; - } - Ok(s) => s, - }; - let cloned = tx.clone(); - tokio::spawn(async move { - allow_err!(handle_request(stream.1, cloned).await); - }); - } else { - tx.send(Err(anyhow!("Reset by the peer"))).ok(); - break; - } - } - log::info!("Exit connection outer loop"); - }); - let tx = conn.open_uni().await?; - Ok(Some(Self { conn, tx, rx })) - } else { - Ok(None) - } - } - - async fn new_for_client(conn: quinn::Connection) -> ResultType { - let (tx, rx_quic) = conn.open_bi().await?; - let (tx_mpsc, rx) = mpsc::unbounded_channel::(); - tokio::spawn(async move { - allow_err!(handle_request(rx_quic, tx_mpsc).await); - }); - Ok(Self { conn, tx, rx }) - } - - #[inline] - pub async fn next(&mut self) -> Option { - // None is returned when all Sender halves have dropped, - // indicating that no further values can be sent on the channel. - self.rx.recv().await - } - - #[inline] - pub fn remote_address(&self) -> SocketAddr { - self.conn.remote_address() - } - - #[inline] - pub async fn send_raw(&mut self, bytes: &[u8]) -> ResultType<()> { - self.tx.write_all(bytes).await?; - Ok(()) - } - - #[inline] - pub async fn send(&mut self, msg: &dyn Message) -> ResultType<()> { - match msg.write_to_bytes() { - Ok(bytes) => self.send_raw(&bytes).await?, - err => allow_err!(err), - } - Ok(()) - } -} - -async fn handle_request(rx: quinn::RecvStream, tx: Sender) -> ResultType<()> { - Ok(()) -}