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)