@@ -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,9 +309,12 @@ 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 < ' v > ( pub Option < ContextVerifier < ' v > > ) ;
313
313
314
- impl NetworkConnector for HttpConnector {
314
+ /// A method that can set verification methods on an SSL context
315
+ pub type ContextVerifier < ' v > = Box < FnMut ( & mut SslContext ) -> ( ) +' v > ;
316
+
317
+ impl < ' v > NetworkConnector for HttpConnector < ' v > {
315
318
type Stream = HttpStream ;
316
319
317
320
fn connect ( & mut self , host : & str , port : Port , scheme : & str ) -> IoResult < 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 mut verifier) = self . 0 {
332
+ verifier ( & 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