diff --git a/include/connectionmanager.h b/include/connectionmanager.h index 2e8fb9e74d27a22929fcb4306ec5a04ae03fac32..e6ad37bd93c8d51a8be7faac0a5ca00539793585 100644 --- a/include/connectionmanager.h +++ b/include/connectionmanager.h @@ -18,6 +18,7 @@ #include "ice_options.h" #include "multiplexed_socket.h" +#include "turn_cache.h" #include <opendht/dhtrunner.h> #include <opendht/infohash.h> @@ -237,9 +238,7 @@ struct ConnectionManager::Config std::string turnServerPwd; std::string turnServerRealm; - mutable std::mutex cachedTurnMutex {}; - dht::SockAddr cacheTurnV4 {}; - dht::SockAddr cacheTurnV6 {}; + std::shared_ptr<TurnCache> turnCache; std::string cachePath {}; diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp index 7fa8aac6426f933c6dc65d3ee05d83d04938c6dc..127b55baa8e16b53870989d4047941a498504770 100644 --- a/src/connectionmanager.cpp +++ b/src/connectionmanager.cpp @@ -1408,15 +1408,21 @@ ConnectionManager::Impl::getIceOptions() const noexcept if (config_->stunEnabled) opts.stunServers.emplace_back(StunServerInfo().setUri(config_->stunServer)); if (config_->turnEnabled) { - auto cached = false; - std::lock_guard<std::mutex> lk(config_->cachedTurnMutex); - cached = config_->cacheTurnV4 || config_->cacheTurnV6; - if (config_->cacheTurnV4) { + if (config_->turnCache) { + auto turnAddr = config_->turnCache->getResolvedTurn(); + if (turnAddr != std::nullopt) { + opts.turnServers.emplace_back(TurnServerInfo() + .setUri(turnAddr->toString()) + .setUsername(config_->turnServerUserName) + .setPassword(config_->turnServerPwd) + .setRealm(config_->turnServerRealm)); + } + } else { opts.turnServers.emplace_back(TurnServerInfo() - .setUri(config_->cacheTurnV4.toString()) - .setUsername(config_->turnServerUserName) - .setPassword(config_->turnServerPwd) - .setRealm(config_->turnServerRealm)); + .setUri(config_->turnServer) + .setUsername(config_->turnServerUserName) + .setPassword(config_->turnServerPwd) + .setRealm(config_->turnServerRealm)); } // NOTE: first test with ipv6 turn was not concluant and resulted in multiple // co issues. So this needs some debug. for now just disable @@ -1427,14 +1433,6 @@ ConnectionManager::Impl::getIceOptions() const noexcept // .setPassword(turnServerPwd_) // .setRealm(turnServerRealm_)); //} - // Nothing cached, so do the resolution - if (!cached) { - opts.turnServers.emplace_back(TurnServerInfo() - .setUri(config_->turnServer) - .setUsername(config_->turnServerUserName) - .setPassword(config_->turnServerPwd) - .setRealm(config_->turnServerRealm)); - } } return opts; }