Skip to content
Snippets Groups Projects
Commit 441cad2e authored by Adrien Béraud's avatar Adrien Béraud
Browse files

bootstrap: carry sockaddr length

parent 955b68a4
Branches
Tags
No related merge requests found
...@@ -79,7 +79,7 @@ public: ...@@ -79,7 +79,7 @@ public:
void putEncrypted(InfoHash hash, InfoHash to, Value&& value, Dht::DoneCallback cb=nullptr); 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 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 bootstrap(const std::vector<Dht::NodeExport>& nodes);
void dumpTables() const void dumpTables() const
......
...@@ -334,12 +334,12 @@ DhtRunner::putEncrypted(const std::string& key, InfoHash to, Value&& value, Dht: ...@@ -334,12 +334,12 @@ DhtRunner::putEncrypted(const std::string& key, InfoHash to, Value&& value, Dht:
} }
void 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); std::lock_guard<std::mutex> lck(storage_mtx);
pending_ops.emplace([=](SecureDht& dht) { pending_ops.emplace([=](SecureDht& dht) {
for (auto& node : nodes) for (auto& node : nodes)
dht.pingNode((sockaddr*)&node, sizeof(node)); dht.pingNode((sockaddr*)&node.first, node.second);
}); });
cv.notify_all(); cv.notify_all();
} }
......
...@@ -114,7 +114,7 @@ main(int argc, char **argv) ...@@ -114,7 +114,7 @@ main(int argc, char **argv)
if (!port) if (!port)
port = 4222; port = 4222;
std::vector<sockaddr_storage> bootstrap_nodes {}; std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap_nodes {};
while (i < argc) { while (i < argc) {
addrinfo hints; addrinfo hints;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
...@@ -131,8 +131,8 @@ main(int argc, char **argv) ...@@ -131,8 +131,8 @@ main(int argc, char **argv)
infop = info; infop = info;
while (infop) { while (infop) {
sockaddr_storage tmp; sockaddr_storage tmp;
memcpy(&tmp, infop->ai_addr, infop->ai_addrlen); std::copy_n((uint8_t*)infop->ai_addr, infop->ai_addrlen, (uint8_t*)&tmp);
bootstrap_nodes.push_back(tmp); bootstrap_nodes.emplace_back(tmp, infop->ai_addrlen);
infop = infop->ai_next; infop = infop->ai_next;
} }
freeaddrinfo(info); freeaddrinfo(info);
......
...@@ -99,7 +99,7 @@ main(int argc, char **argv) ...@@ -99,7 +99,7 @@ main(int argc, char **argv)
if (!port) if (!port)
port = 4222; port = 4222;
std::vector<sockaddr_storage> bootstrap_nodes {}; std::vector<std::pair<sockaddr_storage, socklen_t>> bootstrap_nodes {};
while (i < argc) { while (i < argc) {
addrinfo hints; addrinfo hints;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
...@@ -116,8 +116,8 @@ main(int argc, char **argv) ...@@ -116,8 +116,8 @@ main(int argc, char **argv)
infop = info; infop = info;
while (infop) { while (infop) {
sockaddr_storage tmp; sockaddr_storage tmp;
memcpy(&tmp, infop->ai_addr, infop->ai_addrlen); std::copy_n((uint8_t*)infop->ai_addr, infop->ai_addrlen, (uint8_t*)&tmp);
bootstrap_nodes.push_back(tmp); bootstrap_nodes.emplace_back(tmp, infop->ai_addrlen);
infop = infop->ai_next; infop = infop->ai_next;
} }
freeaddrinfo(info); freeaddrinfo(info);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment