mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-08 05:20:59 +03:00
fix: non-E2EE show dialog (#15514)
* fix: non-E2EE show dialog Signed-off-by: fufesou <linlong1266@gmail.com> * fix: build web, bridge Signed-off-by: fufesou <linlong1266@gmail.com> * fix: direct IP access, do not snow non-E2EE dialog Signed-off-by: fufesou <linlong1266@gmail.com> * fix: non E2EE dialog, update contents Signed-off-by: fufesou <linlong1266@gmail.com> * fix: non-E2EE, show dialog, port forward Signed-off-by: fufesou <linlong1266@gmail.com> * fix: non-E2EE dialog, port forward, ignore direct IP access Signed-off-by: fufesou <linlong1266@gmail.com> * fix: non-E2EE is_direct_ip_access() Signed-off-by: fufesou <linlong1266@gmail.com> * Simple refactor Signed-off-by: fufesou <linlong1266@gmail.com> * fix: non-E2EE dialog, port forward, close socket on disconnect Signed-off-by: fufesou <linlong1266@gmail.com> * fix: non-E2EE dialog, incorrect reuse of Data::Close Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
@@ -14,6 +14,7 @@ use crate::{
|
||||
// Empirical no-data window before exposing the restart reconnect state to the UI.
|
||||
// Restart msgbox text is kept as a legacy UI fallback; Flutter handles the type as a control event.
|
||||
const RESTART_REMOTE_DEVICE_NO_DATA_TIMEOUT: Duration = Duration::from_secs(5);
|
||||
const KCP_CLOSE_REASON_FLUSH_DELAY: Duration = Duration::from_millis(30);
|
||||
#[cfg(feature = "unix-file-copy-paste")]
|
||||
use crate::{clipboard::try_empty_clipboard_files, clipboard_file::unix_file_clip};
|
||||
#[cfg(any(
|
||||
@@ -183,8 +184,20 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
.lock()
|
||||
.unwrap()
|
||||
.set_connected();
|
||||
let is_secured = peer.is_secured();
|
||||
self.handler
|
||||
.set_connection_type(peer.is_secured(), direct, stream_type); // flutter -> connection_ready
|
||||
.set_connection_type(is_secured, direct, stream_type); // flutter -> connection_ready
|
||||
if !is_secured
|
||||
&& !crate::common::is_direct_ip_access(&self.handler.get_id())
|
||||
&& !client::confirm_insecure_connection(&self.handler, &mut self.receiver).await
|
||||
{
|
||||
self.send_close_reason(&mut peer, "").await;
|
||||
if kcp.is_some() {
|
||||
tokio::time::sleep(KCP_CLOSE_REASON_FLUSH_DELAY).await;
|
||||
}
|
||||
self.handle_disconnected(round);
|
||||
return;
|
||||
}
|
||||
self.handler.update_direct(Some(direct));
|
||||
if conn_type == ConnType::DEFAULT_CONN || conn_type == ConnType::VIEW_CAMERA {
|
||||
self.handler
|
||||
@@ -338,13 +351,17 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
self.send_close_reason(&mut peer, "kcp").await;
|
||||
// KCP does not send messages immediately, so wait to ensure the last message is sent.
|
||||
// 1ms works in my test, but 30ms is more reliable.
|
||||
tokio::time::sleep(Duration::from_millis(30)).await;
|
||||
tokio::time::sleep(KCP_CLOSE_REASON_FLUSH_DELAY).await;
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
self.handler.on_establish_connection_error(err.to_string());
|
||||
}
|
||||
}
|
||||
self.handle_disconnected(round);
|
||||
}
|
||||
|
||||
fn handle_disconnected(&self, round: u32) {
|
||||
// set_disconnected_ok is used to check if new connection round is started.
|
||||
let _set_disconnected_ok = self
|
||||
.handler
|
||||
|
||||
Reference in New Issue
Block a user