Flush queued input after reconnect contact
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / windows-client (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / windows-client (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
This commit is contained in:
+57
-5
@@ -4610,6 +4610,22 @@ async fn run_terminal(
|
||||
}
|
||||
PacketKind::Pong => {
|
||||
last_packet_at = Instant::now();
|
||||
if should_flush_terminal_input_after_contact(
|
||||
forward_only,
|
||||
&cred.mode,
|
||||
pending_user_input.is_empty(),
|
||||
) {
|
||||
flush_pending_user_input(
|
||||
&socket,
|
||||
addr,
|
||||
&cred,
|
||||
&mut send_seq,
|
||||
&mut predictor,
|
||||
&mut pending_user_input,
|
||||
&mut pending_user_input_bytes,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
PacketKind::Rekey => {
|
||||
// Server-initiated transport rekey (spec §11). The Rekey is
|
||||
@@ -5439,6 +5455,14 @@ fn should_hold_during_startup_gate(
|
||||
mode == StartupGateMode::HoldAll || already_queued || should_hold_post_submit_input(bytes)
|
||||
}
|
||||
|
||||
fn should_flush_terminal_input_after_contact(
|
||||
forward_only: bool,
|
||||
mode: &str,
|
||||
pending_empty: bool,
|
||||
) -> bool {
|
||||
!forward_only && !pending_empty && mode != "view-only" && mode != "forward-only"
|
||||
}
|
||||
|
||||
async fn flush_pending_user_input(
|
||||
socket: &UdpSocket,
|
||||
addr: SocketAddr,
|
||||
@@ -7095,11 +7119,11 @@ mod tests {
|
||||
release_tag_download_url, release_tag_from_effective_url, release_version_from_tag,
|
||||
render_status_clear, render_status_overlay, requested_env, resolved_startup_command,
|
||||
retransmit_stream_opens, rewrite_forward_command, selected_predict_mode, selected_udp_host,
|
||||
server_version_mismatch, should_hold_during_startup_gate, should_hold_post_submit_input,
|
||||
split_after_command_submit, ssh_destination_host, ssh_username, ssh_with_user,
|
||||
startup_command, status_ssh_target, strip_stale_mouse_reports, toml_bare_key_or_quoted,
|
||||
update_check_requested, update_version_status, upsert_managed_block, valid_forward_host,
|
||||
vscode_safe_alias,
|
||||
server_version_mismatch, should_flush_terminal_input_after_contact,
|
||||
should_hold_during_startup_gate, should_hold_post_submit_input, split_after_command_submit,
|
||||
ssh_destination_host, ssh_username, ssh_with_user, startup_command, status_ssh_target,
|
||||
strip_stale_mouse_reports, toml_bare_key_or_quoted, update_check_requested,
|
||||
update_version_status, upsert_managed_block, valid_forward_host, vscode_safe_alias,
|
||||
};
|
||||
use dosh::config::{ClientConfig, CommandExtension, HostConfig};
|
||||
use dosh::native::EnvVar;
|
||||
@@ -7879,6 +7903,34 @@ mod tests {
|
||||
assert_eq!(post_submit_hold_duration(b"x"), POST_SUBMIT_ALL_INPUT_HOLD);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn contact_flushes_pending_terminal_input_for_interactive_sessions() {
|
||||
assert!(should_flush_terminal_input_after_contact(
|
||||
false, "normal", false
|
||||
));
|
||||
assert!(should_flush_terminal_input_after_contact(
|
||||
false,
|
||||
"read-write",
|
||||
false
|
||||
));
|
||||
assert!(!should_flush_terminal_input_after_contact(
|
||||
false, "normal", true
|
||||
));
|
||||
assert!(!should_flush_terminal_input_after_contact(
|
||||
true, "normal", false
|
||||
));
|
||||
assert!(!should_flush_terminal_input_after_contact(
|
||||
false,
|
||||
"view-only",
|
||||
false
|
||||
));
|
||||
assert!(!should_flush_terminal_input_after_contact(
|
||||
false,
|
||||
"forward-only",
|
||||
false
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reconnect_refreshes_live_send_address_from_credentials() {
|
||||
let mut addr = "127.0.0.1:50000".parse().unwrap();
|
||||
|
||||
Reference in New Issue
Block a user