WIP on supporting websocket-deflate

Seems to remove the "proxy" feature from the previously-referenced branch, so need to merge these two together somehow, most likely
This commit is contained in:
David de Regt
2026-02-04 21:43:28 -05:00
parent d452bb3ae5
commit e5375bd73d
4 changed files with 91 additions and 24 deletions

View File

@@ -30,6 +30,9 @@ use tracing::debug;
use tracing::error;
use tracing::info;
use tracing::trace;
use tungstenite::extensions::ExtensionsConfig;
use tungstenite::extensions::compression::deflate::DeflateConfig;
use tungstenite::protocol::WebSocketConfig;
use url::Url;
type WsStream = WebSocketStream<MaybeTlsStream<TcpStream>>;
@@ -170,7 +173,9 @@ async fn connect_websocket(
.map_err(|err| ApiError::Stream(format!("failed to build websocket request: {err}")))?;
request.headers_mut().extend(headers);
let response = tokio_tungstenite::connect_async(request).await;
let response =
tokio_tungstenite::connect_async_with_config(request, Some(websocket_config()), false)
.await;
let (stream, response) = match response {
Ok((stream, response)) => {
@@ -203,6 +208,26 @@ async fn connect_websocket(
Ok((stream, reasoning_included, models_etag))
}
fn websocket_config() -> WebSocketConfig {
let mut extensions = ExtensionsConfig::default();
extensions.permessage_deflate = Some(DeflateConfig::default());
let mut config = WebSocketConfig::default();
config.extensions = extensions;
config
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn websocket_config_enables_permessage_deflate() {
let config = websocket_config();
assert!(config.extensions.permessage_deflate.is_some());
}
}
fn map_ws_error(err: WsError, url: &Url) -> ApiError {
match err {
WsError::Http(response) => {