From c0612a1b2ce8cac9c4292e2614a74c2aaee8fd68 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simon=20D=C3=A9saulniers?= <sim.desaulniers@gmail.com>
Date: Fri, 14 Oct 2016 15:38:16 -0400
Subject: [PATCH] dht: use "refresh" operation for permanent put

---
 src/dht.cpp | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/dht.cpp b/src/dht.cpp
index cc5c909d..36a10eec 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -1277,11 +1277,8 @@ void Dht::searchSendAnnounceValue(const std::shared_ptr<Search>& sr) {
 
                                 /* only put the value if the node doesn't already have it */
                                 if (not hasValue or seq_no < a.value->seq) {
-                                    DHT_LOG_WARN("[search %s IPv%c] [node %s] sending 'put' (vid: %d)",
-                                            sr->id.toString().c_str(),
-                                            sr->af == AF_INET ? '4' : '6',
-                                            sn->node->toString().c_str(),
-                                            a.value->id);
+                                    DHT_LOG_WARN("[search %s] [node %s] sending 'put' (vid: %d)",
+                                            sr->id.toString().c_str(), sn->node->toString().c_str(), a.value->id);
                                     sn->acked[a.value->id] = network_engine.sendAnnounceValue(sn->node,
                                                                     sr->id,
                                                                     a.value,
@@ -1289,12 +1286,18 @@ void Dht::searchSendAnnounceValue(const std::shared_ptr<Search>& sr) {
                                                                     sn->token,
                                                                     onDone,
                                                                     onExpired);
+                                } else if (hasValue and a.permanent) {
+                                    DHT_LOG_WARN("[search %s] [node %s] sending 'refresh' (vid: %d)",
+                                            sr->id.toString().c_str(), sn->node->toString().c_str(), a.value->id);
+                                    sn->acked[a.value->id] = network_engine.sendRefreshValue(sn->node,
+                                                                    sr->id,
+                                                                    a.value->id,
+                                                                    sn->token,
+                                                                    onDone,
+                                                                    onExpired);
                                 } else {
-                                    DHT_LOG_WARN("[search %s IPv%c] [node %s] already has value (vid: %d). Aborting.",
-                                            sr->id.toString().c_str(),
-                                            sr->af == AF_INET ? '4' : '6',
-                                            sn->node->toString().c_str(),
-                                            a.value->id);
+                                    DHT_LOG.WARN("[search %s] [node %s] already has value (vid: %d). Aborting.",
+                                            sr->id.toString().c_str(), sn->node->toString().c_str(), a.value->id);
                                     auto ack_req = std::make_shared<Request>();
                                     ack_req->reply_time = now;
                                     sn->acked[a.value->id] = std::move(ack_req);
-- 
GitLab