diff --git a/include/opendht/dht.h b/include/opendht/dht.h index c2403c34..50215b47 100644 --- a/include/opendht/dht.h +++ b/include/opendht/dht.h @@ -504,7 +504,7 @@ private: * @param query The query sent to the node. */ void searchNodeGetDone(const net::Request& status, - net::NetworkEngine::RequestAnswer&& answer, + net::RequestAnswer&& answer, std::weak_ptr ws, Sp query); @@ -559,42 +559,42 @@ private: /* when our address is reported by a distant peer. */ void onReportedAddr(const InfoHash& id, const SockAddr&); /* when we receive a ping request */ - net::NetworkEngine::RequestAnswer onPing(Sp node); + net::RequestAnswer onPing(Sp node); /* when we receive a "find node" request */ - net::NetworkEngine::RequestAnswer onFindNode(Sp node, const InfoHash& hash, want_t want); + net::RequestAnswer onFindNode(Sp node, const InfoHash& hash, want_t want); void onFindNodeDone(const Sp& status, - net::NetworkEngine::RequestAnswer& a, + net::RequestAnswer& a, Sp sr); /* when we receive a "get values" request */ - net::NetworkEngine::RequestAnswer onGetValues(Sp node, + net::RequestAnswer onGetValues(Sp node, const InfoHash& hash, want_t want, const Query& q); void onGetValuesDone(const Sp& status, - net::NetworkEngine::RequestAnswer& a, + net::RequestAnswer& a, Sp& sr, const Sp& orig_query); /* when we receive a listen request */ - net::NetworkEngine::RequestAnswer onListen(Sp node, + net::RequestAnswer onListen(Sp node, const InfoHash& hash, const Blob& token, size_t socket_id, const Query& query); void onListenDone(const Sp& status, - net::NetworkEngine::RequestAnswer& a, + net::RequestAnswer& a, Sp& sr); /* when we receive an announce request */ - net::NetworkEngine::RequestAnswer onAnnounce(Sp node, + net::RequestAnswer onAnnounce(Sp node, const InfoHash& hash, const Blob& token, const std::vector>& v, const time_point& created); - net::NetworkEngine::RequestAnswer onRefresh(Sp node, + net::RequestAnswer onRefresh(Sp node, const InfoHash& hash, const Blob& token, const Value::Id& vid); void onAnnounceDone(const Sp& status, - net::NetworkEngine::RequestAnswer& a, + net::RequestAnswer& a, Sp& sr); }; diff --git a/include/opendht/network_engine.h b/include/opendht/network_engine.h index dee6584b..a46b5918 100644 --- a/include/opendht/network_engine.h +++ b/include/opendht/network_engine.h @@ -81,6 +81,20 @@ private: struct ParsedMessage; +/** + * Answer for a request. + */ +struct RequestAnswer { + Blob ntoken {}; + Value::Id vid {}; + std::vector> values {}; + std::vector> fields {}; + std::vector> nodes4 {}; + std::vector> nodes6 {}; + RequestAnswer() {} + RequestAnswer(ParsedMessage&& msg); +}; + /*! * @class NetworkEngine * @brief An abstraction of communication protocol on the network. @@ -101,26 +115,6 @@ struct ParsedMessage; */ class NetworkEngine final { -public: - /*! - * @class RequestAnswer - * @brief Answer for a request. - * @details - * Answer for a request to be (de)serialized. Used for reponding to a node - * and looking up the response from a node. - */ - struct RequestAnswer { - Blob ntoken {}; - Value::Id vid {}; - std::vector> values {}; - std::vector> fields {}; - std::vector> nodes4 {}; - std::vector> nodes6 {}; - RequestAnswer() {} - RequestAnswer(ParsedMessage&& msg); - }; - - private: /** * Called when we receive an error message. diff --git a/src/dht.cpp b/src/dht.cpp index 71569097..878625e3 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -218,7 +218,7 @@ Dht::expireSearches() void Dht::searchNodeGetDone(const net::Request& req, - net::NetworkEngine::RequestAnswer&& answer, + net::RequestAnswer&& answer, std::weak_ptr ws, Sp query) { @@ -262,7 +262,7 @@ void Dht::paginate(std::weak_ptr ws, Sp query, SearchNode* n) { if (not sr) return; auto select_q = std::make_shared(Select {}.field(Value::Field::Id), query ? query->where : Where {}); auto onSelectDone = [this,ws,query](const net::Request& status, - net::NetworkEngine::RequestAnswer&& answer) mutable { + net::RequestAnswer&& answer) mutable { // retreive search auto sr = ws.lock(); if (not sr) return; @@ -393,7 +393,7 @@ void Dht::searchSendAnnounceValue(const Sp& sr) { if (not something_to_announce) continue; - auto onDone = [this,ws](const net::Request& req, net::NetworkEngine::RequestAnswer&& answer) + auto onDone = [this,ws](const net::Request& req, net::RequestAnswer&& answer) { /* when put done */ if (auto sr = ws.lock()) { onAnnounceDone(req.node, answer, sr); @@ -407,7 +407,7 @@ void Dht::searchSendAnnounceValue(const Sp& sr) { scheduler.edit(sr->nextSearchStep, scheduler.time()); }; auto onSelectDone = - [this,ws,onDone,onExpired](const net::Request& req, net::NetworkEngine::RequestAnswer&& answer) mutable + [this,ws,onDone,onExpired](const net::Request& req, net::RequestAnswer&& answer) mutable { /* on probing done */ const auto& now = scheduler.time(); if (auto sr = ws.lock()) { @@ -549,7 +549,7 @@ Dht::searchStep(Sp sr) std::weak_ptr ws = sr; n.listenStatus[query] = network_engine.sendListen(n.node, sr->id, *query, n.token, prev_req, - [this,ws,query](const net::Request& req, net::NetworkEngine::RequestAnswer&& answer) mutable + [this,ws,query](const net::Request& req, net::RequestAnswer&& answer) mutable { /* on done */ if (auto sr = ws.lock()) { onListenDone(req.node, answer, sr); @@ -565,7 +565,7 @@ Dht::searchStep(Sp sr) sn->listenStatus.erase(query); } }, - [this,ws,query](const Sp& node, net::NetworkEngine::RequestAnswer&& answer) mutable + [this,ws,query](const Sp& node, net::RequestAnswer&& answer) mutable { /* on new values */ if (auto sr = ws.lock()) { onGetValuesDone(node, answer, sr, query); @@ -2075,7 +2075,7 @@ Dht::pingNode(const sockaddr* sa, socklen_t salen, DoneCallbackSimple&& cb) DHT_LOG.d("Sending ping to %s", print_addr(sa, salen).c_str()); auto& count = sa->sa_family == AF_INET ? pending_pings4 : pending_pings6; count++; - network_engine.sendPing(sa, salen, [&count,cb](const net::Request&, net::NetworkEngine::RequestAnswer&&) { + network_engine.sendPing(sa, salen, [&count,cb](const net::Request&, net::RequestAnswer&&) { count--; if (cb) cb(true); @@ -2119,17 +2119,17 @@ Dht::onReportedAddr(const InfoHash& id, const SockAddr& addr) reportedAddr(addr); } -net::NetworkEngine::RequestAnswer +net::RequestAnswer Dht::onPing(Sp) { return {}; } -net::NetworkEngine::RequestAnswer +net::RequestAnswer Dht::onFindNode(Sp node, const InfoHash& target, want_t want) { const auto& now = scheduler.time(); - net::NetworkEngine::RequestAnswer answer; + net::RequestAnswer answer; answer.ntoken = makeToken(node->addr, false); if (want & WANT4) answer.nodes4 = buckets4.findClosestNodes(target, now, TARGET_NODES); @@ -2138,7 +2138,7 @@ Dht::onFindNode(Sp node, const InfoHash& target, want_t want) return answer; } -net::NetworkEngine::RequestAnswer +net::RequestAnswer Dht::onGetValues(Sp node, const InfoHash& hash, want_t, const Query& query) { if (hash == zeroes) { @@ -2149,7 +2149,7 @@ Dht::onGetValues(Sp node, const InfoHash& hash, want_t, const Query& query }; } const auto& now = scheduler.time(); - net::NetworkEngine::RequestAnswer answer {}; + net::RequestAnswer answer {}; auto st = store.find(hash); answer.ntoken = makeToken(node->addr, false); answer.nodes4 = buckets4.findClosestNodes(hash, now, TARGET_NODES); @@ -2164,7 +2164,7 @@ Dht::onGetValues(Sp node, const InfoHash& hash, want_t, const Query& query } void Dht::onGetValuesDone(const Sp& node, - net::NetworkEngine::RequestAnswer& a, + net::RequestAnswer& a, Sp& sr, const Sp& orig_query) { @@ -2235,7 +2235,7 @@ void Dht::onGetValuesDone(const Sp& node, } } -net::NetworkEngine::RequestAnswer +net::RequestAnswer Dht::onListen(Sp node, const InfoHash& hash, const Blob& token, size_t socket_id, const Query& query) { if (hash == zeroes) { @@ -2256,7 +2256,7 @@ Dht::onListen(Sp node, const InfoHash& hash, const Blob& token, size_t soc void Dht::onListenDone(const Sp& node, - net::NetworkEngine::RequestAnswer& answer, + net::RequestAnswer& answer, Sp& sr) { DHT_LOG.d(sr->id, node->id, "[search %s] [node %s] got listen confirmation", @@ -2269,7 +2269,7 @@ Dht::onListenDone(const Sp& node, } } -net::NetworkEngine::RequestAnswer +net::RequestAnswer Dht::onAnnounce(Sp node, const InfoHash& hash, const Blob& token, @@ -2337,7 +2337,7 @@ Dht::onAnnounce(Sp node, return {}; } -net::NetworkEngine::RequestAnswer +net::RequestAnswer Dht::onRefresh(Sp node, const InfoHash& hash, const Blob& token, const Value::Id& vid) { using namespace net; @@ -2360,7 +2360,7 @@ Dht::onRefresh(Sp node, const InfoHash& hash, const Blob& token, const Val } void -Dht::onAnnounceDone(const Sp& node, net::NetworkEngine::RequestAnswer& answer, Sp& sr) +Dht::onAnnounceDone(const Sp& node, net::RequestAnswer& answer, Sp& sr) { DHT_LOG.d(sr->id, node->id, "[search %s] [node %s] got reply to put!", sr->id.toString().c_str(), node->toString().c_str()); diff --git a/src/network_engine.cpp b/src/network_engine.cpp index 8f23c361..ca50133c 100644 --- a/src/network_engine.cpp +++ b/src/network_engine.cpp @@ -169,7 +169,7 @@ serializeValues(const std::vector>& st) return svals; } -NetworkEngine::RequestAnswer::RequestAnswer(ParsedMessage&& msg) +RequestAnswer::RequestAnswer(ParsedMessage&& msg) : ntoken(std::move(msg.token)), values(std::move(msg.values)), fields(std::move(msg.fields)), nodes4(std::move(msg.nodes4)), nodes6(std::move(msg.nodes6)) {}