From c37bf8965042394aaa1665c63933c0de3a1ca245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Mon, 30 Oct 2023 19:34:24 +0100 Subject: [PATCH] ws: include "type" field in RtcOffer and RtcAnswer --- crates/ws_load_test/src/network.rs | 3 ++- crates/ws_load_test/src/utils.rs | 1 + .../bench_deserialize_announce_request.rs | 2 ++ crates/ws_protocol/src/common.rs | 18 ++++++++++++++++++ crates/ws_protocol/src/lib.rs | 2 ++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/crates/ws_load_test/src/network.rs b/crates/ws_load_test/src/network.rs index ef8f553..09eee0d 100644 --- a/crates/ws_load_test/src/network.rs +++ b/crates/ws_load_test/src/network.rs @@ -6,7 +6,7 @@ use std::{ time::Duration, }; -use aquatic_ws_protocol::{InMessage, OfferId, OutMessage, PeerId, RtcAnswer}; +use aquatic_ws_protocol::{InMessage, OfferId, OutMessage, PeerId, RtcAnswer, RtcAnswerType}; use async_tungstenite::{client_async, WebSocketStream}; use futures::{SinkExt, StreamExt}; use futures_rustls::{client::TlsStream, TlsConnector}; @@ -134,6 +134,7 @@ impl Connection { r.answer_to_peer_id = Some(peer_id); r.answer_offer_id = Some(offer_id); r.answer = Some(RtcAnswer { + t: RtcAnswerType::Answer, sdp: ::serde_json::json!( {"sdp": "abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-"} ), diff --git a/crates/ws_load_test/src/utils.rs b/crates/ws_load_test/src/utils.rs index b42d84a..a8dd488 100644 --- a/crates/ws_load_test/src/utils.rs +++ b/crates/ws_load_test/src/utils.rs @@ -51,6 +51,7 @@ fn create_announce_request( offers.push(AnnounceRequestOffer { offer_id: OfferId(rng.gen()), offer: RtcOffer { + t: RtcOfferType::Offer, sdp: ::serde_json::json!( {"sdp": "abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-abcdefg-"} ) diff --git a/crates/ws_protocol/benches/bench_deserialize_announce_request.rs b/crates/ws_protocol/benches/bench_deserialize_announce_request.rs index d6998b9..a2f5e2b 100644 --- a/crates/ws_protocol/benches/bench_deserialize_announce_request.rs +++ b/crates/ws_protocol/benches/bench_deserialize_announce_request.rs @@ -16,6 +16,7 @@ pub fn bench(c: &mut Criterion) { AnnounceRequestOffer { offer: RtcOffer { + t: RtcOfferType::Offer, sdp: ::serde_json::json!({ "sdp": "abcdef" }), }, offer_id, @@ -33,6 +34,7 @@ pub fn bench(c: &mut Criterion) { offers: Some(offers), numwant: Some(offers_len), answer: Some(RtcAnswer { + t: RtcAnswerType::Answer, sdp: ::serde_json::json!({ "sdp": "abcdef" }), }), answer_to_peer_id: Some(peer_id), diff --git a/crates/ws_protocol/src/common.rs b/crates/ws_protocol/src/common.rs index 859ffc0..ea396a9 100644 --- a/crates/ws_protocol/src/common.rs +++ b/crates/ws_protocol/src/common.rs @@ -30,11 +30,26 @@ pub struct OfferId( pub [u8; 20], ); +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum RtcOfferType { + Offer, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum RtcAnswerType { + Answer, +} + /// Nested structure with SDP offer from https://www.npmjs.com/package/simple-peer /// /// Created using https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/createOffer #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RtcOffer { + /// Always "offer" + #[serde(rename = "type")] + pub t: RtcOfferType, pub sdp: ::serde_json::Value, } @@ -43,6 +58,9 @@ pub struct RtcOffer { /// Created using https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/createAnswer #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RtcAnswer { + /// Always "answer" + #[serde(rename = "type")] + pub t: RtcAnswerType, pub sdp: ::serde_json::Value, } diff --git a/crates/ws_protocol/src/lib.rs b/crates/ws_protocol/src/lib.rs index 28bde42..a3b61e7 100644 --- a/crates/ws_protocol/src/lib.rs +++ b/crates/ws_protocol/src/lib.rs @@ -37,11 +37,13 @@ mod tests { fn rtc_offer() -> RtcOffer { RtcOffer { + t: RtcOfferType::Offer, sdp: ::serde_json::json!({ "sdp": "test" }), } } fn rtc_answer() -> RtcAnswer { RtcAnswer { + t: RtcAnswerType::Answer, sdp: ::serde_json::json!({ "sdp": "test" }), } }