From ea238337c4e94462173f1d9f01cce56bebe27ac0 Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 4 Nov 2022 18:14:47 +0800 Subject: [PATCH 1/2] fix cm crash Signed-off-by: fufesou --- src/ui_cm_interface.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 5fb3c76fd..226228740 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -57,6 +57,7 @@ struct IpcTaskRunner { tx: mpsc::UnboundedSender, rx: mpsc::UnboundedReceiver, close: bool, + running: bool, conn_id: i32, #[cfg(windows)] file_transfer_enabled: bool, @@ -218,6 +219,7 @@ pub fn switch_permission(id: i32, name: String, enabled: bool) { }; } +#[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] #[inline] pub fn get_clients_state() -> String { let clients = CLIENTS.read().unwrap(); @@ -287,6 +289,7 @@ impl IpcTaskRunner { (_tx_clip, rx_clip) = unbounded_channel::(); } + self.running = false; loop { tokio::select! { res = self.stream.next() => { @@ -305,6 +308,7 @@ impl IpcTaskRunner { { self.file_transfer_enabled = _file_transfer_enabled; } + self.running = true; break; } Data::Close => { @@ -389,13 +393,13 @@ impl IpcTaskRunner { tx, rx, close: true, + running: true, conn_id: 0, #[cfg(windows)] file_transfer_enabled: false, }; - task_runner.run().await; - if task_runner.conn_id > 0 { + while task_runner.running { task_runner.run().await; } if task_runner.conn_id > 0 { From ede24bf2c41672e4158cdca2ac6949e2aae8f11e Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 4 Nov 2022 19:02:03 +0800 Subject: [PATCH 2/2] cm handle auth status Signed-off-by: fufesou --- src/ui_cm_interface.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 226228740..eb1b0e013 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -58,6 +58,7 @@ struct IpcTaskRunner { rx: mpsc::UnboundedReceiver, close: bool, running: bool, + authorized: bool, conn_id: i32, #[cfg(windows)] file_transfer_enabled: bool, @@ -275,7 +276,7 @@ impl IpcTaskRunner { let mut rx_clip; let _tx_clip; #[cfg(windows)] - if self.conn_id > 0 { + if self.conn_id > 0 && self.authorized { rx_clip1 = clipboard::get_rx_cliprdr_server(self.conn_id); rx_clip = rx_clip1.lock().await; } else { @@ -303,6 +304,7 @@ impl IpcTaskRunner { Data::Login{id, is_file_transfer, port_forward, peer_id, name, authorized, keyboard, clipboard, audio, file, file_transfer_enabled: _file_transfer_enabled, restart, recording} => { log::debug!("conn_id: {}", id); self.cm.add_connection(id, is_file_transfer, port_forward, peer_id, name, authorized, keyboard, clipboard, audio, file, restart, recording, self.tx.clone()); + self.authorized = authorized; self.conn_id = id; #[cfg(windows)] { @@ -394,6 +396,7 @@ impl IpcTaskRunner { rx, close: true, running: true, + authorized: false, conn_id: 0, #[cfg(windows)] file_transfer_enabled: false,