diff --git a/src/connect.rs b/src/connect.rs index 90071bcef..770abcf92 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,9 @@ 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: {:?}", self.id, Vectored { bufs, nwritten }); + Poll::Ready(Ok(nwritten)) } Poll::Ready(Err(e)) => Poll::Ready(Err(e)), Poll::Pending => Poll::Pending, @@ -966,6 +963,27 @@ 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")]