diff --git a/include/opendht/dht.h b/include/opendht/dht.h index 7a1567bb33480ff8cba9a775c65d70a0ff511f83..e2ef548b13756e13d7dae379b1350dacc654f75f 100644 --- a/include/opendht/dht.h +++ b/include/opendht/dht.h @@ -340,7 +340,8 @@ public: void dumpTables() const; std::vector<unsigned> getNodeMessageStats(bool in = false) const { - return {out.ping, out.find, out.get, out.listen, out.put}; + return in ? std::vector<unsigned>{in_stats.ping, in_stats.find, in_stats.get, in_stats.listen, in_stats.put} + : std::vector<unsigned>{out_stats.ping, out_stats.find, out_stats.get, out_stats.listen, out_stats.put}; } /* This must be provided by the user. */ @@ -907,7 +908,7 @@ private: unsigned listen {0}; }; - MessageStats in {}, out {}; + MessageStats in_stats {}, out_stats {}; }; diff --git a/src/dht.cpp b/src/dht.cpp index 5486f9d6d4cb16a040b49fbbce001e70cefd4f8a..d6b057e36933778a10730ab047bc8e4a49ec0636 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -2403,16 +2403,19 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc } break; case MessageType::Ping: + in_stats.ping++; newNode(msg.id, from, fromlen, 1); //DHT_DEBUG("Sending pong."); sendPong(from, fromlen, msg.tid); break; case MessageType::FindNode: + in_stats.find++; newNode(msg.id, from, fromlen, 1); DHT_DEBUG("[node %s %s] got 'find' request (%d).", msg.id.toString().c_str(), print_addr(from, fromlen).c_str(), msg.want); sendClosestNodes(from, fromlen, msg.tid, msg.target, msg.want); break; case MessageType::GetValues: + in_stats.get++; DHT_DEBUG("[node %s %s] got 'get' request for %s.", msg.id.toString().c_str(), print_addr(from, fromlen).c_str(), msg.info_hash.toString().c_str()); newNode(msg.id, from, fromlen, 1); if (msg.info_hash == zeroes) { @@ -2432,6 +2435,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc } break; case MessageType::AnnounceValue: + in_stats.put++; DHT_DEBUG("[node %s %s] got 'put' request for %s.", msg.id.toString().c_str(), print_addr(from, fromlen).c_str(), msg.info_hash.toString().c_str()); @@ -2486,6 +2490,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc } break; case MessageType::Listen: + in_stats.listen++; DHT_DEBUG("[node %s %s] got 'listen' request for %s.", msg.id.toString().c_str(), print_addr(from, fromlen).c_str(), msg.info_hash.toString().c_str()); if (msg.info_hash == zeroes) { DHT_WARN("Listen with no info_hash."); @@ -2737,7 +2742,7 @@ Dht::sendPing(const sockaddr *sa, socklen_t salen, TransId tid) pk.pack(std::string("y")); pk.pack(std::string("q")); pk.pack(std::string("v")); pk.pack(my_v); - out.ping++; + out_stats.ping++; return send(buffer.data(), buffer.size(), 0, sa, salen); } @@ -2785,7 +2790,7 @@ Dht::sendFindNode(const sockaddr *sa, socklen_t salen, TransId tid, pk.pack(std::string("y")); pk.pack(std::string("q")); pk.pack(std::string("v")); pk.pack(my_v); - out.find++; + out_stats.find++; return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen); } @@ -2968,7 +2973,7 @@ Dht::sendGetValues(const sockaddr *sa, socklen_t salen, pk.pack(std::string("y")); pk.pack(std::string("q")); pk.pack(std::string("v")); pk.pack(my_v); - out.get++; + out_stats.get++; return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen); } @@ -2992,7 +2997,7 @@ Dht::sendListen(const sockaddr* sa, socklen_t salen, TransId tid, pk.pack(std::string("y")); pk.pack(std::string("q")); pk.pack(std::string("v")); pk.pack(my_v); - out.listen++; + out_stats.listen++; return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen); } @@ -3037,7 +3042,7 @@ Dht::sendAnnounceValue(const sockaddr *sa, socklen_t salen, TransId tid, pk.pack(std::string("y")); pk.pack(std::string("q")); pk.pack(std::string("v")); pk.pack(my_v); - out.put++; + out_stats.put++; return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen); }