From f836d41dad3b29a42c954ac98048cdf54416b249 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Thu, 12 Aug 2021 11:34:51 -0400
Subject: [PATCH] contact_list: fix isActive() when remove/re-add a contact

Because time_t is in seconds, re-adding a contact just after
removing it can cause isActive() to be false (because
removed == added).

Change-Id: I25a9fa1d6d3cadb152c2d15453179ecf364d0737
GitLab: https://git.jami.net/savoirfairelinux/ring-project/-/issues/1282
---
 src/jamidht/contact_list.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp
index 1d88a227a7..351bc2b66b 100644
--- a/src/jamidht/contact_list.cpp
+++ b/src/jamidht/contact_list.cpp
@@ -81,6 +81,10 @@ ContactList::addContact(const dht::InfoHash& h, bool confirmed, const std::strin
     else if (c->second.isActive() and c->second.confirmed == confirmed)
         return false;
     c->second.added = std::time(nullptr);
+    // NOTE: because we can re-add a contact after removing it
+    // we should reset removed (as not removed anymore). This fix isActive()
+    // if addContact is called just after removeContact during the same second
+    c->second.removed = 0;
     c->second.conversationId = conversationId;
     c->second.confirmed |= confirmed;
     auto hStr = h.toString();
-- 
GitLab