From aa611bde50d7b65909afc4b3058c4da10c760d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Sat, 15 Oct 2016 20:07:27 -0400 Subject: [PATCH] network engine: cleanup --- src/network_engine.cpp | 47 ++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/src/network_engine.cpp b/src/network_engine.cpp index abfa0569..62c432c5 100644 --- a/src/network_engine.cpp +++ b/src/network_engine.cpp @@ -205,34 +205,35 @@ NetworkEngine::connectivityChanged(sa_family_t af) } void -NetworkEngine::requestStep(std::shared_ptr<Request> req) +NetworkEngine::requestStep(std::shared_ptr<Request> sreq) { - if (not req->pending()) { - if (req->cancelled()) - requests.erase(req->tid); + auto& req = *sreq; + if (not req.pending()) { + if (req.cancelled()) + requests.erase(req.tid); return; } auto now = scheduler.time(); - if (req->isExpired(now)) { - DHT_LOG.ERR("[node %s] expired !", req->node->toString().c_str()); - req->node->setExpired(); - requests.erase(req->tid); + auto& node = *req.node; + if (req.isExpired(now)) { + DHT_LOG.ERR("[node %s] expired !", node.toString().c_str()); + node.setExpired(); + requests.erase(req.tid); return; - } else if (req->attempt_count == 1) { - req->on_expired(*req, false); + } else if (req.attempt_count == 1) { + req.on_expired(req, false); } - send((char*)req->msg.data(), req->msg.size(), - (req->node->reply_time >= now - UDP_REPLY_TIME) ? 0 : MSG_CONFIRM, - req->node->addr); - ++req->attempt_count; - req->last_try = now; - std::weak_ptr<Request> wreq = req; - scheduler.add(req->last_try + Node::MAX_RESPONSE_TIME, [this,wreq]() { - if (auto req = wreq.lock()) { + send((char*)req.msg.data(), req.msg.size(), + (node.reply_time >= now - UDP_REPLY_TIME) ? 0 : MSG_CONFIRM, + node.addr); + ++req.attempt_count; + req.last_try = now; + std::weak_ptr<Request> wreq = sreq; + scheduler.add(req.last_try + Node::MAX_RESPONSE_TIME, [this,wreq] { + if (auto req = wreq.lock()) requestStep(req); - } }); } @@ -269,13 +270,9 @@ NetworkEngine::rateLimit(const SockAddr& addr) } } - // invoke per IP rate limiter auto it = address_rate_limiter.emplace(addr, IpLimiter{}); - if (not it.first->second.limit(now)) - return false; - - // invoke global limiter - return rate_limiter.limit(now); + // invoke per IP, then global rate limiter + return it.first->second.limit(now) and rate_limiter.limit(now); } bool -- GitLab