From 0f49be34ffbee02b547825816be6e97aca0a58fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Thu, 20 May 2021 10:18:49 -0400
Subject: [PATCH] jamiaccount: compat: be able to add a contact if the trust
 request is not found

Change-Id: Ic336fd64f666debf3e1183fb705af65f82a4bdb7
---
 src/jamidht/account_manager.cpp | 11 +++++++----
 src/jamidht/account_manager.h   |  2 +-
 src/jamidht/jamiaccount.cpp     | 10 ++++++++--
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/jamidht/account_manager.cpp b/src/jamidht/account_manager.cpp
index 04cde3e5ce..3a4b8bddbf 100644
--- a/src/jamidht/account_manager.cpp
+++ b/src/jamidht/account_manager.cpp
@@ -377,22 +377,24 @@ AccountManager::onPeerCertificate(const std::shared_ptr<dht::crypto::Certificate
     return true;
 }
 
-void
+bool
 AccountManager::addContact(const std::string& uri, bool confirmed, const std::string& conversationId)
 {
     JAMI_WARN("AccountManager::addContact %d", confirmed);
     dht::InfoHash h(uri);
     if (not h) {
         JAMI_ERR("addContact: invalid contact URI");
-        return;
+        return false;
     }
     if (not info_) {
         JAMI_ERR("addContact(): account not loaded");
-        return;
+        return false;
     }
     if (info_->contacts->addContact(h, confirmed, conversationId)) {
         syncDevices();
+        return true;
     }
+    return false;
 }
 
 void
@@ -609,8 +611,9 @@ AccountManager::acceptTrustRequest(const std::string& from, bool includeConversa
                                         ? req[DRing::Account::TrustRequest::CONVERSATIONID]
                                         : "");
             syncDevices();
+            return true;
         }
-        return true;
+        return false;
     }
     return false;
 }
diff --git a/src/jamidht/account_manager.h b/src/jamidht/account_manager.h
index a1c6045d2b..ffdccb1515 100644
--- a/src/jamidht/account_manager.h
+++ b/src/jamidht/account_manager.h
@@ -212,7 +212,7 @@ public:
      * Add contact to the account contact list.
      * Set confirmed if we know the contact also added us.
      */
-    void addContact(const std::string& uri,
+    bool addContact(const std::string& uri,
                     bool confirmed = false,
                     const std::string& conversationId = "");
     void removeContact(const std::string& uri, bool banned = true);
diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index edea76f3d7..81e715eebe 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -3157,8 +3157,14 @@ bool
 JamiAccount::acceptTrustRequest(const std::string& from, bool includeConversation)
 {
     std::lock_guard<std::mutex> lock(configurationMutex_);
-    if (accountManager_)
-        return accountManager_->acceptTrustRequest(from, includeConversation);
+    if (accountManager_) {
+        if (!accountManager_->acceptTrustRequest(from, includeConversation)) {
+            // Note: unused for swarm
+            // Typically the case where the trust request doesn't exists, only incoming DHT messages
+            return accountManager_->addContact(from, true);
+        }
+        return true;
+    }
     JAMI_WARN("[Account %s] acceptTrustRequest: account not loaded", getAccountID().c_str());
     return false;
 }
-- 
GitLab