diff --git a/include/opendht/dht.h b/include/opendht/dht.h index 9e5bc7fedc7d008533e36f04391d68675a72077b..9a21b308b2589041837b486048f03457da164df6 100644 --- a/include/opendht/dht.h +++ b/include/opendht/dht.h @@ -78,6 +78,7 @@ struct Node { return print_addr(ss, sslen); } bool isExpired(time_point now) const; + bool isExpired() const { return isExpired(clock::now()); } bool isGood(time_point now) const; bool isMessagePending(time_point now) const; NodeExport exportNode() const { return NodeExport {id, ss, sslen}; } @@ -584,7 +585,7 @@ private: bool removeExpiredNode(time_point now); - std::vector<std::shared_ptr<Node>> getNodes(time_point now) const; + std::vector<std::shared_ptr<Node>> getNodes() const; }; struct ValueStorage { diff --git a/src/dht.cpp b/src/dht.cpp index 1b95ce7b1b8fd38e318b04f9da79d310138f9bf1..1279386d52682e7136c7e16543d86f47fae27a26 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -760,18 +760,12 @@ Dht::Search::insertNode(std::shared_ptr<Node> node, time_point now, const Blob& } std::vector<std::shared_ptr<Node>> -Dht::Search::getNodes(time_point now) const +Dht::Search::getNodes() const { std::vector<std::shared_ptr<Node>> ret {}; - ret.reserve(TARGET_NODES); - //size_t i = 0; - for (const auto& sn : nodes) { - if (not sn.node->isExpired(now) and sn.isSynced(now)) { - ret.emplace_back(sn.node); - /*if (++i == TARGET_NODES) - break;*/ - } - } + ret.reserve(nodes.size()); + for (const auto& sn : nodes) + ret.emplace_back(sn.node); return ret; } @@ -839,7 +833,7 @@ Dht::searchStep(Search& sr) for (auto b = sr.callbacks.begin(); b != sr.callbacks.end();) { if (sr.isDone(*b, now)) { if (b->done_cb) - b->done_cb(true, sr.getNodes(now)); + b->done_cb(true, sr.getNodes()); b = sr.callbacks.erase(b); } else @@ -2336,7 +2330,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc if (!a.callback || !a.value || a.value->id != value_id) continue; if (sr->isAnnounced(value_id, getType(a.value->type), now)) { - a.callback(true, sr->getNodes(now)); + a.callback(true, sr->getNodes()); a.callback = nullptr; } } diff --git a/tools/python/opendht.pyx b/tools/python/opendht.pyx index 9478f6f659b89212dee003d0ce08a775c2cf5991..8f4f8787e82d1a51c20ec4a9b1ae4ad3a47720be 100644 --- a/tools/python/opendht.pyx +++ b/tools/python/opendht.pyx @@ -72,6 +72,7 @@ cdef extern from "opendht/dht.h" namespace "dht": Node() except + InfoHash getId() const string getAddrStr() const + bool isExpired() const ctypedef bool (*GetCallbackRaw)(shared_ptr[Value] values, void *user_data) ctypedef void (*DoneCallbackRaw)(bool done, vector[shared_ptr[Node]]* nodes, void *user_data) cdef cppclass Dht: @@ -141,6 +142,8 @@ cdef class PyNode(_WithID): return h def getAddr(self): return self._node.get().getAddrStr() + def isExpired(self): + return self._node.get().isExpired() cdef class PyNodeEntry(_WithID): cdef pair[InfoHash, shared_ptr[Node]] _v