From 441cad2e86c17eb5ebbada74518d479f52f63902 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Wed, 18 Mar 2015 15:06:06 -0400
Subject: [PATCH] bootstrap: carry sockaddr length

---
 include/opendht/dhtrunner.h | 2 +-
 src/dhtrunner.cpp           | 4 ++--
 tools/dhtchat.cpp           | 6 +++---
 tools/dhtnode.cpp           | 6 +++---
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h
index bbe13b8c..956d2158 100644
--- a/include/opendht/dhtrunner.h
+++ b/include/opendht/dhtrunner.h
@@ -79,7 +79,7 @@ public:
     void putEncrypted(InfoHash hash, InfoHash to, Value&& value, Dht::DoneCallback cb=nullptr);
     void putEncrypted(const std::string& key, InfoHash to, Value&& value, Dht::DoneCallback cb=nullptr);
 
-    void bootstrap(const std::vector<sockaddr_storage>& nodes);
+    void bootstrap(const std::vector<std::pair<sockaddr_storage, socklen_t>>& nodes);
     void bootstrap(const std::vector<Dht::NodeExport>& nodes);
 
     void dumpTables() const
diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 0f325e53..ba563e85 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -334,12 +334,12 @@ DhtRunner::putEncrypted(const std::string& key, InfoHash to, Value&& value, Dht:
 }
 
 void
-DhtRunner::bootstrap(const std::vector<sockaddr_storage>& nodes)
+DhtRunner::bootstrap(const std::vector<std::pair<sockaddr_storage, socklen_t>>& nodes)
 {
     std::lock_guard<std::mutex> lck(storage_mtx);
     pending_ops.emplace([=](SecureDht& dht) {
         for (auto& node : nodes)
-            dht.pingNode((sockaddr*)&node, sizeof(node));
+            dht.pingNode((sockaddr*)&node.first, node.second);
     });
     cv.notify_all();
 }
diff --git a/tools/dhtchat.cpp b/tools/dhtchat.cpp
index 0bbae5b9..e543877b 100644
--- a/tools/dhtchat.cpp
+++ b/tools/dhtchat.cpp
@@ -114,7 +114,7 @@ main(int argc, char **argv)
     if (!port)
         port = 4222;
 
-    std::vector<sockaddr_storage> bootstrap_nodes {};
+    std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap_nodes {};
     while (i < argc) {
         addrinfo hints;
         memset(&hints, 0, sizeof(hints));
@@ -131,8 +131,8 @@ main(int argc, char **argv)
         infop = info;
         while (infop) {
             sockaddr_storage tmp;
-            memcpy(&tmp, infop->ai_addr, infop->ai_addrlen);
-            bootstrap_nodes.push_back(tmp);
+            std::copy_n((uint8_t*)infop->ai_addr, infop->ai_addrlen, (uint8_t*)&tmp);
+            bootstrap_nodes.emplace_back(tmp, infop->ai_addrlen);
             infop = infop->ai_next;
         }
         freeaddrinfo(info);
diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp
index decef155..2a6444d1 100644
--- a/tools/dhtnode.cpp
+++ b/tools/dhtnode.cpp
@@ -99,7 +99,7 @@ main(int argc, char **argv)
     if (!port)
         port = 4222;
 
-    std::vector<sockaddr_storage> bootstrap_nodes {};
+    std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap_nodes {};
     while (i < argc) {
         addrinfo hints;
         memset(&hints, 0, sizeof(hints));
@@ -116,8 +116,8 @@ main(int argc, char **argv)
         infop = info;
         while (infop) {
             sockaddr_storage tmp;
-            memcpy(&tmp, infop->ai_addr, infop->ai_addrlen);
-            bootstrap_nodes.push_back(tmp);
+            std::copy_n((uint8_t*)infop->ai_addr, infop->ai_addrlen, (uint8_t*)&tmp);
+            bootstrap_nodes.emplace_back(tmp, infop->ai_addrlen);
             infop = infop->ai_next;
         }
         freeaddrinfo(info);
-- 
GitLab