diff --git a/include/opendht/dht.h b/include/opendht/dht.h index beb7c51b96b2b12cea5d6ef11905c444e732f2aa..98a6c65e8fb121c6aa90f2d6767c03aa3952ee81 100644 --- a/include/opendht/dht.h +++ b/include/opendht/dht.h @@ -385,8 +385,9 @@ private: size_t total_store_size {0}; size_t max_store_size {DEFAULT_STORAGE_LIMIT}; - std::map<InfoHash, std::shared_ptr<Search>> searches4 {}; - std::map<InfoHash, std::shared_ptr<Search>> searches6 {}; + using SearchMap = std::map<InfoHash, std::shared_ptr<Search>>; + SearchMap searches4 {}; + SearchMap searches6 {}; uint16_t search_id {0}; // map a global listen token to IPv4, IPv6 specific listen tokens. @@ -462,6 +463,9 @@ private: // Searches + inline SearchMap& searches(sa_family_t af) { return af == AF_INET ? searches4 : searches6; } + inline const SearchMap& searches(sa_family_t af) const { return af == AF_INET ? searches4 : searches6; } + /** * Low-level method that will perform a search on the DHT for the specified * infohash (id), using the specified IP version (IPv4 or IPv6). diff --git a/src/dht.cpp b/src/dht.cpp index ad26fe5556a0f6aba64434ce85120ca380b0f978..0ea8af1420ab4266c239c9f1ca1389329ae4f957 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -1654,7 +1654,7 @@ Dht::search(const InfoHash& id, sa_family_t af, GetCallback gcb, QueryCallback q return {}; } - auto& srs = af == AF_INET ? searches4 : searches6; + auto& srs = searches(af); const auto& srp = srs.find(id); std::shared_ptr<Search> sr {}; @@ -1726,7 +1726,7 @@ Dht::announce(const InfoHash& id, created = std::min(now, created); storageStore(id, value, created); - auto& srs = af == AF_INET ? searches4 : searches6; + auto& srs = searches(af); auto srp = srs.find(id); auto sr = srp == srs.end() ? search(id, af) : srp->second; if (!sr) { @@ -1780,7 +1780,7 @@ Dht::listenTo(const InfoHash& id, sa_family_t af, GetCallback cb, Value::Filter // DHT_LOG_ERR("[search %s IPv%c] search_time is now in %lfs", sr->id.toString().c_str(), (sr->af == AF_INET) ? '4' : '6', print_dt(tm-clock::now())); //DHT_LOG_WARN("listenTo %s", id.toString().c_str()); - auto& srs = af == AF_INET ? searches4 : searches6; + auto& srs = searches(af); auto srp = srs.find(id); std::shared_ptr<Search> sr = (srp == srs.end()) ? search(id, af) : srp->second; if (!sr) @@ -2349,8 +2349,7 @@ Dht::connectivityChanged(sa_family_t af) for (auto& b : buckets(af)) b.time = time_point::min(); network_engine.connectivityChanged(af); - auto& searches = (af == AF_INET) ? searches4 : searches6; - for (auto& sp : searches) + for (auto& sp : searches(af)) for (auto& sn : sp.second->nodes) { for (auto& ls : sn.listenStatus) network_engine.cancelRequest(ls.second); @@ -2678,9 +2677,9 @@ Dht::getSearchLog(const InfoHash& id, sa_family_t af) const if (af == AF_UNSPEC) { out << getSearchLog(id, AF_INET) << getSearchLog(id, AF_INET); } else { - auto& searches = (af == AF_INET) ? searches4 : searches6; - auto sr = searches.find(id); - if (sr != searches.end()) + auto& srs = searches(af); + auto sr = srs.find(id); + if (sr != srs.end()) dumpSearch(*sr->second, out); } return out.str(); @@ -3110,7 +3109,7 @@ Dht::onError(std::shared_ptr<Request> req, DhtProtocolException e) { DHT_LOG.e(req->node->id, "[node %s] token flush", req->node->toString().c_str()); req->node->authError(); network_engine.cancelRequest(req); - for (auto& srp : req->node->getFamily() == AF_INET ? searches4 : searches6) { + for (auto& srp : searches(req->node->getFamily())) { auto& sr = srp.second; for (auto& n : sr->nodes) { if (n.node != req->node) continue;