http_request/request/proxy/
impl.rs1use super::*;
2
3impl ProxyTunnelStream {
4 pub(crate) fn new(stream: BoxAsyncReadWrite, pre_read_data: Vec<u8>) -> Self {
5 Self {
6 inner: stream,
7 pre_read_data,
8 }
9 }
10}
11
12impl AsyncRead for ProxyTunnelStream {
13 fn poll_read(
14 mut self: Pin<&mut Self>,
15 cx: &mut Context<'_>,
16 buf: &mut ReadBuf<'_>,
17 ) -> Poll<std::io::Result<()>> {
18 if !self.pre_read_data.is_empty() {
19 let len: usize = std::cmp::min(self.pre_read_data.len(), buf.remaining());
20 buf.put_slice(&self.pre_read_data[..len]);
21 self.pre_read_data.drain(..len);
22 return Poll::Ready(Ok(()));
23 }
24 Pin::new(&mut self.inner).poll_read(cx, buf)
25 }
26}
27
28impl AsyncWrite for ProxyTunnelStream {
29 fn poll_write(
30 mut self: Pin<&mut Self>,
31 cx: &mut Context<'_>,
32 buf: &[u8],
33 ) -> Poll<Result<usize, std::io::Error>> {
34 Pin::new(&mut self.inner).poll_write(cx, buf)
35 }
36
37 fn poll_flush(
38 mut self: Pin<&mut Self>,
39 cx: &mut Context<'_>,
40 ) -> Poll<Result<(), std::io::Error>> {
41 Pin::new(&mut self.inner).poll_flush(cx)
42 }
43
44 fn poll_shutdown(
45 mut self: Pin<&mut Self>,
46 cx: &mut Context<'_>,
47 ) -> Poll<Result<(), std::io::Error>> {
48 Pin::new(&mut self.inner).poll_shutdown(cx)
49 }
50}
51
52impl Unpin for ProxyTunnelStream {}
53
54impl SyncProxyTunnelStream {
55 pub(crate) fn new(stream: BoxReadWrite, pre_read_data: Vec<u8>) -> Self {
56 Self {
57 inner: stream,
58 pre_read_data,
59 }
60 }
61}
62
63impl Read for SyncProxyTunnelStream {
64 fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
65 if !self.pre_read_data.is_empty() {
66 let len: usize = std::cmp::min(self.pre_read_data.len(), buf.len());
67 buf[..len].copy_from_slice(&self.pre_read_data[..len]);
68 self.pre_read_data.drain(..len);
69 return Ok(len);
70 }
71 self.inner.read(buf)
72 }
73}
74
75impl Write for SyncProxyTunnelStream {
76 fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
77 self.inner.write(buf)
78 }
79
80 fn flush(&mut self) -> std::io::Result<()> {
81 self.inner.flush()
82 }
83}