From a39599ad38a9ba3f7ed594c4c87db31c16908378 Mon Sep 17 00:00:00 2001 From: anhcuky Date: Sat, 21 Jan 2023 17:47:57 +0700 Subject: [PATCH 1/2] Fix Http request is logged when `connection_verbose` set --- src/connect.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/connect.rs b/src/connect.rs index 388a39bfd..90071bcef 100644 --- a/src/connect.rs +++ b/src/connect.rs @@ -905,7 +905,18 @@ mod verbose { cx: &mut Context<'_>, bufs: &[IoSlice<'_>], ) -> Poll> { - Pin::new(&mut self.inner).poll_write_vectored(cx, bufs) + match Pin::new(&mut self.inner).poll_write_vectored(cx, bufs) { + Poll::Ready(Ok(n)) => { + let buf = bufs + .iter() + .find(|b| !b.is_empty()) + .map_or(&[][..], |b| &**b); + log::trace!("{:08x} write: {:?}", self.id, Escape(&buf[..n])); + Poll::Ready(Ok(n)) + } + Poll::Ready(Err(e)) => Poll::Ready(Err(e)), + Poll::Pending => Poll::Pending, + } } fn is_write_vectored(&self) -> bool { From 6c545bc51dc69b46dd5e587b00570f21507714b3 Mon Sep 17 00:00:00 2001 From: anhcuky Date: Sat, 21 Jan 2023 23:49:39 +0700 Subject: [PATCH 2/2] Log from all buffers --- src/connect.rs | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/connect.rs b/src/connect.rs index 90071bcef..b80ffc767 100644 --- a/src/connect.rs +++ b/src/connect.rs @@ -831,6 +831,7 @@ mod socks { mod verbose { use hyper::client::connect::{Connected, Connection}; + use std::cmp::min; use std::fmt; use std::io::{self, IoSlice}; use std::pin::Pin; @@ -906,13 +907,13 @@ mod verbose { bufs: &[IoSlice<'_>], ) -> Poll> { match Pin::new(&mut self.inner).poll_write_vectored(cx, bufs) { - Poll::Ready(Ok(n)) => { - let buf = bufs - .iter() - .find(|b| !b.is_empty()) - .map_or(&[][..], |b| &**b); - log::trace!("{:08x} write: {:?}", self.id, Escape(&buf[..n])); - Poll::Ready(Ok(n)) + Poll::Ready(Ok(nwritten)) => { + log::trace!( + "{:08x} write (vectored): {:?}", + self.id, + Vectored { bufs, nwritten } + ); + Poll::Ready(Ok(nwritten)) } Poll::Ready(Err(e)) => Poll::Ready(Err(e)), Poll::Pending => Poll::Pending, @@ -966,6 +967,26 @@ mod verbose { Ok(()) } } + + struct Vectored<'a, 'b> { + bufs: &'a [IoSlice<'b>], + nwritten: usize, + } + + impl fmt::Debug for Vectored<'_, '_> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let mut left = self.nwritten; + for buf in self.bufs.iter() { + if left == 0 { + break; + } + let n = min(left, buf.len()); + Escape(&buf[..n]).fmt(f)?; + left -= n; + } + Ok(()) + } + } } #[cfg(feature = "__tls")]