separate out ConnectionPool
This commit is contained in:
@@ -3,12 +3,17 @@ use std::net::TcpStream;
|
||||
use std::net::ToSocketAddrs;
|
||||
use std::time::Duration;
|
||||
use std::io::Result as IoResult;
|
||||
use std::io::Write;
|
||||
use url::Url;
|
||||
use chunked_transfer;
|
||||
|
||||
#[cfg(feature = "tls")]
|
||||
use native_tls::TlsConnector;
|
||||
#[cfg(feature = "tls")]
|
||||
use native_tls::TlsStream;
|
||||
|
||||
const CHUNK_SIZE: usize = 1024 * 1024;
|
||||
|
||||
pub enum Stream {
|
||||
Http(TcpStream),
|
||||
#[cfg(feature = "tls")]
|
||||
@@ -131,3 +136,29 @@ fn connect_test(unit: &Unit) -> Result<Stream, Error> {
|
||||
fn connect_https(unit: &Unit) -> Result<Stream, Error> {
|
||||
Err(Error::UnknownScheme(unit.url.scheme().to_string()))
|
||||
}
|
||||
|
||||
fn send_body(body: SizedReader, do_chunk: bool, stream: &mut Stream) -> IoResult<()> {
|
||||
if do_chunk {
|
||||
pipe(body.reader, chunked_transfer::Encoder::new(stream))?;
|
||||
} else {
|
||||
pipe(body.reader, stream)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn pipe<R, W>(mut reader: R, mut writer: W) -> IoResult<()>
|
||||
where
|
||||
R: Read,
|
||||
W: Write,
|
||||
{
|
||||
let mut buf = [0_u8; CHUNK_SIZE];
|
||||
loop {
|
||||
let len = reader.read(&mut buf)?;
|
||||
if len == 0 {
|
||||
break;
|
||||
}
|
||||
writer.write_all(&buf[0..len])?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user