connect: parametrize AutoStream with Stream

Signed-off-by: Alexey Galakhov <agalakhov@snapview.de>
pull/1/head
Alexey Galakhov 7 years ago
parent 16c4693c91
commit da74321bc8
  1. 24
      src/connect.rs

@ -28,14 +28,13 @@ mod encryption {
extern crate native_tls; extern crate native_tls;
extern crate tokio_tls; extern crate tokio_tls;
use super::tokio_core::net::TcpStream;
use self::native_tls::TlsConnector; use self::native_tls::TlsConnector;
use self::tokio_tls::{TlsConnectorExt, TlsStream}; use self::tokio_tls::{TlsConnectorExt, TlsStream};
use std::io::{Read, Write, Result as IoResult}; use std::io::{Read, Write, Result as IoResult};
use futures::{future, Future}; use futures::{future, Future};
use tokio_io::{AsyncRead, AsyncWrite};
use tungstenite::Error; use tungstenite::Error;
use tungstenite::stream::Mode; use tungstenite::stream::Mode;
@ -43,7 +42,7 @@ mod encryption {
use stream::NoDelay; use stream::NoDelay;
pub use stream::Stream as StreamSwitcher; pub use stream::Stream as StreamSwitcher;
pub type AutoStream = StreamSwitcher<TcpStream, TlsStream<TcpStream>>; pub type AutoStream<S> = StreamSwitcher<S, TlsStream<S>>;
impl<T: Read + Write + NoDelay> NoDelay for TlsStream<T> { impl<T: Read + Write + NoDelay> NoDelay for TlsStream<T> {
fn set_nodelay(&mut self, nodelay: bool) -> IoResult<()> { fn set_nodelay(&mut self, nodelay: bool) -> IoResult<()> {
@ -51,8 +50,10 @@ mod encryption {
} }
} }
pub fn wrap_stream(socket: TcpStream, domain: String, mode: Mode) pub fn wrap_stream<S>(socket: S, domain: String, mode: Mode)
-> Box<Future<Item=AutoStream, Error=Error>> -> Box<Future<Item=AutoStream<S>, Error=Error>>
where
S: 'static + AsyncRead + AsyncWrite,
{ {
match mode { match mode {
Mode::Plain => Box::new(future::ok(StreamSwitcher::Plain(socket))), Mode::Plain => Box::new(future::ok(StreamSwitcher::Plain(socket))),
@ -69,17 +70,18 @@ mod encryption {
#[cfg(not(feature="tls"))] #[cfg(not(feature="tls"))]
mod encryption { mod encryption {
use super::tokio_core::net::TcpStream;
use futures::{future, Future}; use futures::{future, Future};
use tokio_io::{AsyncRead, AsyncWrite};
use tungstenite::Error; use tungstenite::Error;
use tungstenite::stream::Mode; use tungstenite::stream::Mode;
pub type AutoStream = TcpStream; pub type AutoStream<S> = S;
pub fn wrap_stream(socket: TcpStream, _domain: String, mode: Mode) pub fn wrap_stream<S>(socket: S, _domain: String, mode: Mode)
-> Box<Future<Item=AutoStream, Error=Error>> -> Box<Future<Item=AutoStream<S>, Error=Error>>
where
S: 'static + AsyncRead + AsyncWrite,
{ {
match mode { match mode {
Mode::Plain => Box::new(future::ok(socket)), Mode::Plain => Box::new(future::ok(socket)),
@ -92,7 +94,7 @@ use self::encryption::{AutoStream, wrap_stream};
/// Connect to a given URL. /// Connect to a given URL.
pub fn connect_async<R>(request: R, handle: Remote) pub fn connect_async<R>(request: R, handle: Remote)
-> Box<Future<Item=(WebSocketStream<AutoStream>, Response), Error=Error>> -> Box<Future<Item=(WebSocketStream<AutoStream<TcpStream>>, Response), Error=Error>>
where where
R: Into<Request<'static>> R: Into<Request<'static>>
{ {

Loading…
Cancel
Save