From 65d3caa0f1a89b2ef455b15f4f9363205eeac09b Mon Sep 17 00:00:00 2001 From: Alexander Gorbunov Date: Mon, 7 Aug 2023 16:46:43 +0900 Subject: [PATCH 1/3] test: Add test case for UpdateIceServers --- test/include/fakeParameters.hpp | 1 + test/src/Handler.test.cpp | 8 +++++++- test/src/fakeParameters.cpp | 19 +++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/test/include/fakeParameters.hpp b/test/include/fakeParameters.hpp index ed9b8bc5..f0617f53 100644 --- a/test/include/fakeParameters.hpp +++ b/test/include/fakeParameters.hpp @@ -11,5 +11,6 @@ json generateLocalDtlsParameters(); json generateTransportRemoteParameters(); std::string generateProducerRemoteId(); json generateConsumerRemoteParameters(const std::string& codecMimeType); +json generateIceServers(); #endif diff --git a/test/src/Handler.test.cpp b/test/src/Handler.test.cpp index a3591984..5c2d97a7 100644 --- a/test/src/Handler.test.cpp +++ b/test/src/Handler.test.cpp @@ -8,6 +8,7 @@ static const json TransportRemoteParameters = generateTransportRemoteParameters(); static const json RtpParametersByKind = generateRtpParametersByKind(); +static const json IceServers = generateIceServers(); static mediasoupclient::PeerConnection::Options PeerConnectionOptions; @@ -201,8 +202,13 @@ TEST_CASE("RecvHandler", "[Handler][RecvHandler]") REQUIRE_NOTHROW(recvHandler.RestartIce(iceParameters)); } - SECTION("recvHandler.UpdateIceServers() succeeds") + SECTION("recvHandler.UpdateIceServers() succeeds with empty array") { REQUIRE_NOTHROW(recvHandler.UpdateIceServers(json::array())); } + + SECTION("recvHandler.UpdateIceServers() succeeds with non-empty array") + { + REQUIRE_NOTHROW(recvHandler.UpdateIceServers(IceServers)); + } } diff --git a/test/src/fakeParameters.cpp b/test/src/fakeParameters.cpp index cd91bb11..50d21be5 100644 --- a/test/src/fakeParameters.cpp +++ b/test/src/fakeParameters.cpp @@ -477,3 +477,22 @@ json generateConsumerRemoteParameters(const std::string& codecMimeType) return json::object(); }; + +json generateIceServers() +{ + auto json = R"( + [ + { + "urls" : [ + "turn:t1.server.com", + "turn:t2.server.com" + ], + "username" : "fakeuser", + "credential" : "fakepass" + }, + { + "urls" : "stun:s.server.com" + } + ])"_json; + return json; +}; From f002780e13a33f352d7f6939ec893961ff431496 Mon Sep 17 00:00:00 2001 From: Alexander Gorbunov Date: Wed, 27 Apr 2022 21:45:29 +0700 Subject: [PATCH 2/3] feat: Update iceServers parsing logics to support modern format --- src/Handler.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Handler.cpp b/src/Handler.cpp index d2ff7210..40ca1273 100644 --- a/src/Handler.cpp +++ b/src/Handler.cpp @@ -98,7 +98,7 @@ namespace mediasoupclient return this->pc->GetStats(); } - void Handler::UpdateIceServers(const json& iceServerUris) + void Handler::UpdateIceServers(const json& iceServersDescription) { MSC_TRACE(); @@ -106,11 +106,12 @@ namespace mediasoupclient configuration.servers.clear(); - for (const auto& iceServerUri : iceServerUris) + for (const auto& iceServerDescription : iceServersDescription) { webrtc::PeerConnectionInterface::IceServer iceServer; - - iceServer.uri = iceServerUri.get(); + iceServer.urls = iceServerDescription.at("urls").get>(); + iceServer.username = iceServerDescription.at("username").get(); + iceServer.password = iceServerDescription.at("credential").get(); configuration.servers.push_back(iceServer); } From 52722263299625839ee5d1d813700080b21713eb Mon Sep 17 00:00:00 2001 From: Alexander Gorbunov Date: Mon, 7 Aug 2023 16:55:44 +0900 Subject: [PATCH 3/3] fix: Fix UpdateIceServers parameters parsing for all possible cases --- src/Handler.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Handler.cpp b/src/Handler.cpp index 40ca1273..6f99c2d7 100644 --- a/src/Handler.cpp +++ b/src/Handler.cpp @@ -108,10 +108,23 @@ namespace mediasoupclient for (const auto& iceServerDescription : iceServersDescription) { + if (!iceServerDescription.contains("urls")) { + continue; + } webrtc::PeerConnectionInterface::IceServer iceServer; - iceServer.urls = iceServerDescription.at("urls").get>(); - iceServer.username = iceServerDescription.at("username").get(); - iceServer.password = iceServerDescription.at("credential").get(); + if (iceServerDescription["urls"].is_string()) { + iceServer.urls = { iceServerDescription["urls"].get() }; + } else if (iceServerDescription["urls"].is_array()) { + iceServer.urls = iceServerDescription["urls"].get>(); + } else { + continue; + } + if (iceServerDescription.contains("username")) { + iceServer.username = iceServerDescription["username"].get(); + } + if (iceServerDescription.contains("credential")) { + iceServer.password = iceServerDescription["credential"].get(); + } configuration.servers.push_back(iceServer); }