Skip to content

Commit de05e90

Browse files
authored
Merge pull request websockets-rs#6 from avadacatavra/bump-hyper
bumped hyper and openssl
2 parents c8d2568 + 16b6691 commit de05e90

File tree

5 files changed

+26
-13
lines changed

5 files changed

+26
-13
lines changed

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ license = "MIT"
1717
name = "websocket"
1818

1919
[dependencies]
20-
hyper = "0.9"
20+
hyper = "0.10"
2121
unicase = "1.0.1"
22-
openssl = "0.7.6"
22+
openssl = "0.9"
2323
url = "1.0"
2424
rustc-serialize = "0.3.16"
2525
bitflags = "0.7"

src/client/mod.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use stream::WebSocketStream;
1212
use dataframe::DataFrame;
1313
use ws::dataframe::DataFrame as DataFrameable;
1414

15-
use openssl::ssl::{SslContext, SslMethod, SslStream};
15+
use openssl::ssl::{Ssl, SslMethod, SslContextBuilder, SslContext};
1616

1717
pub use self::request::Request;
1818
pub use self::response::Response;
@@ -68,8 +68,8 @@ impl Client<DataFrame, Sender<WebSocketStream>, Receiver<WebSocketStream>> {
6868
/// A connection is established, however the request is not sent to
6969
/// the server until a call to ```send()```.
7070
pub fn connect<T: ToWebSocketUrlComponents>(components: T) -> WebSocketResult<Request<WebSocketStream, WebSocketStream>> {
71-
let context = try!(SslContext::new(SslMethod::Tlsv1));
72-
Client::connect_ssl_context(components, &context)
71+
let context = try!(SslContextBuilder::new(SslMethod::tls()));
72+
Client::connect_ssl_context(components, &context.build())
7373
}
7474
/// Connects to the specified wss:// URL using the given SSL context.
7575
///
@@ -86,10 +86,11 @@ impl Client<DataFrame, Sender<WebSocketStream>, Receiver<WebSocketStream>> {
8686
));
8787

8888
let stream = if secure {
89-
let sslstream = try!(SslStream::connect(context, connection));
89+
let ssl = try!(Ssl::new(context));
90+
let sslstream = try!(ssl.connect(connection)
91+
.map_err(::result::WebSocketError::HandshakeError));
9092
WebSocketStream::Ssl(sslstream)
91-
}
92-
else {
93+
} else {
9394
WebSocketStream::Tcp(connection)
9495
};
9596

src/header/accept.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::fmt::{self, Debug};
55
use std::str::FromStr;
66
use serialize::base64::{ToBase64, FromBase64, STANDARD};
77
use header::WebSocketKey;
8-
use openssl::crypto::hash::{self, hash};
8+
use openssl::hash::{self, hash};
99
use result::{WebSocketResult, WebSocketError};
1010

1111
static MAGIC_GUID: &'static str = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
@@ -54,7 +54,7 @@ impl WebSocketAccept {
5454
let mut concat_key = String::with_capacity(serialized.len() + 36);
5555
concat_key.push_str(&serialized[..]);
5656
concat_key.push_str(MAGIC_GUID);
57-
let output = hash(hash::Type::SHA1, concat_key.as_bytes());
57+
let output = hash(hash::MessageDigest::sha1(), concat_key.as_bytes()).unwrap();
5858
let mut iter = output.into_iter();
5959
let mut bytes = [0u8; 20];
6060
for i in bytes.iter_mut() {

src/result.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ use std::str::Utf8Error;
55
use std::error::Error;
66
use std::convert::From;
77
use std::fmt;
8-
use openssl::ssl::error::SslError;
8+
use std::net::TcpStream;
9+
use openssl::error::ErrorStack as SslError;
10+
use openssl::ssl::HandshakeError;
911
use hyper::Error as HttpError;
1012
use url::ParseError;
1113

@@ -27,6 +29,8 @@ pub enum WebSocketError {
2729
NoDataAvailable,
2830
/// An input/output error
2931
IoError(io::Error),
32+
/// An Ssl Handshake error
33+
HandshakeError(HandshakeError<TcpStream>),
3034
/// An HTTP parsing error
3135
HttpError(HttpError),
3236
/// A URL parsing error
@@ -56,6 +60,7 @@ impl Error for WebSocketError {
5660
WebSocketError::DataFrameError(_) => "WebSocket data frame error",
5761
WebSocketError::NoDataAvailable => "No data available",
5862
WebSocketError::IoError(_) => "I/O failure",
63+
WebSocketError::HandshakeError(_) => "SSL Handshake failure",
5964
WebSocketError::HttpError(_) => "HTTP failure",
6065
WebSocketError::UrlError(_) => "URL failure",
6166
WebSocketError::SslError(_) => "SSL failure",
@@ -67,6 +72,7 @@ impl Error for WebSocketError {
6772
fn cause(&self) -> Option<&Error> {
6873
match *self {
6974
WebSocketError::IoError(ref error) => Some(error),
75+
WebSocketError::HandshakeError(ref error) => Some(error),
7076
WebSocketError::HttpError(ref error) => Some(error),
7177
WebSocketError::UrlError(ref error) => Some(error),
7278
WebSocketError::SslError(ref error) => Some(error),
@@ -86,6 +92,12 @@ impl From<io::Error> for WebSocketError {
8692
}
8793
}
8894

95+
impl From<HandshakeError<TcpStream>> for WebSocketError {
96+
fn from(err: HandshakeError<TcpStream>) -> WebSocketError {
97+
WebSocketError::HandshakeError(err)
98+
}
99+
}
100+
89101
impl From<HttpError> for WebSocketError {
90102
fn from(err: HttpError) -> WebSocketError {
91103
WebSocketError::HttpError(err)

src/stream.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Provides the default stream type for WebSocket connections.
22
extern crate net2;
33

4-
use std::io::{self, Read, Write};
4+
use std::io::{self, ErrorKind, Read, Write};
55
use self::net2::TcpStreamExt;
66
use openssl::ssl::SslStream;
77

@@ -80,7 +80,7 @@ impl WebSocketStream {
8080
pub fn try_clone(&self) -> io::Result<WebSocketStream> {
8181
Ok(match *self {
8282
WebSocketStream::Tcp(ref inner) => WebSocketStream::Tcp(try!(inner.try_clone())),
83-
WebSocketStream::Ssl(ref inner) => WebSocketStream::Ssl(try!(inner.try_clone())),
83+
WebSocketStream::Ssl(_) => return Err(io::Error::new(ErrorKind::Other, "can't clone an ssl stream")),
8484
})
8585
}
8686

0 commit comments

Comments
 (0)