@@ -11,8 +11,8 @@ use std::raw::{self, TraitObject};
11
11
use std:: sync:: Arc ;
12
12
13
13
use 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 ;
16
16
use openssl:: ssl:: SslMethod :: Sslv23 ;
17
17
use openssl:: ssl:: error:: { SslError , StreamError , OpenSslErrors , SslSessionClosed } ;
18
18
use openssl:: x509:: X509FileType ;
@@ -309,7 +309,10 @@ impl NetworkStream for HttpStream {
309
309
310
310
/// A connector that will produce HttpStreams.
311
311
#[ 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 ) -> ( ) ;
313
316
314
317
impl NetworkConnector for HttpConnector {
315
318
type Stream = HttpStream ;
@@ -325,7 +328,9 @@ impl NetworkConnector for HttpConnector {
325
328
debug ! ( "https scheme" ) ;
326
329
let stream = try!( TcpStream :: connect ( addr) ) ;
327
330
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
+ }
329
334
let ssl = try!( Ssl :: new ( & context) . map_err ( lift_ssl_error) ) ;
330
335
try!( ssl. set_hostname ( host) . map_err ( lift_ssl_error) ) ;
331
336
let stream = try!( SslStream :: new ( & context, stream) . map_err ( lift_ssl_error) ) ;
0 commit comments