diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index daff87c09446254012f6b10cb397dc2746e08426..5938fb4ed61c439484fb25d19adc6af85040600e 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -1956,7 +1956,7 @@ JamiAccount::doRegister_() deviceId, [this, &accept](const std::shared_ptr<dht::crypto::Certificate>& cert) { dht::InfoHash peer_account_id; auto res = accountManager_->onPeerCertificate(cert, - dhtPublicInCalls_, + this->config().dhtPublicInCalls, peer_account_id); JAMI_LOG("{} ICE request from {}", res ? "Accepting" : "Discarding", peer_account_id); @@ -2086,7 +2086,7 @@ JamiAccount::doRegister_() return true; accountManager_ ->onPeerMessage(*v.owner, - dhtPublicInCalls_, + this->config().dhtPublicInCalls, [this, v, inboxDeviceKey, diff --git a/src/jamidht/jamiaccount.h b/src/jamidht/jamiaccount.h index c145ba47d2fe6adbd93a382c96c72c7b4f2e4d21..78ec1d5bcec2514117924af98a6a275aceda9693 100644 --- a/src/jamidht/jamiaccount.h +++ b/src/jamidht/jamiaccount.h @@ -729,7 +729,6 @@ private: std::map<dht::InfoHash, BuddyInfo> trackedBuddies_; mutable std::mutex dhtValuesMtx_; - bool dhtPublicInCalls_ {true}; std::atomic_int syncCnt_ {0}; /** diff --git a/src/jamidht/jamiaccount_config.cpp b/src/jamidht/jamiaccount_config.cpp index d1b0422e041c5c038182086f842143de4a217c73..332a209a8d4ad34187bfefb95b846a9e16247302 100644 --- a/src/jamidht/jamiaccount_config.cpp +++ b/src/jamidht/jamiaccount_config.cpp @@ -56,6 +56,7 @@ JamiAccountConfig::serialize(YAML::Emitter& out) const SERIALIZE_CONFIG(libjami::Account::ConfProperties::DEVICE_NAME, deviceName); SERIALIZE_CONFIG(libjami::Account::ConfProperties::MANAGER_URI, managerUri); SERIALIZE_CONFIG(libjami::Account::ConfProperties::MANAGER_USERNAME, managerUsername); + SERIALIZE_CONFIG(libjami::Account::ConfProperties::DHT::PUBLIC_IN_CALLS, dhtPublicInCalls); out << YAML::Key << Conf::RING_ACCOUNT_RECEIPT << YAML::Value << receipt; if (receiptSignature.size() > 0) @@ -100,6 +101,7 @@ JamiAccountConfig::unserialize(const YAML::Node& node) parseValueOptional(node, libjami::Account::ConfProperties::DEVICE_NAME, deviceName); parseValueOptional(node, libjami::Account::ConfProperties::MANAGER_URI, managerUri); parseValueOptional(node, libjami::Account::ConfProperties::MANAGER_USERNAME, managerUsername); + parseValueOptional(node, libjami::Account::ConfProperties::DHT::PUBLIC_IN_CALLS, dhtPublicInCalls); parsePathOptional(node, libjami::Account::ConfProperties::ARCHIVE_PATH, archivePath, path); parseValueOptional(node, @@ -159,6 +161,7 @@ JamiAccountConfig::toMap() const a.emplace(libjami::Account::ConfProperties::DHT_PROXY_LIST_URL, proxyListUrl); a.emplace(libjami::Account::ConfProperties::MANAGER_URI, managerUri); a.emplace(libjami::Account::ConfProperties::MANAGER_USERNAME, managerUsername); + a.emplace(libjami::Account::ConfProperties::DHT::PUBLIC_IN_CALLS, dhtPublicInCalls ? TRUE_STR : FALSE_STR); #if HAVE_RINGNS a.emplace(libjami::Account::ConfProperties::RingNS::URI, nameServer); #endif @@ -197,6 +200,7 @@ JamiAccountConfig::fromMap(const std::map<std::string, std::string>& details) parseString(details, libjami::Account::ConfProperties::MANAGER_URI, managerUri); parseString(details, libjami::Account::ConfProperties::MANAGER_USERNAME, managerUsername); + parseBool(details, libjami::Account::ConfProperties::DHT::PUBLIC_IN_CALLS, dhtPublicInCalls); // parseString(details, libjami::Account::ConfProperties::USERNAME, username); parseString(details, libjami::Account::ConfProperties::ARCHIVE_PASSWORD, archive_password); diff --git a/src/jamidht/jamiaccount_config.h b/src/jamidht/jamiaccount_config.h index 565d14f8b161db056f60a0039c26ec17d4ec7764..ce84ae430c603ee69fd1ef10429545285178af17 100644 --- a/src/jamidht/jamiaccount_config.h +++ b/src/jamidht/jamiaccount_config.h @@ -75,6 +75,8 @@ struct JamiAccountConfig : public SipAccountBaseConfig { std::string receipt {}; std::vector<uint8_t> receiptSignature {}; + + bool dhtPublicInCalls {true}; }; } diff --git a/test/unitTest/call/call.cpp b/test/unitTest/call/call.cpp index b2b42906e78f650bf47adf45dd0795394faf566f..242d224a7a1a5b0e5bee72eaa8d36025be3958b8 100644 --- a/test/unitTest/call/call.cpp +++ b/test/unitTest/call/call.cpp @@ -73,6 +73,7 @@ private: void testSocketInfos(); void testInvalidTurn(); void testTransfer(); + void testDhtPublicInCall(); CPPUNIT_TEST_SUITE(CallTest); CPPUNIT_TEST(testCall); @@ -83,6 +84,7 @@ private: CPPUNIT_TEST(testSocketInfos); CPPUNIT_TEST(testInvalidTurn); CPPUNIT_TEST(testTransfer); + CPPUNIT_TEST(testDhtPublicInCall); CPPUNIT_TEST_SUITE_END(); }; @@ -566,6 +568,50 @@ CallTest::testTransfer() Manager::instance().hangupCall(carlaId, carlaCallId); CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return aliceCallStopped.load(); })); } + +void +CallTest::testDhtPublicInCall() +{ + auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); + auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); + auto bobUri = bobAccount->getUsername(); + auto aliceUri = aliceAccount->getUsername(); + + std::mutex mtx; + std::unique_lock<std::mutex> lk {mtx}; + std::condition_variable cv; + std::map<std::string, std::shared_ptr<libjami::CallbackWrapperBase>> confHandlers; + std::atomic_bool callReceived {false}; + std::atomic<int> callStopped {0}; + // Watch signals + confHandlers.insert(libjami::exportable_callback<libjami::CallSignal::IncomingCallWithMedia>( + [&](const std::string&, + const std::string&, + const std::string&, + const std::vector<std::map<std::string, std::string>>&) { + callReceived = true; + cv.notify_one(); + })); + confHandlers.insert(libjami::exportable_callback<libjami::CallSignal::StateChange>( + [&](const std::string&, const std::string&, const std::string& state, signed) { + if (state == "OVER") { + callStopped += 1; + if (callStopped == 2) + cv.notify_one(); + } + })); + libjami::registerSignalHandlers(confHandlers); + + std::map<std::string, std::string> details; + details["DHT.PublicInCalls"] = "FALSE"; + libjami::setAccountDetails(bobId, details); + + JAMI_INFO("Start call between alice and Bob"); + auto call = libjami::placeCallWithMedia(aliceId, bobUri, {}); + + CPPUNIT_ASSERT(!cv.wait_for(lk, 15s, [&] { return callReceived.load(); })); +} + } // namespace test } // namespace jami