From 2c5b3258b3939e7a3808c385e9db7ed68fc7a6c4 Mon Sep 17 00:00:00 2001 From: Alex Emmet <111742636+Alex-Emmet@users.noreply.github.com> Date: Sat, 27 Jun 2026 00:54:04 +0200 Subject: [PATCH] Debug --- Cargo.lock | 1 + host/Cargo.toml | 1 + host/src/lib.rs | 35 +++++++++++++++++++++++++++++++---- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7352382..4283ec3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1036,6 +1036,7 @@ dependencies = [ name = "mtp-host" version = "0.1.0" dependencies = [ + "log", "mtp-codec", "mtp-common", "mtp-crypto", diff --git a/host/Cargo.toml b/host/Cargo.toml index 482b9f4..9e3d9f0 100644 --- a/host/Cargo.toml +++ b/host/Cargo.toml @@ -10,6 +10,7 @@ mtp-transport = { path = "../transport", features = ["host"] } mtp-crypto = { path = "../crypto", optional = true } tokio = { version = "1", features = ["full"] } rand = "0.8" +log = "0.4" [features] crypto = ["dep:mtp-crypto", "mtp-codec/crypto"] diff --git a/host/src/lib.rs b/host/src/lib.rs index 600443b..fb7b455 100644 --- a/host/src/lib.rs +++ b/host/src/lib.rs @@ -84,7 +84,13 @@ impl MTPHost { * incompatible. */ pub async fn accept(&mut self) -> Option { - let (sender, receiver) = self.transport.next().await?; + let (sender, receiver) = match self.transport.next().await { + Some(pair) => pair, + None => { + log::warn!("accept: transport.next() returned None (listener closed)"); + return None; + } + }; #[cfg(feature = "crypto")] if self.config.require_authentication { @@ -92,7 +98,13 @@ impl MTPHost { } // Read the first message (always encoded with reserved types). - let first_msg = receiver.receive().await.ok()?; + let first_msg = match receiver.receive().await { + Ok(m) => m, + Err(e) => { + log::warn!("accept: receive failed: {e:?}"); + return None; + } + }; /* * Extract the client's version from the first message. @@ -101,9 +113,24 @@ impl MTPHost { * * Then negotiate the version for single-version clients */ - let client_version = extract_version(&first_msg)?; + let client_version = match extract_version(&first_msg) { + Some(v) => v, + None => { + log::warn!( + "accept: extract_version failed on msg type {:?}", + first_msg.get_type() + ); + return None; + } + }; - let negotiated = self.registry.negotiate(&[client_version])?; + let negotiated = match self.registry.negotiate(&[client_version.clone()]) { + Some(v) => v, + None => { + log::warn!("accept: negotiate failed for client version {client_version:?}"); + return None; + } + }; let codec = VersionedCodec::new(self.registry.clone());