From e18892fbd9142e58490c106daf29081fb0717200 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Fri, 17 Nov 2017 18:56:24 +0100
Subject: [PATCH] contrib: bump opendht to 1.5.0

* fix reported address issue
* fix SockAddr endianness issue
* fix memory leak
* minor performance improvements
* InfoHash: add operator bool()

Change-Id: I47ca3dedc1b96aa8082183eaf23fb9efc092b97a
---
 contrib/src/opendht/SHA512SUMS          |  2 +-
 contrib/src/opendht/fetch_and_patch.bat |  4 ++--
 contrib/src/opendht/rules.mak           |  2 +-
 src/ringdht/ringaccount.cpp             | 15 ++++++++-------
 src/ringdht/ringaccount.h               |  2 +-
 5 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/contrib/src/opendht/SHA512SUMS b/contrib/src/opendht/SHA512SUMS
index 655f36e2ed..cc4f242bf6 100644
--- a/contrib/src/opendht/SHA512SUMS
+++ b/contrib/src/opendht/SHA512SUMS
@@ -1 +1 @@
-af2a3be1305a47043b932339545da7c947266e3120b6bedea3d5c837c5a6d4eb55d85a3008ba0ca7e90501a2c4ca9bc84c3c3d7fb1b0f8e2a6bcd0d5fe1ba3dd  opendht-fcaaa01b2d40011df650cd092cb841e825c4e49c.tar.gz
+eb2ffc2662cd981a552ae19109260a2d675de748906f5e1037b85fe123cfbd2b4a714ef1428444f69828d5cd2405f7cb70cd53ad36c71b298d9930c49fca16ba  opendht-1.5.0.tar.gz
diff --git a/contrib/src/opendht/fetch_and_patch.bat b/contrib/src/opendht/fetch_and_patch.bat
index db3bf9815e..0678217de4 100644
--- a/contrib/src/opendht/fetch_and_patch.bat
+++ b/contrib/src/opendht/fetch_and_patch.bat
@@ -1,6 +1,6 @@
 set BUILD=%SRC%..\build
 
-set OPENDHT_VERSION=fcaaa01b2d40011df650cd092cb841e825c4e49c
+set OPENDHT_VERSION=1.5.0
 set OPENDHT_URL=https://github.com/savoirfairelinux/opendht/archive/%OPENDHT_VERSION%.tar.gz
 
 mkdir %BUILD%
@@ -19,4 +19,4 @@ cd %BUILD%\opendht
 
 git apply --reject --whitespace=fix %SRC%\opendht\opendht-uwp.patch
 
-cd %SRC%
\ No newline at end of file
+cd %SRC%
diff --git a/contrib/src/opendht/rules.mak b/contrib/src/opendht/rules.mak
index 981e806dee..4443a6fc03 100644
--- a/contrib/src/opendht/rules.mak
+++ b/contrib/src/opendht/rules.mak
@@ -1,5 +1,5 @@
 # OPENDHT
-OPENDHT_VERSION := fcaaa01b2d40011df650cd092cb841e825c4e49c
+OPENDHT_VERSION := 1.5.0
 OPENDHT_URL := https://github.com/savoirfairelinux/opendht/archive/$(OPENDHT_VERSION).tar.gz
 
 PKGS += opendht
diff --git a/src/ringdht/ringaccount.cpp b/src/ringdht/ringaccount.cpp
index 796b81ed04..65c1106e76 100644
--- a/src/ringdht/ringaccount.cpp
+++ b/src/ringdht/ringaccount.cpp
@@ -1848,32 +1848,33 @@ RingAccount::doRegister()
 }
 
 
-std::vector<std::pair<sockaddr_storage, socklen_t>>
+std::vector<dht::SockAddr>
 RingAccount::loadBootstrap() const
 {
-    std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap;
+    std::vector<dht::SockAddr> bootstrap;
     if (!hostname_.empty()) {
         std::stringstream ss(hostname_);
         std::string node_addr;
         while (std::getline(ss, node_addr, ';')) {
-            auto ips = ip_utils::getAddrList(node_addr);
+            auto ips = dht::SockAddr::resolve(node_addr);
             if (ips.empty()) {
                 IpAddr resolved(node_addr);
                 if (resolved) {
                     if (resolved.getPort() == 0)
                         resolved.setPort(DHT_DEFAULT_PORT);
-                    bootstrap.emplace_back(resolved, resolved.getLength());
+                    bootstrap.emplace_back(static_cast<const sockaddr*>(resolved), resolved.getLength());
                 }
             } else {
+                bootstrap.reserve(bootstrap.size() + ips.size());
                 for (auto& ip : ips) {
                     if (ip.getPort() == 0)
                         ip.setPort(DHT_DEFAULT_PORT);
-                    bootstrap.emplace_back(ip, ip.getLength());
+                    bootstrap.emplace_back(std::move(ip));
                 }
             }
         }
-        for (auto ip : bootstrap)
-            RING_DBG("Bootstrap node: %s", IpAddr(ip.first).toString(true).c_str());
+        for (const auto& ip : bootstrap)
+            RING_DBG("Bootstrap node: %s", ip.toString().c_str());
     }
     return bootstrap;
 }
diff --git a/src/ringdht/ringaccount.h b/src/ringdht/ringaccount.h
index d5eb8a0a91..e0769f889e 100644
--- a/src/ringdht/ringaccount.h
+++ b/src/ringdht/ringaccount.h
@@ -505,7 +505,7 @@ class RingAccount : public SIPAccountBase {
         void updateArchive(AccountArchive& content) const;
         void saveArchive(AccountArchive& content, const std::string& pwd);
         AccountArchive readArchive(const std::string& pwd) const;
-        std::vector<std::pair<sockaddr_storage, socklen_t>> loadBootstrap() const;
+        std::vector<dht::SockAddr> loadBootstrap() const;
 
         static std::pair<std::string, std::string> saveIdentity(const dht::crypto::Identity id, const std::string& path, const std::string& name);
         void saveNodes(const std::vector<dht::NodeExport>&) const;
-- 
GitLab