diff --git a/src/jamidht/connectionmanager.cpp b/src/jamidht/connectionmanager.cpp index 06c7679a7d721a884815883dc052dd0092f485f4..2557ff9c80469c8e47092d7f630fb6e6bac2dfe6 100644 --- a/src/jamidht/connectionmanager.cpp +++ b/src/jamidht/connectionmanager.cpp @@ -317,15 +317,16 @@ ConnectionManager::Impl::connectDeviceStartIce( // Send connection request through DHT JAMI_DBG() << account << "Request connection to " << deviceId; - account.dht()->putEncrypted(dht::InfoHash::get(PeerConnectionRequest::key_prefix - + devicePk->getId().toString()), - devicePk, - value, - [deviceId](bool ok) { - if (!ok) - JAMI_ERR("Tried to send request to %s, but put failed", - deviceId.to_c_str()); - }); + account.dht()->putEncrypted( + dht::InfoHash::get(PeerConnectionRequest::key_prefix + devicePk->getId().toString()), + devicePk, + value, + [deviceId, accId = account.getAccountID()](bool ok) { + JAMI_DEBUG("[Account {:s}] Send connection request to {:s}. Put encrypted {:s}", + accId, + deviceId.toString(), + (ok ? "ok" : "failed")); + }); // Wait for call to onResponse() operated by DHT if (isDestroying_) return true; // This avoid to wait new negotiation when destroying @@ -682,46 +683,36 @@ ConnectionManager::Impl::onDhtConnected(const dht::crypto::PublicKey& devicePk) } else { JAMI_DBG() << "Received request from " << req.owner->getLongId(); } - // Hack: - // Note: This reschedule on the io pool should not be necessary - // however https://git.jami.net/savoirfairelinux/ring-daemon/-/issues/421 - // is a bit clueless and not reproductible in a debug env for now. However, - // the behavior makes me think this callback is blocked (maybe in getInfos()) - // and this must never happen. - dht::ThreadPool::io().run([w, req = std::move(req)] { - auto shared = w.lock(); - if (!shared) - return; - if (req.isAnswer) { - shared->onPeerResponse(req); - } else { - // Async certificate checking - shared->account.findCertificate( - req.from, - [w, req = std::move(req)]( - const std::shared_ptr<dht::crypto::Certificate>& cert) mutable { - auto shared = w.lock(); - if (!shared) - return; - dht::InfoHash peer_h; - if (AccountManager::foundPeerDevice(cert, peer_h)) { + if (req.isAnswer) { + shared->onPeerResponse(req); + } else { + // Async certificate checking + shared->account.findCertificate( + req.from, + [w, req = std::move(req)]( + const std::shared_ptr<dht::crypto::Certificate>& cert) mutable { + auto shared = w.lock(); + if (!shared) + return; + dht::InfoHash peer_h; + if (AccountManager::foundPeerDevice(cert, peer_h)) { #if TARGET_OS_IOS - if ((req.connType == "videoCall" || req.connType == "audioCall") && jami::Manager::instance().isIOSExtension) { - bool hasVideo = req.connType == "videoCall"; - emitSignal<DRing::ConversationSignal::CallConnectionRequest>( - shared->account.getAccountID(), peer_h.toString(), hasVideo); - return; - } -#endif - shared->onDhtPeerRequest(req, cert); - } else { - JAMI_WARN() << shared->account - << "Rejected untrusted connection request from " - << req.owner->getLongId(); + if ((req.connType == "videoCall" || req.connType == "audioCall") + && jami::Manager::instance().isIOSExtension) { + bool hasVideo = req.connType == "videoCall"; + emitSignal<DRing::ConversationSignal::CallConnectionRequest>( + shared->account.getAccountID(), peer_h.toString(), hasVideo); + return; } - }); - } - }); +#endif + shared->onDhtPeerRequest(req, cert); + } else { + JAMI_WARN() + << shared->account << "Rejected untrusted connection request from " + << req.owner->getLongId(); + } + }); + } return true; }, @@ -805,10 +796,11 @@ ConnectionManager::Impl::answerTo(IceTransport& ice, dht::InfoHash::get(PeerConnectionRequest::key_prefix + from->getId().toString()), from, value, - [from](bool ok) { - if (!ok) - JAMI_ERR("Tried to answer to connection request from %s, but put failed", - from->getLongId().to_c_str()); + [from, accId = account.getAccountID()](bool ok) { + JAMI_DEBUG("[Account {:s}] Answer to connection request from {:s}. Put encrypted {:s}", + accId, + from->getLongId().toString(), + (ok ? "ok" : "failed")); }); }