From cd21cff29942f24ba7d38287186cce64d0e84e56 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Thu, 18 Aug 2022 17:35:02 +0530 Subject: feat(ext/flash): An optimized http/1.1 server (#15405) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bartek IwaƄczuk Co-authored-by: Ben Noordhuis Co-authored-by: crowlkats Co-authored-by: Ryan Dahl --- ext/websocket/lib.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'ext/websocket') diff --git a/ext/websocket/lib.rs b/ext/websocket/lib.rs index 0e642be3f..515f798ac 100644 --- a/ext/websocket/lib.rs +++ b/ext/websocket/lib.rs @@ -34,8 +34,11 @@ use std::cell::RefCell; use std::convert::TryFrom; use std::fmt; use std::path::PathBuf; +use std::pin::Pin; use std::rc::Rc; use std::sync::Arc; +use tokio::io::AsyncRead; +use tokio::io::AsyncWrite; use tokio::net::TcpStream; use tokio_rustls::rustls::RootCertStore; use tokio_rustls::rustls::ServerName; @@ -67,23 +70,25 @@ pub trait WebSocketPermissions { /// would override previously used alias. pub struct UnsafelyIgnoreCertificateErrors(Option>); -type WsStream = WebSocketStream>; +type ClientWsStream = WebSocketStream>; +type ServerWsStream = WebSocketStream>>; + pub enum WebSocketStreamType { Client { - tx: AsyncRefCell>, - rx: AsyncRefCell>, + tx: AsyncRefCell>, + rx: AsyncRefCell>, }, Server { - tx: AsyncRefCell< - SplitSink, Message>, - >, - rx: AsyncRefCell>>, + tx: AsyncRefCell>, + rx: AsyncRefCell>, }, } +pub trait Upgraded: AsyncRead + AsyncWrite + Unpin {} + pub async fn ws_create_server_stream( state: &Rc>, - transport: hyper::upgrade::Upgraded, + transport: Pin>, ) -> Result { let ws_stream = WebSocketStream::from_raw_socket( transport, @@ -340,7 +345,7 @@ where ..Default::default() }), ); - let (stream, response): (WsStream, Response) = + let (stream, response): (ClientWsStream, Response) = if let Some(cancel_resource) = cancel_resource { client.or_cancel(cancel_resource.0.to_owned()).await? } else { -- cgit v1.2.3