diff --git a/Cargo.lock b/Cargo.lock index 714d14ff70..8cba462112 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -661,6 +661,18 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-native-tls" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9e7a929bd34c68a82d58a4de7f86fffdaf97fb2af850162a7bb19dd7269b33" +dependencies = [ + "async-std", + "native-tls", + "thiserror", + "url", +] + [[package]] name = "async-native-tls" version = "0.5.0" @@ -864,17 +876,17 @@ dependencies = [ [[package]] name = "async-tungstenite" -version = "0.23.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e9efbe14612da0a19fb983059a0b621e9cf6225d7018ecab4f9988215540dc" +checksum = "5682ea0913e5c20780fe5785abacb85a411e7437bf52a1bedb93ddb3972cb8dd" dependencies = [ - "async-native-tls", + "async-native-tls 0.3.3", "async-std", "futures-io", "futures-util", "log", "pin-project-lite", - "tungstenite", + "tungstenite 0.16.0", ] [[package]] @@ -2304,7 +2316,7 @@ name = "client" version = "0.1.0" dependencies = [ "anyhow", - "async-native-tls", + "async-native-tls 0.5.0", "async-recursion 0.3.2", "async-tungstenite", "chrono", @@ -9627,6 +9639,19 @@ dependencies = [ "workspace", ] +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha1" version = "0.10.6" @@ -11195,7 +11220,7 @@ dependencies = [ "futures-util", "log", "tokio", - "tungstenite", + "tungstenite 0.20.1", ] [[package]] @@ -11668,6 +11693,26 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" +[[package]] +name = "tungstenite" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ad3713a14ae247f22a728a0456a545df14acf3867f905adff84be99e23b3ad1" +dependencies = [ + "base64 0.13.1", + "byteorder", + "bytes 1.5.0", + "http 0.2.9", + "httparse", + "log", + "native-tls", + "rand 0.8.5", + "sha-1", + "thiserror", + "url", + "utf-8", +] + [[package]] name = "tungstenite" version = "0.20.1" @@ -11680,7 +11725,6 @@ dependencies = [ "http 0.2.9", "httparse", "log", - "native-tls", "rand 0.8.5", "sha1", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index a0732591be..04d6251e1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -167,7 +167,6 @@ assets = { path = "crates/assets" } assistant = { path = "crates/assistant" } assistant_slash_command = { path = "crates/assistant_slash_command" } assistant_tooling = { path = "crates/assistant_tooling" } -async-tungstenite = { version = "0.23" } audio = { path = "crates/audio" } auto_update = { path = "crates/auto_update" } breadcrumbs = { path = "crates/breadcrumbs" } @@ -296,6 +295,7 @@ async-pipe = { git = "https://github.com/zed-industries/async-pipe-rs", rev = "8 async-recursion = "1.0.0" async-tar = "0.4.2" async-trait = "0.1" +async-tungstenite = { version = "0.16" } async-watch = "0.3.1" async_zip = { version = "0.0.17", features = ["deflate", "deflate64"] } base64 = "0.13" diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 75f7e4941d..1c5615e549 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -12,7 +12,7 @@ use crate::{ executor::Executor, AppState, Error, RateLimit, RateLimiter, Result, }; -use anyhow::{anyhow, bail, Context as _}; +use anyhow::{anyhow, Context as _}; use async_tungstenite::tungstenite::{ protocol::CloseFrame as TungsteniteCloseFrame, Message as TungsteniteMessage, }; @@ -1392,13 +1392,7 @@ pub async fn handle_websocket_request( let socket = socket .map_ok(to_tungstenite_message) .err_into() - .with(|message| async move { - if let Some(message) = to_axum_message(message) { - Ok(message) - } else { - bail!("Could not convert a tungstenite message to axum message"); - } - }); + .with(|message| async move { Ok(to_axum_message(message)) }); let connection = Connection::new(Box::pin(socket)); async move { server @@ -5160,21 +5154,16 @@ async fn get_private_user_info( Ok(()) } -fn to_axum_message(message: TungsteniteMessage) -> Option { +fn to_axum_message(message: TungsteniteMessage) -> AxumMessage { match message { - TungsteniteMessage::Text(payload) => Some(AxumMessage::Text(payload)), - TungsteniteMessage::Binary(payload) => Some(AxumMessage::Binary(payload)), - TungsteniteMessage::Ping(payload) => Some(AxumMessage::Ping(payload)), - TungsteniteMessage::Pong(payload) => Some(AxumMessage::Pong(payload)), - TungsteniteMessage::Close(frame) => { - Some(AxumMessage::Close(frame.map(|frame| AxumCloseFrame { - code: frame.code.into(), - reason: frame.reason, - }))) - } - // we can ignore `Frame` frames as recommended by the tungstenite maintainers - // https://github.com/snapview/tungstenite-rs/issues/268 - TungsteniteMessage::Frame(_) => None, + TungsteniteMessage::Text(payload) => AxumMessage::Text(payload), + TungsteniteMessage::Binary(payload) => AxumMessage::Binary(payload), + TungsteniteMessage::Ping(payload) => AxumMessage::Ping(payload), + TungsteniteMessage::Pong(payload) => AxumMessage::Pong(payload), + TungsteniteMessage::Close(frame) => AxumMessage::Close(frame.map(|frame| AxumCloseFrame { + code: frame.code.into(), + reason: frame.reason, + })), } }