feat(ssl): redesign SSL usage
BREAKING CHANGE: Server::https was changed to allow any implementation of Ssl. Server in general was also changed. HttpConnector no longer uses SSL; using HttpsConnector instead.
This commit is contained in:
		| @@ -65,7 +65,7 @@ use url::ParseError as UrlError; | ||||
| use header::{Headers, Header, HeaderFormat}; | ||||
| use header::{ContentLength, Location}; | ||||
| use method::Method; | ||||
| use net::{NetworkConnector, NetworkStream, ContextVerifier}; | ||||
| use net::{NetworkConnector, NetworkStream}; | ||||
| use {Url}; | ||||
| use Error; | ||||
|  | ||||
| @@ -116,11 +116,6 @@ impl Client { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Set the SSL verifier callback for use with OpenSSL. | ||||
|     pub fn set_ssl_verifier(&mut self, verifier: ContextVerifier) { | ||||
|         self.protocol.set_ssl_verifier(verifier); | ||||
|     } | ||||
|  | ||||
|     /// Set the RedirectPolicy. | ||||
|     pub fn set_redirect_policy(&mut self, policy: RedirectPolicy) { | ||||
|         self.redirect_policy = policy; | ||||
| @@ -417,8 +412,6 @@ mod tests { | ||||
|     use header::Server; | ||||
|     use super::{Client, RedirectPolicy}; | ||||
|     use url::Url; | ||||
|     use mock::ChannelMockConnector; | ||||
|     use std::sync::mpsc::{self, TryRecvError}; | ||||
|  | ||||
|     mock_connector!(MockRedirectPolicy { | ||||
|         "http://127.0.0.1" =>       "HTTP/1.1 301 Redirect\r\n\ | ||||
| @@ -464,31 +457,4 @@ mod tests { | ||||
|         let res = client.get("http://127.0.0.1").send().unwrap(); | ||||
|         assert_eq!(res.headers.get(), Some(&Server("mock2".to_owned()))); | ||||
|     } | ||||
|  | ||||
|     /// Tests that the `Client::set_ssl_verifier` method does not drop the | ||||
|     /// old connector, but rather delegates the change to the connector itself. | ||||
|     #[test] | ||||
|     fn test_client_set_ssl_verifer() { | ||||
|         let (tx, rx) = mpsc::channel(); | ||||
|         let mut client = Client::with_connector(ChannelMockConnector::new(tx)); | ||||
|  | ||||
|         client.set_ssl_verifier(Box::new(|_| {})); | ||||
|  | ||||
|         // Make sure that the client called the `set_ssl_verifier` method | ||||
|         match rx.try_recv() { | ||||
|             Ok(meth) => { | ||||
|                 assert_eq!(meth, "set_ssl_verifier"); | ||||
|             }, | ||||
|             _ => panic!("Expected a call to `set_ssl_verifier`"), | ||||
|         }; | ||||
|         // Now make sure that no other method was called, as well as that | ||||
|         // the connector is still alive (i.e. wasn't dropped by the client). | ||||
|         match rx.try_recv() { | ||||
|             Err(TryRecvError::Empty) => {}, | ||||
|             Err(TryRecvError::Disconnected) => { | ||||
|                 panic!("Expected the connector to still be alive."); | ||||
|             }, | ||||
|             Ok(_) => panic!("Did not expect any more method calls."), | ||||
|         }; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ use std::io::{self, Read, Write}; | ||||
| use std::net::{SocketAddr, Shutdown}; | ||||
| use std::sync::{Arc, Mutex}; | ||||
|  | ||||
| use net::{NetworkConnector, NetworkStream, HttpConnector, ContextVerifier}; | ||||
| use net::{NetworkConnector, NetworkStream, DefaultConnector}; | ||||
|  | ||||
| /// The `NetworkConnector` that behaves as a connection pool used by hyper's `Client`. | ||||
| pub struct Pool<C: NetworkConnector> { | ||||
| @@ -58,11 +58,11 @@ impl<'a> From<&'a str> for Scheme { | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl Pool<HttpConnector> { | ||||
|     /// Creates a `Pool` with an `HttpConnector`. | ||||
| impl Pool<DefaultConnector> { | ||||
|     /// Creates a `Pool` with a `DefaultConnector`. | ||||
|     #[inline] | ||||
|     pub fn new(config: Config) -> Pool<HttpConnector> { | ||||
|         Pool::with_connector(config, HttpConnector(None)) | ||||
|     pub fn new(config: Config) -> Pool<DefaultConnector> { | ||||
|         Pool::with_connector(config, DefaultConnector::default()) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -119,10 +119,6 @@ impl<C: NetworkConnector<Stream=S>, S: NetworkStream + Send> NetworkConnector fo | ||||
|             pool: self.inner.clone() | ||||
|         }) | ||||
|     } | ||||
|     #[inline] | ||||
|     fn set_ssl_verifier(&mut self, verifier: ContextVerifier) { | ||||
|         self.connector.set_ssl_verifier(verifier); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// A Stream that will try to be returned to the Pool when dropped. | ||||
| @@ -181,9 +177,8 @@ impl<S> Drop for PooledStream<S> { | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|     use std::net::Shutdown; | ||||
|     use mock::{MockConnector, ChannelMockConnector}; | ||||
|     use mock::{MockConnector}; | ||||
|     use net::{NetworkConnector, NetworkStream}; | ||||
|     use std::sync::mpsc; | ||||
|  | ||||
|     use super::{Pool, key}; | ||||
|  | ||||
| @@ -220,20 +215,4 @@ mod tests { | ||||
|         let locked = pool.inner.lock().unwrap(); | ||||
|         assert_eq!(locked.conns.len(), 0); | ||||
|     } | ||||
|  | ||||
|     /// Tests that the `Pool::set_ssl_verifier` method sets the SSL verifier of | ||||
|     /// the underlying `Connector` instance that it uses. | ||||
|     #[test] | ||||
|     fn test_set_ssl_verifier_delegates_to_connector() { | ||||
|         let (tx, rx) = mpsc::channel(); | ||||
|         let mut pool = Pool::with_connector( | ||||
|             Default::default(), ChannelMockConnector::new(tx)); | ||||
|  | ||||
|         pool.set_ssl_verifier(Box::new(|_| { })); | ||||
|  | ||||
|         match rx.try_recv() { | ||||
|             Ok(meth) => assert_eq!(meth, "set_ssl_verifier"), | ||||
|             _ => panic!("Expected a call to `set_ssl_verifier`"), | ||||
|         }; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ use url::Url; | ||||
| use method::{self, Method}; | ||||
| use header::Headers; | ||||
| use header::Host; | ||||
| use net::{NetworkStream, NetworkConnector, HttpConnector, Fresh, Streaming}; | ||||
| use net::{NetworkStream, NetworkConnector, DefaultConnector, Fresh, Streaming}; | ||||
| use version; | ||||
| use client::{Response, get_host_and_port}; | ||||
|  | ||||
| @@ -66,7 +66,7 @@ impl Request<Fresh> { | ||||
|  | ||||
|     /// Create a new client request. | ||||
|     pub fn new(method: method::Method, url: Url) -> ::Result<Request<Fresh>> { | ||||
|         let mut conn = HttpConnector(None); | ||||
|         let mut conn = DefaultConnector::default(); | ||||
|         Request::with_connector(method, url, &mut conn) | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user