From 6c545bc51dc69b46dd5e587b00570f21507714b3 Mon Sep 17 00:00:00 2001 From: anhcuky Date: Sat, 21 Jan 2023 23:49:39 +0700 Subject: [PATCH] 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")]