Refresh reconnect send address and guard prebuilts
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:
+45
-14
@@ -2797,7 +2797,7 @@ async fn run_terminal(
|
||||
} else {
|
||||
Some(RawMode::enter()?)
|
||||
};
|
||||
let addr = resolve_addr(&cred.udp_host, cred.udp_port)?;
|
||||
let mut addr = resolve_addr(&cred.udp_host, cred.udp_port)?;
|
||||
let mut send_seq = 2u64;
|
||||
let mut last_packet_at = Instant::now();
|
||||
let mut status_tick = tokio::time::interval(Duration::from_secs(1));
|
||||
@@ -2989,6 +2989,7 @@ async fn run_terminal(
|
||||
)
|
||||
.await?
|
||||
{
|
||||
refresh_live_addr(&mut addr, &cred)?;
|
||||
if !forward_only {
|
||||
render_frame(&frame)?;
|
||||
predictor.observe_output(&frame.bytes);
|
||||
@@ -3060,6 +3061,7 @@ async fn run_terminal(
|
||||
)
|
||||
.await?
|
||||
{
|
||||
refresh_live_addr(&mut addr, &cred)?;
|
||||
if !forward_only {
|
||||
render_frame(&frame)?;
|
||||
predictor.observe_output(&frame.bytes);
|
||||
@@ -3164,6 +3166,7 @@ async fn run_terminal(
|
||||
)
|
||||
.await?
|
||||
{
|
||||
refresh_live_addr(&mut addr, &cred)?;
|
||||
if !forward_only {
|
||||
render_frame(&frame)?;
|
||||
predictor.observe_output(&frame.bytes);
|
||||
@@ -3534,6 +3537,7 @@ async fn run_terminal(
|
||||
)
|
||||
.await?
|
||||
{
|
||||
refresh_live_addr(&mut addr, &cred)?;
|
||||
if !forward_only {
|
||||
render_frame(&frame)?;
|
||||
predictor.observe_output(&frame.bytes);
|
||||
@@ -3826,6 +3830,11 @@ async fn reconnect(
|
||||
Ok(Some(frame))
|
||||
}
|
||||
|
||||
fn refresh_live_addr(addr: &mut SocketAddr, cred: &CachedCredential) -> Result<()> {
|
||||
*addr = resolve_addr(&cred.udp_host, cred.udp_port)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn queue_pending_user_input(
|
||||
pending: &mut VecDeque<Vec<u8>>,
|
||||
pending_bytes: &mut usize,
|
||||
@@ -5337,19 +5346,20 @@ const TERMINAL_CLEANUP: &[u8] = concat!(
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::{
|
||||
DisconnectStatus, DynamicForward, FrameBuffer, LocalForward, MAX_PENDING_USER_INPUT_BYTES,
|
||||
POST_SUBMIT_ALL_INPUT_HOLD, PredictMode, Predictor, RESTART_STATUS_SCRIPT, RemoteForward,
|
||||
STARTUP_INPUT_HOLD, SshConfig, StartupGateMode, StatusAction, auth_allows, cache_key,
|
||||
cache_server_prefix, clear_cached_credentials, ensure_tui_safe_status_overlay,
|
||||
input_matches_escape, is_local_status_target, latest_release_download_url,
|
||||
load_first_native_identity_with_prompt, parse_dynamic_forward, parse_escape_key,
|
||||
parse_local_forward, parse_remote_forward, parse_ssh_config, post_submit_hold_duration,
|
||||
queue_pending_user_input, raw_contains_host_table, recv_response_until,
|
||||
render_status_clear, render_status_overlay, requested_env, resolved_startup_command,
|
||||
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,
|
||||
toml_bare_key_or_quoted, update_check_requested, valid_forward_host,
|
||||
CachedCredential, DisconnectStatus, DynamicForward, FrameBuffer, LocalForward,
|
||||
MAX_PENDING_USER_INPUT_BYTES, POST_SUBMIT_ALL_INPUT_HOLD, PredictMode, Predictor,
|
||||
RESTART_STATUS_SCRIPT, RemoteForward, STARTUP_INPUT_HOLD, SshConfig, StartupGateMode,
|
||||
StatusAction, auth_allows, cache_key, cache_server_prefix, clear_cached_credentials,
|
||||
ensure_tui_safe_status_overlay, input_matches_escape, is_local_status_target,
|
||||
latest_release_download_url, load_first_native_identity_with_prompt, parse_dynamic_forward,
|
||||
parse_escape_key, parse_local_forward, parse_remote_forward, parse_ssh_config,
|
||||
post_submit_hold_duration, queue_pending_user_input, raw_contains_host_table,
|
||||
recv_response_until, refresh_live_addr, render_status_clear, render_status_overlay,
|
||||
requested_env, resolved_startup_command, 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, toml_bare_key_or_quoted,
|
||||
update_check_requested, valid_forward_host,
|
||||
};
|
||||
use dosh::config::{ClientConfig, CommandExtension, HostConfig};
|
||||
use dosh::native::EnvVar;
|
||||
@@ -6052,6 +6062,27 @@ mod tests {
|
||||
assert_eq!(post_submit_hold_duration(b"x"), POST_SUBMIT_ALL_INPUT_HOLD);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reconnect_refreshes_live_send_address_from_credentials() {
|
||||
let mut addr = "127.0.0.1:50000".parse().unwrap();
|
||||
let cred = CachedCredential {
|
||||
server: "host".to_string(),
|
||||
session: "term".to_string(),
|
||||
mode: "normal".to_string(),
|
||||
udp_host: "127.0.0.1".to_string(),
|
||||
udp_port: 50001,
|
||||
client_id: [1; 16],
|
||||
session_key: [2; 32],
|
||||
session_key_id: [3; 16],
|
||||
attach_ticket: Vec::new(),
|
||||
attach_ticket_psk: [4; 32],
|
||||
last_rendered_seq: 0,
|
||||
};
|
||||
|
||||
refresh_live_addr(&mut addr, &cred).unwrap();
|
||||
assert_eq!(addr.port(), 50001);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn update_check_accepts_only_check_flag() {
|
||||
assert!(!update_check_requested(&[]).unwrap());
|
||||
|
||||
Reference in New Issue
Block a user