From f19b0fad9b99181e9a5e5a892ae354d940db2bb2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Mon, 25 Sep 2023 16:38:13 -0400
Subject: [PATCH] contrib: update dhtnet

Change-Id: I30915805e03c2600f038fe465e744163d81a4b08
---
 contrib/src/dhtnet/package.json |  2 +-
 contrib/src/dhtnet/rules.mak    |  2 +-
 src/jamidht/jamiaccount.cpp     |  4 ++--
 src/jamidht/jamiaccount.h       |  2 +-
 src/manager.cpp                 |  8 +++----
 src/manager.h                   |  2 +-
 src/sip/sipaccountbase.cpp      |  2 +-
 src/sip/sipcall.cpp             |  4 +---
 test/unitTest/ice/ice.cpp       | 40 ++++++++++++++++-----------------
 9 files changed, 32 insertions(+), 34 deletions(-)

diff --git a/contrib/src/dhtnet/package.json b/contrib/src/dhtnet/package.json
index 7505f3aab7..1d461b1981 100644
--- a/contrib/src/dhtnet/package.json
+++ b/contrib/src/dhtnet/package.json
@@ -1,6 +1,6 @@
 {
     "name": "dhtnet",
-    "version": "2f3539bc19cf770cd23912c7eebe63e8d2f80515",
+    "version": "4796de15ed32b41949489c328bc250d17c431c80",
     "url": "https://review.jami.net/plugins/gitiles/dhtnet/+archive/__VERSION__.tar.gz",
     "deps": [
         "opendht",
diff --git a/contrib/src/dhtnet/rules.mak b/contrib/src/dhtnet/rules.mak
index 3fe00d8487..bec1d14555 100644
--- a/contrib/src/dhtnet/rules.mak
+++ b/contrib/src/dhtnet/rules.mak
@@ -1,5 +1,5 @@
 # DHTNET
-DHTNET_VERSION := 2f3539bc19cf770cd23912c7eebe63e8d2f80515
+DHTNET_VERSION := 4796de15ed32b41949489c328bc250d17c431c80
 DHTNET_URL := https://review.jami.net/plugins/gitiles/dhtnet/+archive/$(DHTNET_VERSION).tar.gz
 
 PKGS += dhtnet
diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index 2c8469118a..689f2eee9d 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -4192,7 +4192,7 @@ JamiAccount::initConnectionManager()
         auto connectionManagerConfig = std::make_shared<dhtnet::ConnectionManager::Config>();
         connectionManagerConfig->ioContext = Manager::instance().ioContext();
         connectionManagerConfig->dht = dht();
-        connectionManagerConfig->certStore = certStore_.get();
+        connectionManagerConfig->certStore = certStore_;
         connectionManagerConfig->id = identity();
         connectionManagerConfig->upnpCtrl = upnpCtrl_;
         connectionManagerConfig->turnServer = config().turnServer;
@@ -4203,7 +4203,7 @@ JamiAccount::initConnectionManager()
         connectionManagerConfig->turnEnabled = config().turnEnabled;
         connectionManagerConfig->cachePath = cachePath_;
         connectionManagerConfig->logger = Logger::dhtLogger();
-        connectionManagerConfig->factory = &Manager::instance().getIceTransportFactory();
+        connectionManagerConfig->factory = Manager::instance().getIceTransportFactory();
         connectionManagerConfig->turnCache = turnCache_;
         connectionManager_ = std::make_unique<dhtnet::ConnectionManager>(connectionManagerConfig);
         channelHandlers_[Uri::Scheme::SWARM]
diff --git a/src/jamidht/jamiaccount.h b/src/jamidht/jamiaccount.h
index 2e55c27902..34d6c42317 100644
--- a/src/jamidht/jamiaccount.h
+++ b/src/jamidht/jamiaccount.h
@@ -707,7 +707,7 @@ private:
     std::string registeredName_;
 #endif
     std::shared_ptr<dht::Logger> logger_;
-    std::unique_ptr<dhtnet::tls::CertificateStore> certStore_;
+    std::shared_ptr<dhtnet::tls::CertificateStore> certStore_;
 
     std::shared_ptr<dht::DhtRunner> dht_ {};
     std::shared_ptr<AccountManager> accountManager_;
diff --git a/src/manager.cpp b/src/manager.cpp
index 05ab417268..ba9bced7c5 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -434,7 +434,7 @@ struct Manager::ManagerPimpl
     std::atomic_bool finished_ {false};
 
     /* ICE support */
-    std::unique_ptr<dhtnet::IceTransportFactory> ice_tf_;
+    std::shared_ptr<dhtnet::IceTransportFactory> ice_tf_;
 
     /* Sink ID mapping */
     std::map<std::string, std::weak_ptr<video::SinkClient>> sinkMap_;
@@ -814,7 +814,7 @@ Manager::init(const std::filesystem::path& config_file, libjami::InitFlag flags)
     check_rename(fileutils::get_config_dir(PACKAGE_OLD).string(),
                  fileutils::get_config_dir().string());
 
-    pimpl_->ice_tf_.reset(new dhtnet::IceTransportFactory(Logger::dhtLogger()));
+    pimpl_->ice_tf_ = std::make_shared<dhtnet::IceTransportFactory>(Logger::dhtLogger());
 
     pimpl_->path_ = config_file.empty() ? pimpl_->retrieveConfigPath() : config_file;
     JAMI_DBG("Configuration file path: %s", pimpl_->path_.c_str());
@@ -3187,10 +3187,10 @@ Manager::hasAccount(const std::string& accountID)
     return accountFactory.hasAccount(accountID);
 }
 
-dhtnet::IceTransportFactory&
+const std::shared_ptr<dhtnet::IceTransportFactory>&
 Manager::getIceTransportFactory()
 {
-    return *pimpl_->ice_tf_;
+    return pimpl_->ice_tf_;
 }
 
 VideoManager&
diff --git a/src/manager.h b/src/manager.h
index 1b660715ca..9bed0fdebe 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -789,7 +789,7 @@ public:
 
     CallFactory callFactory;
 
-    dhtnet::IceTransportFactory& getIceTransportFactory();
+    const std::shared_ptr<dhtnet::IceTransportFactory>& getIceTransportFactory();
 
     std::shared_ptr<asio::io_context> ioContext() const;
     std::shared_ptr<dhtnet::upnp::UPnPContext> upnpContext() const;
diff --git a/src/sip/sipaccountbase.cpp b/src/sip/sipaccountbase.cpp
index 0e10763372..d0532d83f8 100644
--- a/src/sip/sipaccountbase.cpp
+++ b/src/sip/sipaccountbase.cpp
@@ -249,7 +249,7 @@ SIPAccountBase::getIceOptions() const noexcept
 {
     dhtnet::IceTransportOptions opts;
     opts.upnpEnable = getUPnPActive();
-    opts.factory = (dhtnet::IceTransportFactory*)&Manager::instance().getIceTransportFactory();
+    opts.factory = Manager::instance().getIceTransportFactory();
 
     if (config().turnEnabled && turnCache_) {
         auto turnAddr = turnCache_->getResolvedTurn();
diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index 8dfc984778..8477eb3aee 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -3318,9 +3318,7 @@ SIPCall::InvSessionDeleter::operator()(pjsip_inv_session* inv) const noexcept
 bool
 SIPCall::createIceMediaTransport(bool isReinvite)
 {
-    auto& iceTransportFactory = Manager::instance().getIceTransportFactory();
-
-    auto mediaTransport = iceTransportFactory.createTransport(getCallId());
+    auto mediaTransport = Manager::instance().getIceTransportFactory()->createTransport(getCallId());
     if (mediaTransport) {
         JAMI_DBG("[call:%s] Successfully created media ICE transport [ice:%p]",
                  getCallId().c_str(),
diff --git a/test/unitTest/ice/ice.cpp b/test/unitTest/ice/ice.cpp
index da0fad9632..07d55df238 100644
--- a/test/unitTest/ice/ice.cpp
+++ b/test/unitTest/ice/ice.cpp
@@ -140,9 +140,9 @@ IceTest::testRawIceConnection()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
+    ice_config.factory = Manager::instance().getIceTransportFactory();
 
-    ice_master = Manager::instance().getIceTransportFactory().createTransport("master ICE");
+    ice_master = Manager::instance().getIceTransportFactory()->createTransport("master ICE");
     ice_master->initIceInstance(ice_config);
     cv_create.notify_all();
     ice_config.onInitDone = [&](bool ok) {
@@ -176,9 +176,9 @@ IceTest::testRawIceConnection()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
+    ice_config.factory = Manager::instance().getIceTransportFactory();
 
-    ice_slave = Manager::instance().getIceTransportFactory().createTransport("slave ICE");
+    ice_slave = Manager::instance().getIceTransportFactory()->createTransport("slave ICE");
     ice_slave->initIceInstance(ice_config);
 
     cv_create.notify_all();
@@ -252,8 +252,8 @@ IceTest::testTurnMasterIceConnection()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
-    ice_master = Manager::instance().getIceTransportFactory().createTransport("master ICE");
+    ice_config.factory = Manager::instance().getIceTransportFactory();
+    ice_master = Manager::instance().getIceTransportFactory()->createTransport("master ICE");
     ice_master->initIceInstance(ice_config);
     cv_create.notify_all();
     ice_config.turnServers = {};
@@ -297,8 +297,8 @@ IceTest::testTurnMasterIceConnection()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
-    ice_slave = Manager::instance().getIceTransportFactory().createTransport("slave ICE");
+    ice_config.factory = Manager::instance().getIceTransportFactory();
+    ice_slave = Manager::instance().getIceTransportFactory()->createTransport("slave ICE");
     ice_slave->initIceInstance(ice_config);
 
     cv_create.notify_all();
@@ -367,8 +367,8 @@ IceTest::testTurnSlaveIceConnection()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
-    ice_master = Manager::instance().getIceTransportFactory().createTransport("master ICE");
+    ice_config.factory = Manager::instance().getIceTransportFactory();
+    ice_master = Manager::instance().getIceTransportFactory()->createTransport("master ICE");
     ice_master->initIceInstance(ice_config);
     cv_create.notify_all();
     ice_config.onInitDone = [&](bool ok) {
@@ -416,8 +416,8 @@ IceTest::testTurnSlaveIceConnection()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
-    ice_slave = Manager::instance().getIceTransportFactory().createTransport("slave ICE");
+    ice_config.factory = Manager::instance().getIceTransportFactory();
+    ice_slave = Manager::instance().getIceTransportFactory()->createTransport("slave ICE");
     ice_slave->initIceInstance(ice_config);
     cv_create.notify_all();
     CPPUNIT_ASSERT(
@@ -481,9 +481,9 @@ IceTest::testReceiveTooManyCandidates()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
+    ice_config.factory = Manager::instance().getIceTransportFactory();
 
-    ice_master = Manager::instance().getIceTransportFactory().createTransport("master ICE");
+    ice_master = Manager::instance().getIceTransportFactory()->createTransport("master ICE");
     ice_master->initIceInstance(ice_config);
     cv_create.notify_all();
     ice_config.onInitDone = [&](bool ok) {
@@ -525,9 +525,9 @@ IceTest::testReceiveTooManyCandidates()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
+    ice_config.factory = Manager::instance().getIceTransportFactory();
 
-    ice_slave = Manager::instance().getIceTransportFactory().createTransport("slave ICE");
+    ice_slave = Manager::instance().getIceTransportFactory()->createTransport("slave ICE");
     ice_slave->initIceInstance(ice_config);
     cv_create.notify_all();
     CPPUNIT_ASSERT(
@@ -594,8 +594,8 @@ IceTest::testCompleteOnFailure()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
-    ice_master = Manager::instance().getIceTransportFactory().createTransport("master ICE");
+    ice_config.factory = Manager::instance().getIceTransportFactory();
+    ice_master = Manager::instance().getIceTransportFactory()->createTransport("master ICE");
     ice_master->initIceInstance(ice_config);
     cv_create.notify_all();
     ice_config.onInitDone = [&](bool ok) {
@@ -643,8 +643,8 @@ IceTest::testCompleteOnFailure()
     ice_config.streamsCount = 1;
     ice_config.compCountPerStream = 1;
     ice_config.upnpContext = Manager::instance().upnpContext();
-    ice_config.factory = &Manager::instance().getIceTransportFactory();
-    ice_slave = Manager::instance().getIceTransportFactory().createTransport("slave ICE");
+    ice_config.factory = Manager::instance().getIceTransportFactory();
+    ice_slave = Manager::instance().getIceTransportFactory()->createTransport("slave ICE");
     ice_slave->initIceInstance(ice_config);
     cv_create.notify_all();
     // Check that nego failed and callback called
-- 
GitLab