From ca2a98c1ada2443ee527c70cad2989714fe0c655 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Wed, 5 Jun 2024 13:26:45 +0100 Subject: [PATCH] Allow overriding ICE ufrag and pwd fields Adds two new optional config keys - `iceUfrag` and `icePwd` which are passed to libjuice. Refs: https://github.com/paullouisageneau/libdatachannel/issues/1166 --- include/rtc/configuration.hpp | 4 ++++ src/impl/icetransport.cpp | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/rtc/configuration.hpp b/include/rtc/configuration.hpp index 4ec95a0bf..9212e13fc 100644 --- a/include/rtc/configuration.hpp +++ b/include/rtc/configuration.hpp @@ -93,6 +93,10 @@ struct RTC_CPP_EXPORT Configuration { optional certificatePemFile; optional keyPemFile; optional keyPemPass; + + // Overriding ICE ufrag/pwd + optional iceUfrag; + optional icePwd; }; #ifdef RTC_ENABLE_WEBSOCKET diff --git a/src/impl/icetransport.cpp b/src/impl/icetransport.cpp index a27a2ed32..104b47b49 100644 --- a/src/impl/icetransport.cpp +++ b/src/impl/icetransport.cpp @@ -130,10 +130,16 @@ IceTransport::IceTransport(const Configuration &config, candidate_callback candi } // Create agent - mAgent = decltype(mAgent)(juice_create(&jconfig), juice_destroy); - if (!mAgent) + auto agent = juice_create(&jconfig); + if (!agent) throw std::runtime_error("Failed to create the ICE agent"); + if (config.iceUfrag && config.icePwd) { + juice_set_local_ice_attributes(agent, (char*)config.iceUfrag->c_str(), (char*)config.icePwd->c_str()); + } + + mAgent = decltype(mAgent)(agent, juice_destroy); + // Add TURN servers for (const auto &server : servers) if (!server.hostname.empty() && server.type != IceServer::Type::Stun)