@@ -661,18 +661,6 @@ 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"
@@ -876,17 +864,17 @@ dependencies = [
[[package]]
name = "async-tungstenite"
-version = "0.16.1"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5682ea0913e5c20780fe5785abacb85a411e7437bf52a1bedb93ddb3972cb8dd"
+checksum = "a1e9efbe14612da0a19fb983059a0b621e9cf6225d7018ecab4f9988215540dc"
dependencies = [
- "async-native-tls 0.3.3",
+ "async-native-tls",
"async-std",
"futures-io",
"futures-util",
"log",
"pin-project-lite",
- "tungstenite 0.16.0",
+ "tungstenite",
]
[[package]]
@@ -2316,7 +2304,7 @@ name = "client"
version = "0.1.0"
dependencies = [
"anyhow",
- "async-native-tls 0.5.0",
+ "async-native-tls",
"async-recursion 0.3.2",
"async-tungstenite",
"chrono",
@@ -9639,19 +9627,6 @@ 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"
@@ -11220,7 +11195,7 @@ dependencies = [
"futures-util",
"log",
"tokio",
- "tungstenite 0.20.1",
+ "tungstenite",
]
[[package]]
@@ -11693,26 +11668,6 @@ 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"
@@ -11725,6 +11680,7 @@ dependencies = [
"http 0.2.9",
"httparse",
"log",
+ "native-tls",
"rand 0.8.5",
"sha1",
"thiserror",
@@ -18,7 +18,7 @@ test-support = ["clock/test-support", "collections/test-support", "gpui/test-sup
[dependencies]
anyhow.workspace = true
async-recursion = "0.3"
-async-tungstenite = { version = "0.16", features = ["async-std", "async-native-tls"] }
+async-tungstenite = { version = "0.23", features = ["async-std", "async-native-tls"] }
chrono = { workspace = true, features = ["serde"] }
clock.workspace = true
collections.workspace = true
@@ -12,7 +12,7 @@ use crate::{
executor::Executor,
AppState, Error, RateLimit, RateLimiter, Result,
};
-use anyhow::{anyhow, Context as _};
+use anyhow::{anyhow, bail, Context as _};
use async_tungstenite::tungstenite::{
protocol::CloseFrame as TungsteniteCloseFrame, Message as TungsteniteMessage,
};
@@ -1392,7 +1392,13 @@ pub async fn handle_websocket_request(
let socket = socket
.map_ok(to_tungstenite_message)
.err_into()
- .with(|message| async move { Ok(to_axum_message(message)) });
+ .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");
+ }
+ });
let connection = Connection::new(Box::pin(socket));
async move {
server
@@ -5154,16 +5160,21 @@ async fn get_private_user_info(
Ok(())
}
-fn to_axum_message(message: TungsteniteMessage) -> AxumMessage {
+fn to_axum_message(message: TungsteniteMessage) -> Option<AxumMessage> {
match message {
- 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,
- })),
+ 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,
}
}