diff --git a/src/ssl/openssl.rs b/src/ssl/openssl.rs index 0355e5ef..b9458927 100644 --- a/src/ssl/openssl.rs +++ b/src/ssl/openssl.rs @@ -6,8 +6,8 @@ use tokio_io::{AsyncRead, AsyncWrite}; use tokio_openssl::{AcceptAsync, ConnectAsync, SslAcceptorExt, SslConnectorExt, SslStream}; use super::MAX_CONN_COUNTER; -use connector::Connect; use counter::{Counter, CounterGuard}; +use resolver::RequestHost; use service::{NewService, Service}; /// Support `SSL` connections via openssl package @@ -102,12 +102,12 @@ impl Future for OpensslAcceptorServiceFut { } /// Openssl connector factory -pub struct OpensslConnector { +pub struct OpensslConnector { connector: SslConnector, - _t: PhantomData<(T, E)>, + _t: PhantomData<(R, T, E)>, } -impl OpensslConnector { +impl OpensslConnector { pub fn new(connector: SslConnector) -> Self { OpensslConnector { connector, @@ -116,11 +116,10 @@ impl OpensslConnector { } } -impl OpensslConnector { +impl OpensslConnector { pub fn service( connector: SslConnector, - ) -> impl Service), Error = Error> - { + ) -> impl Service), Error = Error> { OpensslConnectorService { connector: connector, _t: PhantomData, @@ -128,7 +127,7 @@ impl OpensslConnector { } } -impl Clone for OpensslConnector { +impl Clone for OpensslConnector { fn clone(&self) -> Self { Self { connector: self.connector.clone(), @@ -137,11 +136,11 @@ impl Clone for OpensslConnector { } } -impl NewService for OpensslConnector { - type Request = (Connect, T); - type Response = (Connect, SslStream); +impl NewService for OpensslConnector { + type Request = (R, T); + type Response = (R, SslStream); type Error = Error; - type Service = OpensslConnectorService; + type Service = OpensslConnectorService; type InitError = E; type Future = FutureResult; @@ -153,16 +152,16 @@ impl NewService for OpensslConnector { } } -pub struct OpensslConnectorService { +pub struct OpensslConnectorService { connector: SslConnector, - _t: PhantomData, + _t: PhantomData<(R, T)>, } -impl Service for OpensslConnectorService { - type Request = (Connect, T); - type Response = (Connect, SslStream); +impl Service for OpensslConnectorService { + type Request = (R, T); + type Response = (R, SslStream); type Error = Error; - type Future = ConnectAsyncExt; + type Future = ConnectAsyncExt; fn poll_ready(&mut self) -> Poll<(), Self::Error> { Ok(Async::Ready(())) @@ -170,22 +169,23 @@ impl Service for OpensslConnectorService { fn call(&mut self, (req, stream): Self::Request) -> Self::Future { ConnectAsyncExt { - fut: SslConnectorExt::connect_async(&self.connector, &req.host, stream), + fut: SslConnectorExt::connect_async(&self.connector, req.host(), stream), req: Some(req), } } } -pub struct ConnectAsyncExt { +pub struct ConnectAsyncExt { + req: Option, fut: ConnectAsync, - req: Option, } -impl Future for ConnectAsyncExt +impl Future for ConnectAsyncExt where + R: RequestHost, T: AsyncRead + AsyncWrite, { - type Item = (Connect, SslStream); + type Item = (R, SslStream); type Error = Error; fn poll(&mut self) -> Poll {