From f696771069b2a157cd1fe5db0b5e45e81131a7d4 Mon Sep 17 00:00:00 2001 From: Alexey Galakhov Date: Mon, 22 May 2017 23:45:50 +0200 Subject: [PATCH] Generalize connect() interface. Signed-off-by: Alexey Galakhov --- src/client.rs | 18 ++++++++++-------- src/handshake/client.rs | 9 +++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/client.rs b/src/client.rs index 83e0062..d0c0b52 100644 --- a/src/client.rs +++ b/src/client.rs @@ -73,11 +73,12 @@ use error::{Error, Result}; /// This function uses `native_tls` to do TLS. If you want to use other TLS libraries, /// use `client` instead. There is no need to enable the "tls" feature if you don't call /// `connect` since it's the only function that uses native_tls. -pub fn connect(url: Url) -> Result> { - let mode = url_mode(&url)?; - let addrs = url.to_socket_addrs()?; - let stream = connect_to_some(addrs, &url, mode)?; - client(url.clone(), stream) +pub fn connect<'t, Req: Into>>(request: Req) -> Result> { + let request: Request = request.into(); + let mode = url_mode(&request.url)?; + let addrs = request.url.to_socket_addrs()?; + let stream = connect_to_some(addrs, &request.url, mode)?; + client(request, stream) .map_err(|e| match e { HandshakeError::Failure(f) => f, HandshakeError::Interrupted(_) => panic!("Bug: blocking handshake not blocked"), @@ -116,9 +117,10 @@ pub fn url_mode(url: &Url) -> Result { /// Use this function if you need a nonblocking handshake support or if you /// want to use a custom stream like `mio::tcp::TcpStream` or `openssl::ssl::SslStream`. /// Any stream supporting `Read + Write` will do. -pub fn client(url: Url, stream: Stream) +pub fn client<'t, Stream, Req>(request: Req, stream: Stream) -> StdResult, HandshakeError> +where Stream: Read + Write, + Req: Into>, { - let request = Request { url: url, extra_headers: None }; - ClientHandshake::start(stream, request).handshake() + ClientHandshake::start(stream, request.into()).handshake() } diff --git a/src/handshake/client.rs b/src/handshake/client.rs index 157f309..9ef8e00 100644 --- a/src/handshake/client.rs +++ b/src/handshake/client.rs @@ -38,6 +38,15 @@ impl<'t> Request<'t> { } } +impl From for Request<'static> { + fn from(value: Url) -> Self { + Request { + url: value, + extra_headers: None, + } + } +} + /// Client handshake role. pub struct ClientHandshake { verify_data: VerifyData,