diff --git a/src/dht.cpp b/src/dht.cpp index d6b057e36933778a10730ab047bc8e4a49ec0636..989a4ac0b33c6978443a92f29bc5dfce8d97d7dd 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());