diff options
Diffstat (limited to 'src/euph/room.rs')
-rw-r--r-- | src/euph/room.rs | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/euph/room.rs b/src/euph/room.rs index 530cdf5..a2d07c7 100644 --- a/src/euph/room.rs +++ b/src/euph/room.rs @@ -15,9 +15,7 @@ use parking_lot::Mutex; use tokio::sync::{mpsc, oneshot}; use tokio::{select, task}; use tokio_tungstenite::tungstenite; -use tokio_tungstenite::tungstenite::client::IntoClientRequest; -use tokio_tungstenite::tungstenite::handshake::client::Response; -use tokio_tungstenite::tungstenite::http::{header, HeaderValue}; +use tokio_tungstenite::tungstenite::http::HeaderValue; use crate::macros::ok_or_return; use crate::vault::{EuphRoomVault, EuphVault}; @@ -149,14 +147,14 @@ impl State { cookies.join("; ") } - fn update_cookies(vault: &EuphVault, response: &Response) { + fn update_cookies(vault: &EuphVault, set_cookies: &[HeaderValue]) { let mut cookie_jar = CookieJar::new(); - for (name, value) in response.headers() { - if name == header::SET_COOKIE { - let value_str = ok_or_return!(value.to_str()); - let cookie = ok_or_return!(Cookie::from_str(value_str)); - cookie_jar.add(cookie); + for cookie in set_cookies { + if let Ok(cookie) = cookie.to_str() { + if let Ok(cookie) = Cookie::from_str(cookie) { + cookie_jar.add(cookie) + } } } @@ -167,17 +165,15 @@ impl State { vault: &EuphRoomVault, name: &str, ) -> anyhow::Result<Option<(ConnTx, ConnRx)>> { - let uri = format!("wss://euphoria.io/room/{name}/ws?h=1"); - let mut request = uri.into_client_request().expect("valid request"); + // TODO Set user agent? + let cookies = Self::get_cookies(vault.vault()).await; let cookies = HeaderValue::from_str(&cookies).expect("valid cookies"); - request.headers_mut().append(header::COOKIE, cookies); - // TODO Set user agent? - match tokio_tungstenite::connect_async(request).await { - Ok((ws, response)) => { - Self::update_cookies(vault.vault(), &response); - Ok(Some(euphoxide::wrap(ws, TIMEOUT))) + match euphoxide::connect("euphoria.io", name, true, Some(cookies), TIMEOUT).await { + Ok((tx, rx, set_cookies)) => { + Self::update_cookies(vault.vault(), &set_cookies); + Ok(Some((tx, rx))) } Err(tungstenite::Error::Http(resp)) if resp.status().is_client_error() => { bail!("room {name} doesn't exist"); |