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