Skip to content

Commit 4e9c6f2

Browse files
committed
Matched sync server API with async, small fixes.
1 parent 39f6e55 commit 4e9c6f2

File tree

4 files changed

+38
-8
lines changed

4 files changed

+38
-8
lines changed

src/result.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::convert::From;
77
use std::fmt;
88
use hyper::Error as HttpError;
99
use url::ParseError;
10+
use server::upgrade::HyperIntoWsError;
1011

1112
#[cfg(any(feature="sync-ssl", feature="async-ssl"))]
1213
use native_tls::Error as TlsError;
@@ -16,6 +17,12 @@ use native_tls::HandshakeError as TlsHandshakeError;
1617
/// The type used for WebSocket results
1718
pub type WebSocketResult<T> = Result<T, WebSocketError>;
1819

20+
pub mod async {
21+
use futures::Future;
22+
use super::WebSocketError;
23+
pub type WebSocketFuture<I> = Box<Future<Item = I, Error = WebSocketError>>;
24+
}
25+
1926
/// Represents a WebSocket error
2027
#[derive(Debug)]
2128
pub enum WebSocketError {
@@ -154,6 +161,25 @@ impl From<WSUrlErrorKind> for WebSocketError {
154161
}
155162
}
156163

164+
impl From<HyperIntoWsError> for WebSocketError {
165+
fn from(err: HyperIntoWsError) -> WebSocketError {
166+
use self::HyperIntoWsError::*;
167+
use WebSocketError::*;
168+
match err {
169+
Io(io) => IoError(io),
170+
Parsing(err) => HttpError(err),
171+
MethodNotGet => ProtocolError("Request method must be GET"),
172+
UnsupportedHttpVersion => ProtocolError("Unsupported request HTTP version"),
173+
UnsupportedWebsocketVersion => ProtocolError("Unsupported WebSocket version"),
174+
NoSecWsKeyHeader => ProtocolError("Missing Sec-WebSocket-Key header"),
175+
NoWsUpgradeHeader => ProtocolError("Invalid Upgrade WebSocket header"),
176+
NoUpgradeHeader => ProtocolError("Missing Upgrade WebSocket header"),
177+
NoWsConnectionHeader => ProtocolError("Invalid Connection WebSocket header"),
178+
NoConnectionHeader => ProtocolError("Missing Connection WebSocket header"),
179+
}
180+
}
181+
}
182+
157183
/// Represents a WebSocket URL error
158184
#[derive(Debug)]
159185
pub enum WSUrlErrorKind {

src/server/async.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use std::io;
2-
use std::net::SocketAddr;
2+
use std::net::ToSocketAddrs;
33
use server::{WsServer, NoTlsAcceptor};
44
use tokio_core::net::{TcpListener, TcpStream};
55
use futures::{Stream, Future};
@@ -23,9 +23,11 @@ pub enum AcceptError<E> {
2323
}
2424

2525
impl WsServer<NoTlsAcceptor, TcpListener> {
26-
pub fn bind(addr: &SocketAddr, handle: &Handle) -> io::Result<Self> {
26+
pub fn bind<A: ToSocketAddrs>(addr: A, handle: &Handle) -> io::Result<Self> {
27+
let tcp = ::std::net::TcpListener::bind(addr)?;
28+
let address = tcp.local_addr()?;
2729
Ok(Server {
28-
listener: TcpListener::bind(addr, handle)?,
30+
listener: TcpListener::from_listener(tcp, &address, handle)?,
2931
ssl_acceptor: NoTlsAcceptor,
3032
})
3133
}
@@ -58,13 +60,15 @@ impl WsServer<NoTlsAcceptor, TcpListener> {
5860

5961
#[cfg(any(feature="async-ssl"))]
6062
impl WsServer<TlsAcceptor, TcpListener> {
61-
pub fn bind_secure(
62-
addr: &SocketAddr,
63+
pub fn bind_secure<A: ToSocketAddrs>(
64+
addr: A,
6365
acceptor: TlsAcceptor,
6466
handle: &Handle,
6567
) -> io::Result<Self> {
68+
let tcp = ::std::net::TcpListener::bind(addr)?;
69+
let address = tcp.local_addr()?;
6670
Ok(Server {
67-
listener: TcpListener::bind(addr, handle)?,
71+
listener: TcpListener::from_listener(tcp, &address, handle)?,
6872
ssl_acceptor: acceptor,
6973
})
7074
}

src/server/upgrade/async.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl<S> WsUpgrade<S, BytesMut>
4444
headers: headers.clone(),
4545
})
4646
.map(move |s| {
47-
let codec = MessageCodec::default(Context::Client);
47+
let codec = MessageCodec::default(Context::Server);
4848
let client = Framed::from_parts(s.into_parts(), codec);
4949
(client, headers)
5050
})

src/server/upgrade/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl<S, B> WsUpgrade<S, B>
8686
::std::mem::drop(self);
8787
}
8888

89-
/// Aelist of protocols requested from the client.
89+
/// A list of protocols requested from the client.
9090
pub fn protocols(&self) -> &[String] {
9191
self.request
9292
.headers

0 commit comments

Comments
 (0)