From c1ae8608aaa8eff0de0411d443b7d574d9835a10 Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Tue, 28 Jan 2025 16:04:58 +0000 Subject: [PATCH] core: include AP handshake in 5s timeout (#1458) * core: include AP handshake in 5s timeout * Update CHANGELOG.md --- CHANGELOG.md | 1 + core/src/connection/mod.rs | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 305bf5d5..e8db0b46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - [core] MSRV is now 1.81 (breaking) +- [core] AP connect and handshake have a combined 5 second timeout. - [connect] Replaced `ConnectConfig` with `ConnectStateConfig` (breaking) - [connect] Replaced `playing_track_index` field of `SpircLoadCommand` with `playing_track` (breaking) - [connect] Replaced Mercury usage in `Spirc` with Dealer diff --git a/core/src/connection/mod.rs b/core/src/connection/mod.rs index 6f2c7d44..ca89e87b 100644 --- a/core/src/connection/mod.rs +++ b/core/src/connection/mod.rs @@ -63,10 +63,13 @@ impl From for AuthenticationError { } pub async fn connect(host: &str, port: u16, proxy: Option<&Url>) -> io::Result { - const TIMEOUT: Duration = Duration::from_secs(3); - let socket = tokio::time::timeout(TIMEOUT, crate::socket::connect(host, port, proxy)).await??; - - handshake(socket).await + const TIMEOUT: Duration = Duration::from_secs(5); + tokio::time::timeout(TIMEOUT, { + let socket = crate::socket::connect(host, port, proxy).await?; + debug!("Connection to AP established."); + handshake(socket) + }) + .await? } pub async fn connect_with_retry( @@ -80,7 +83,7 @@ pub async fn connect_with_retry( match connect(host, port, proxy).await { Ok(f) => return Ok(f), Err(e) => { - debug!("Connection failed: {e}"); + debug!("Connection to \"{host}:{port}\" failed: {e}"); if num_retries < max_retries { num_retries += 1; debug!("Retry access point...");