diff --git a/include/opendht/network_engine.h b/include/opendht/network_engine.h index 331d5d34..f0007b09 100644 --- a/include/opendht/network_engine.h +++ b/include/opendht/network_engine.h @@ -250,28 +250,11 @@ public: * @param nodes The ipv4 closest nodes. * @param nodes6 The ipv6 closest nodes. * @param values The values to send. + * @param version If version = 1, a request will be used to answer to the listener */ void tellListener(Sp n, Tid socket_id, const InfoHash& hash, want_t want, const Blob& ntoken, std::vector>&& nodes, std::vector>&& nodes6, - std::vector>&& values, const Query& q); - - /** - * Sends values (with closest nodes) to a listener (if version == 1) - * - * @note This deprecates tellListener - * @param n The node - * @param socket_id Socket id linked to the listener - * @param hash The hash watched by the listener - * @param want Wether to send ipv4 and/or ipv6 nodes. - * @param ntoken Listen security token. - * @param nodes The ipv4 closest nodes. - * @param nodes6 The ipv6 closest nodes. - * @param values The values to send. - * @param q The query - */ - void updateValues(Sp n, Tid socket_id, const InfoHash& hash, want_t want, const Blob& ntoken, - std::vector>&& nodes, std::vector>&& nodes6, - std::vector>&& values, const Query& q); + std::vector>&& values, const Query& q, int version); void tellListenerRefreshed(Sp n, Tid socket_id, const InfoHash& hash, const Blob& ntoken, const std::vector& values); void tellListenerExpired(Sp n, Tid socket_id, const InfoHash& hash, const Blob& ntoken, const std::vector& values); diff --git a/src/dht.cpp b/src/dht.cpp index a9113a3b..cb970591 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -1200,13 +1200,8 @@ Dht::storageChanged(const InfoHash& id, Storage& st, ValueStorage& v, bool newVa std::vector> vals {}; vals.push_back(v.data); Blob ntoken = makeToken(node_listeners.first->getAddr(), false); - if (l.second.version == 1) { - network_engine.updateValues(node_listeners.first, l.first, id, 0, ntoken, {}, {}, - std::move(vals), l.second.query); - } else { - network_engine.tellListener(node_listeners.first, l.first, id, 0, ntoken, {}, {}, - std::move(vals), l.second.query); - } + network_engine.tellListener(node_listeners.first, l.first, id, 0, ntoken, {}, {}, + std::move(vals), l.second.query, l.second.version); } } } @@ -1280,7 +1275,7 @@ Dht::storageAddListener(const InfoHash& id, const Sp& node, size_t socket_ if (not vals.empty()) { network_engine.tellListener(node, socket_id, id, WANT4 | WANT6, makeToken(node->getAddr(), false), dht4.buckets.findClosestNodes(id, now, TARGET_NODES), dht6.buckets.findClosestNodes(id, now, TARGET_NODES), - std::move(vals), query); + std::move(vals), query, version); } node_listeners.emplace(socket_id, Listener {now, std::forward(query), version}); } diff --git a/src/network_engine.cpp b/src/network_engine.cpp index 6f87b8ff..ce3e79b8 100644 --- a/src/network_engine.cpp +++ b/src/network_engine.cpp @@ -123,26 +123,15 @@ void NetworkEngine::tellListener(Sp node, Tid socket_id, const InfoHash& hash, want_t want, const Blob& ntoken, std::vector>&& nodes, std::vector>&& nodes6, std::vector>&& values, - const Query& query) + const Query& query, int version) { auto nnodes = bufferNodes(node->getFamily(), hash, want, nodes, nodes6); try { - sendNodesValues(node->getAddr(), socket_id, nnodes.first, nnodes.second, values, query, ntoken); - } catch (const std::overflow_error& e) { - if (logger_) - logger_->e("Can't send value: buffer not large enough !"); - } -} - -void -NetworkEngine::updateValues(Sp node, Tid socket_id, const InfoHash& hash, want_t want, - const Blob& ntoken, std::vector>&& nodes, - std::vector>&& nodes6, std::vector>&& values, - const Query& query) -{ - auto nnodes = bufferNodes(node->getFamily(), hash, want, nodes, nodes6); - try { - sendUpdateValues(node, hash, values, scheduler.time(), ntoken, socket_id); + if (version == 1) { + sendUpdateValues(node, hash, values, scheduler.time(), ntoken, socket_id); + } else { + sendNodesValues(node->getAddr(), socket_id, nnodes.first, nnodes.second, values, query, ntoken); + } } catch (const std::overflow_error& e) { if (logger_) logger_->e("Can't send value: buffer not large enough !"); @@ -1219,23 +1208,8 @@ NetworkEngine::sendUpdateValues(Sp n, auto req = std::make_shared(MessageType::UpdateValue, tid.toInt(), n, Blob(buffer.data(), buffer.data() + buffer.size()), - [=](const Request& req_status, ParsedMessage&& msg) { /* on done */ - if (msg.value_id == Value::INVALID_ID) { - if (logger_) - logger_->d(infohash, "Unknown search or announce!"); - } else { - if (on_done) { - RequestAnswer answer {}; - answer.vid = msg.value_id; - on_done(req_status, std::move(answer)); - } - } - }, - [=](const Request& req_status, bool done) { /* on expired */ - if (on_expired) { - on_expired(req_status, done); - } - } + [=](const Request&, ParsedMessage&&) { /* on done */ }, + [=](const Request&, bool) { /* on expired */ } ); req->parts = std::move(v); sendRequest(req);