@@ -11,8 +11,8 @@ use std::raw::{self, TraitObject};
1111use std:: sync:: Arc ;
1212
1313use uany:: UnsafeAnyExt ;
14- use openssl:: ssl:: { Ssl , SslStream , SslContext , VerifyCallback } ;
15- use openssl:: ssl:: SslVerifyMode :: { SslVerifyPeer , SslVerifyNone } ;
14+ use openssl:: ssl:: { Ssl , SslStream , SslContext } ;
15+ use openssl:: ssl:: SslVerifyMode :: SslVerifyNone ;
1616use openssl:: ssl:: SslMethod :: Sslv23 ;
1717use openssl:: ssl:: error:: { SslError , StreamError , OpenSslErrors , SslSessionClosed } ;
1818use openssl:: x509:: X509FileType ;
@@ -309,7 +309,10 @@ impl NetworkStream for HttpStream {
309309
310310/// A connector that will produce HttpStreams.
311311#[ allow( missing_copy_implementations) ]
312- pub struct HttpConnector ( pub Option < VerifyCallback > ) ;
312+ pub struct HttpConnector ( pub Option < ContextVerifier > ) ;
313+
314+ /// A method that can set verification methods on an SSL context
315+ pub type ContextVerifier = for <' a > fn ( & ' a mut SslContext ) -> ( ) ;
313316
314317impl NetworkConnector for HttpConnector {
315318 type Stream = HttpStream ;
@@ -325,7 +328,9 @@ impl NetworkConnector for HttpConnector {
325328 debug ! ( "https scheme" ) ;
326329 let stream = try!( TcpStream :: connect ( addr) ) ;
327330 let mut context = try!( SslContext :: new ( Sslv23 ) . map_err ( lift_ssl_error) ) ;
328- self . 0 . as_ref ( ) . map ( |cb| context. set_verify ( SslVerifyPeer , Some ( * cb) ) ) ;
331+ if let Some ( ref v) = self . 0 {
332+ v ( & mut context) ;
333+ }
329334 let ssl = try!( Ssl :: new ( & context) . map_err ( lift_ssl_error) ) ;
330335 try!( ssl. set_hostname ( host) . map_err ( lift_ssl_error) ) ;
331336 let stream = try!( SslStream :: new ( & context, stream) . map_err ( lift_ssl_error) ) ;
0 commit comments