Skip to content

Commit 5e560cb

Browse files
committed
Merge pull request #192 from hyperium/ssl-set-hostname
fix(ssl): set_hostname on ssl connections
2 parents 1d7ec47 + 3ac277b commit 5e560cb

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

benches/client_mock_tcp.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ impl net::NetworkStream for MockStream {
9595
struct MockConnector;
9696

9797
impl net::NetworkConnector<MockStream> for MockConnector {
98-
fn connect<To: ToSocketAddr>(&mut self, _addr: To, _scheme: &str) -> IoResult<MockStream> {
98+
fn connect(&mut self, _: &str, _: u16, _: &str) -> IoResult<MockStream> {
9999
Ok(MockStream::new())
100100
}
101101

src/client/request.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl Request<Fresh> {
6060
};
6161
debug!("port={}", port);
6262

63-
let stream: S = try!(connector.connect((host[], port), &*url.scheme));
63+
let stream: S = try!(connector.connect(host[], port, &*url.scheme));
6464
let stream = ThroughWriter(BufferedWriter::new(box stream as Box<NetworkStream + Send>));
6565

6666
let mut headers = Headers::new();

src/mock.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::fmt;
22
use std::io::{IoResult, MemReader, MemWriter};
3-
use std::io::net::ip::{SocketAddr, ToSocketAddr};
3+
use std::io::net::ip::SocketAddr;
44

55
use net::{NetworkStream, NetworkConnector};
66

@@ -69,7 +69,7 @@ impl NetworkStream for MockStream {
6969
pub struct MockConnector;
7070

7171
impl NetworkConnector<MockStream> for MockConnector {
72-
fn connect<To: ToSocketAddr>(&mut self, _addr: To, _scheme: &str) -> IoResult<MockStream> {
72+
fn connect(&mut self, _host: &str, _port: u16, _scheme: &str) -> IoResult<MockStream> {
7373
Ok(MockStream::new())
7474
}
7575
}

src/net.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ use std::fmt;
55
use std::intrinsics::TypeId;
66
use std::io::{IoResult, IoError, ConnectionAborted, InvalidInput, OtherIoError,
77
Stream, Listener, Acceptor};
8-
use std::io::net::ip::{SocketAddr, ToSocketAddr};
8+
use std::io::net::ip::{SocketAddr, ToSocketAddr, Port};
99
use std::io::net::tcp::{TcpStream, TcpListener, TcpAcceptor};
1010
use std::mem::{mod, transmute, transmute_copy};
1111
use std::raw::{mod, TraitObject};
1212

1313
use uany::UncheckedBoxAnyDowncast;
14-
use openssl::ssl::{SslStream, SslContext};
14+
use openssl::ssl::{SslStream, SslContext, Ssl};
1515
use openssl::ssl::SslMethod::Sslv23;
1616
use openssl::ssl::error::{SslError, StreamError, OpenSslErrors, SslSessionClosed};
1717

@@ -62,7 +62,7 @@ impl<T: NetworkStream + Send + Clone> StreamClone for T {
6262
/// A connector creates a NetworkStream.
6363
pub trait NetworkConnector<S: NetworkStream> {
6464
/// Connect to a remote address.
65-
fn connect<To: ToSocketAddr>(&mut self, addr: To, scheme: &str) -> IoResult<S>;
65+
fn connect(&mut self, host: &str, port: Port, scheme: &str) -> IoResult<S>;
6666
}
6767

6868
impl fmt::Show for Box<NetworkStream + Send> {
@@ -239,7 +239,8 @@ impl NetworkStream for HttpStream {
239239
pub struct HttpConnector;
240240

241241
impl NetworkConnector<HttpStream> for HttpConnector {
242-
fn connect<To: ToSocketAddr>(&mut self, addr: To, scheme: &str) -> IoResult<HttpStream> {
242+
fn connect(&mut self, host: &str, port: Port, scheme: &str) -> IoResult<HttpStream> {
243+
let addr = (host, port);
243244
match scheme {
244245
"http" => {
245246
debug!("http scheme");
@@ -249,7 +250,11 @@ impl NetworkConnector<HttpStream> for HttpConnector {
249250
debug!("https scheme");
250251
let stream = try!(TcpStream::connect(addr));
251252
let context = try!(SslContext::new(Sslv23).map_err(lift_ssl_error));
252-
let stream = try!(SslStream::new(&context, stream).map_err(lift_ssl_error));
253+
let ssl = try!(Ssl::new(&context).map_err(lift_ssl_error));
254+
debug!("ssl set_hostname = {}", host);
255+
try!(ssl.set_hostname(host).map_err(lift_ssl_error));
256+
debug!("ssl set_hostname done");
257+
let stream = try!(SslStream::new_from(ssl, stream).map_err(lift_ssl_error));
253258
Ok(Https(stream))
254259
},
255260
_ => {
@@ -264,6 +269,7 @@ impl NetworkConnector<HttpStream> for HttpConnector {
264269
}
265270

266271
fn lift_ssl_error(ssl: SslError) -> IoError {
272+
debug!("lift_ssl_error: {}", ssl);
267273
match ssl {
268274
StreamError(err) => err,
269275
SslSessionClosed => IoError {

0 commit comments

Comments
 (0)