From 5815fa01f753fb8efe7e569349d8a053519b0da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 16 Oct 2015 17:13:18 -0400 Subject: [PATCH] dht: fix backward compatibility Pack "token" as ARRAY, as it was with msgpack 1.0, instead of BIN. --- src/dht.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/dht.cpp b/src/dht.cpp index d6b057e3..989a4ac0 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -2795,6 +2795,14 @@ Dht::sendFindNode(const sockaddr *sa, socklen_t salen, TransId tid, return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen); } +void +packToken(msgpack::packer<msgpack::sbuffer>& pk, Blob token) +{ + pk.pack_array(token.size()); + for (uint8_t b : token) + pk.pack(b); +} + int Dht::sendNodesValues(const sockaddr *sa, socklen_t salen, TransId tid, const uint8_t *nodes, unsigned nodes_len, @@ -2820,7 +2828,7 @@ Dht::sendNodesValues(const sockaddr *sa, socklen_t salen, TransId tid, pk.pack_bin_body((const char*)nodes6, nodes6_len); } if (not token.empty()) { - pk.pack(std::string("token")); pk.pack(token); + pk.pack(std::string("token")); packToken(pk, token); } if (not st.empty()) { // We treat the storage as a circular list, and serve a randomly @@ -2989,7 +2997,7 @@ Dht::sendListen(const sockaddr* sa, socklen_t salen, TransId tid, pk.pack(std::string("a")); pk.pack_map(3); pk.pack(std::string("id")); pk.pack(myid); pk.pack(std::string("h")); pk.pack(infohash); - pk.pack(std::string("token")); pk.pack(token); + pk.pack(std::string("token")); packToken(pk, token); pk.pack(std::string("q")); pk.pack(std::string("listen")); pk.pack(std::string("t")); pk.pack_bin(tid.size()); @@ -3034,7 +3042,7 @@ Dht::sendAnnounceValue(const sockaddr *sa, socklen_t salen, TransId tid, pk.pack(std::string("id")); pk.pack(myid); pk.pack(std::string("h")); pk.pack(infohash); pk.pack(std::string("values")); pk.pack_array(1); pk.pack(value); - pk.pack(std::string("token")); pk.pack(token); + pk.pack(std::string("token")); packToken(pk, token); pk.pack(std::string("q")); pk.pack(std::string("put")); pk.pack(std::string("t")); pk.pack_bin(tid.size()); -- GitLab