From 01f2ad9ea46ef0a69fb50d30da168336aeda1215 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Mon, 11 Nov 2019 11:54:44 -0500
Subject: [PATCH] tools: show connectivity change in log

---
 include/opendht/callbacks.h | 7 +++++++
 tools/dhtchat.cpp           | 8 +-------
 tools/tools_common.h        | 5 +++++
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/include/opendht/callbacks.h b/include/opendht/callbacks.h
index 25a8f457..21fad568 100644
--- a/include/opendht/callbacks.h
+++ b/include/opendht/callbacks.h
@@ -44,6 +44,13 @@ enum class NodeStatus {
     Connected     // 1+ good nodes
 };
 
+inline constexpr const char*
+statusToStr(NodeStatus status) {
+    return status == NodeStatus::Connected  ? "connected"  : (
+           status == NodeStatus::Connecting ? "connecting" :
+                                              "disconnected");
+}
+
 struct OPENDHT_PUBLIC NodeStats {
     unsigned good_nodes {0},
              dubious_nodes {0},
diff --git a/tools/dhtchat.cpp b/tools/dhtchat.cpp
index 2083287d..baed3b61 100644
--- a/tools/dhtchat.cpp
+++ b/tools/dhtchat.cpp
@@ -57,19 +57,13 @@ main(int argc, char **argv)
 
     DhtRunner dht;
     try {
+        params.generate_identity = true;
         auto dhtConf = getDhtConfig(params);
         dht.run(params.port, dhtConf.first, std::move(dhtConf.second));
 
         if (not params.bootstrap.first.empty())
             dht.bootstrap(params.bootstrap.first.c_str(), params.bootstrap.second.c_str());
 
-#ifdef OPENDHT_PROXY_CLIENT
-    if (!params.proxyclient.empty()) {
-        dht.setProxyServer(params.proxyclient);
-        dht.enableProxy(true);
-    }
-#endif //OPENDHT_PROXY_CLIENT
-
         print_node_info(dht, params);
         std::cout << "  type 'c {hash}' to join a channel" << std::endl << std::endl;
 
diff --git a/tools/tools_common.h b/tools/tools_common.h
index 352a6edc..ff6999a3 100644
--- a/tools/tools_common.h
+++ b/tools/tools_common.h
@@ -171,6 +171,11 @@ getDhtConfig(dht_params& params)
         else
             context.logger = dht::log::getStdLogger();
     }
+    if (context.logger) {
+        context.statusChangedCallback = [logger = *context.logger](dht::NodeStatus status4, dht::NodeStatus status6) {
+            logger.WARN("Connectivity changed: IPv4: %s, IPv6: %s", dht::statusToStr(status4), dht::statusToStr(status6));
+        };
+    }
     return {std::move(config), std::move(context)};
 }
 
-- 
GitLab