diff --git a/CMakeLists.txt b/CMakeLists.txt index 6edcbd0f2449c707d30892e58d06c855882ed96b..f52f3e2d71eb1d4f0a78191c8e368e76586f81ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,7 @@ list (APPEND opendht_SOURCES src/infohash.cpp src/crypto.cpp src/default_types.cpp + src/node.cpp src/value.cpp src/dht.cpp src/network_engine.cpp @@ -51,6 +52,7 @@ list (APPEND opendht_HEADERS include/opendht/crypto.h include/opendht/infohash.h include/opendht/default_types.h + include/opendht/node.h include/opendht/value.h include/opendht/dht.h include/opendht/network_engine.h diff --git a/include/opendht.h b/include/opendht.h index d7caf3dc627b8e1439fcae1767179f9dbf640f60..109649206216255b08217cb70358768b79440244 100644 --- a/include/opendht.h +++ b/include/opendht.h @@ -20,6 +20,7 @@ #pragma once #include "opendht/dht.h" +#include "opendht/node.h" #include "opendht/value.h" #include "opendht/infohash.h" #include "opendht/securedht.h" diff --git a/include/opendht/infohash.h b/include/opendht/infohash.h index 10613139ad6934df183187d60bad579ee2a6d68d..dbde0c0819508e099976d8788c96bb446030bc13 100644 --- a/include/opendht/infohash.h +++ b/include/opendht/infohash.h @@ -197,6 +197,11 @@ public: }; -static constexpr InfoHash zeroes; -static constexpr InfoHash ones; +static constexpr InfoHash zeroes {}; +static constexpr InfoHash ones = {std::array<uint8_t, HASH_LEN>{{ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF +}}}; + } diff --git a/include/opendht/network_engine.h b/include/opendht/network_engine.h index 0c2875a213d4563267c1b9486c6281aeb0acb7d2..15504c8d1065a670013e03b965b3cf8b9cd9c6e9 100644 --- a/include/opendht/network_engine.h +++ b/include/opendht/network_engine.h @@ -60,16 +60,16 @@ public: static const std::string PUT_INVALID_ID; /* invalid id in "put" request */ DhtProtocolException(uint16_t code, const std::string& msg="", InfoHash failing_node_id={}) - : DhtException(msg), code(code), msg(msg), failing_node_id(failing_node_id) {} + : DhtException(msg), msg(msg), code(code), failing_node_id(failing_node_id) {} std::string getMsg() const { return msg; } uint16_t getCode() const { return code; } const InfoHash getNodeId() const { return failing_node_id; } private: + std::string msg; uint16_t code; const InfoHash failing_node_id; - std::string msg; }; /*! @@ -121,6 +121,9 @@ public: time_point last_try {time_point::min()}; /* time of the last attempt to process the request. */ time_point reply_time {time_point::min()}; /* time when we received the response from the node. */ + RequestStatus() {} + RequestStatus(time_point start, time_point reply_time = time_point::min()) + : start(start), last_try(start), reply_time(reply_time) {} bool expired(time_point now) const { return reply_time < last_try && now > last_try + Node::MAX_RESPONSE_TIME; } @@ -237,9 +240,9 @@ public: decltype(NetworkEngine::onGetValues) onGetValues, decltype(NetworkEngine::onListen) onListen, decltype(NetworkEngine::onAnnounce) onAnnounce) : - myid(info.myid), dht_socket(info.dht_socket), dht_socket6(info.dht_socket6), DHT_LOG(info.DHT_LOG), - scheduler(scheduler), onError(onError), onNewNode(onNewNode), onReportedAddr(onReportedAddr), onPing(onPing), - onFindNode(onFindNode), onGetValues(onGetValues), onListen(onListen), onAnnounce(onAnnounce) + onError(onError), onNewNode(onNewNode), onReportedAddr(onReportedAddr), onPing(onPing), onFindNode(onFindNode), + onGetValues(onGetValues), onListen(onListen), onAnnounce(onAnnounce), myid(info.myid), + dht_socket(info.dht_socket), dht_socket6(info.dht_socket6), DHT_LOG(info.DHT_LOG), scheduler(scheduler) { transaction_id = std::uniform_int_distribution<decltype(transaction_id)>{1}(rd_device); } @@ -268,7 +271,10 @@ public: std::shared_ptr<RequestStatus> sendPing(std::shared_ptr<Node> n, RequestCb on_done, RequestCb on_expired); std::shared_ptr<RequestStatus> - sendPing(sockaddr* n, socklen_t salen, RequestCb on_done, RequestCb on_expired); + sendPing(sockaddr* sa, socklen_t salen, RequestCb on_done, RequestCb on_expired) + { + sendPing(std::make_shared<Node>(InfoHash {}, sa, salen), on_done, on_expired); + } std::shared_ptr<RequestStatus> sendFindNode(std::shared_ptr<Node> n, const InfoHash& target, @@ -427,7 +433,7 @@ private: Blob &&msg, std::function<void(std::shared_ptr<RequestStatus> req_status, uint16_t tid, ParsedMessage&&)> on_done, std::function<void(std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool)> on_expired) : - tid(tid), msg(msg), on_done(on_done), on_expired(on_expired) { + on_done(on_done), on_expired(on_expired), tid(tid), msg(msg) { status->node = node; } @@ -437,9 +443,9 @@ private: std::function<void(std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool)> on_expired {}; const uint16_t tid {0}; /* the request id. */ + Blob msg {}; /* the serialized message. */ std::shared_ptr<RequestStatus> status {}; /* the request info for DHT layer. */ unsigned attempt_count {0}; /* number of attempt to process the request. */ - Blob msg {}; /* the serialized message. */ }; /** diff --git a/src/dht.cpp b/src/dht.cpp index 6de9132e1b61261ab2f30f690bacf54079c29e55..7f57ec5fff182837b08466d8bc50c88af64bf864 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -812,7 +812,7 @@ Dht::searchSendGetValues(Search& sr, SearchNode* pn, bool update) } }; auto onExpired = - [=](std::shared_ptr<NetworkEngine::RequestStatus> status, NetworkEngine::RequestAnswer&& answer) mutable { + [=](std::shared_ptr<NetworkEngine::RequestStatus>, NetworkEngine::RequestAnswer&&) mutable { if (srp) { searchStep(*srp); } @@ -896,8 +896,7 @@ Dht::searchStep(Search& sr) searchStep(*srp); } }, - [=](std::shared_ptr<NetworkEngine::RequestStatus> status, - NetworkEngine::RequestAnswer&& answer) mutable + [=](std::shared_ptr<NetworkEngine::RequestStatus>, NetworkEngine::RequestAnswer&&) mutable { /* on expired */ if (srp) { searchStep(*srp); @@ -940,15 +939,13 @@ Dht::searchStep(Search& sr) { auto srp = &sr; network_engine->sendAnnounceValue(n.node, sr.id, *a.value, a.created, n.token, - [=](std::shared_ptr<NetworkEngine::RequestStatus> status, - NetworkEngine::RequestAnswer&& answer) mutable + [=](std::shared_ptr<NetworkEngine::RequestStatus>, NetworkEngine::RequestAnswer&&) mutable { /* on done */ if (srp) { searchStep(*srp); } }, - [=](std::shared_ptr<NetworkEngine::RequestStatus> status, - NetworkEngine::RequestAnswer&& answer) mutable + [=](std::shared_ptr<NetworkEngine::RequestStatus>, NetworkEngine::RequestAnswer&&) mutable { /* on expired */ if (srp) { searchStep(*srp); @@ -2232,11 +2229,12 @@ Dht::neighbourhoodMaintenance(RoutingTable& list) auto sr = q->af == AF_INET ? searches4.find(id) : searches6.find(id); auto srp = &sr->second; network_engine->sendFindNode(n, id, want, - [=](std::shared_ptr<NetworkEngine::RequestStatus> status, NetworkEngine::RequestAnswer&& answer) mutable + [=](std::shared_ptr<NetworkEngine::RequestStatus> status, + NetworkEngine::RequestAnswer&& answer) mutable { /* on done */ onGetValuesDone(status, answer, srp); }, - [=](std::shared_ptr<NetworkEngine::RequestStatus> status, NetworkEngine::RequestAnswer&& answer) mutable + [=](std::shared_ptr<NetworkEngine::RequestStatus>, NetworkEngine::RequestAnswer&&) mutable { /* on expired */ searchStep(*srp); } @@ -2298,8 +2296,7 @@ Dht::bucketMaintenance(RoutingTable& list) { /* on done */ onGetValuesDone(status, answer, srp); }, - [=](std::shared_ptr<NetworkEngine::RequestStatus> status, - NetworkEngine::RequestAnswer&& answer) mutable + [=](std::shared_ptr<NetworkEngine::RequestStatus>, NetworkEngine::RequestAnswer&&) mutable { /* on expired */ searchStep(*srp); } @@ -2545,7 +2542,7 @@ Dht::onReportedAddr(const InfoHash& id, sockaddr* addr , socklen_t addr_length) } NetworkEngine::RequestAnswer -Dht::onPing(std::shared_ptr<Node> node) +Dht::onPing(std::shared_ptr<Node>) { return {}; } @@ -2568,7 +2565,7 @@ Dht::onFindNode(std::shared_ptr<Node> node, InfoHash& hash, want_t want) } NetworkEngine::RequestAnswer -Dht::onGetValues(std::shared_ptr<Node> node, InfoHash& hash, want_t want) +Dht::onGetValues(std::shared_ptr<Node> node, InfoHash& hash, want_t) { NetworkEngine::RequestAnswer* answer; DHT_LOG.DEBUG("[node %s %s] got 'get' request for %s.", @@ -2667,7 +2664,7 @@ Dht::onListen(std::shared_ptr<Node> node, InfoHash& hash, Blob& token, size_t ri } void -Dht::onListenDone(std::shared_ptr<NetworkEngine::RequestStatus> status, NetworkEngine::RequestAnswer& a, Search* sr) +Dht::onListenDone(std::shared_ptr<NetworkEngine::RequestStatus> status, NetworkEngine::RequestAnswer&, Search* sr) { DHT_LOG.DEBUG("Got reply to listen."); if (sr) { @@ -2773,19 +2770,18 @@ Dht::onAnnounceDone(std::shared_ptr<NetworkEngine::RequestStatus> status, Networ // If the value was just successfully announced, call the callback sr->announce.erase(std::remove_if(sr->announce.begin(), sr->announce.end(), - [&](std::pair<const uint16_t, Announce>& ap) { - auto& a = ap.second; - if (!a.value || a.value->id != v->id) - return false; - auto type = getType(a.value->type); - if (sr->isAnnounced(v->id, type, now)) { - if (a.callback) { - a.callback(true, sr->getNodes()); - a.callback = nullptr; + [&](Announce& a) { + if (!a.value || a.value->id != v->id) + return false; + auto type = getType(a.value->type); + if (sr->isAnnounced(v->id, type, now)) { + if (a.callback) { + a.callback(true, sr->getNodes()); + a.callback = nullptr; + } + return true; } - return true; - } - return false; + return false; }), sr->announce.end()); } diff --git a/src/infohash.cpp b/src/infohash.cpp index 5086178011930388c74e2b3060be836c1e07c656..8f121642947cb09ee8c06c138bb47309c5ad3b32 100644 --- a/src/infohash.cpp +++ b/src/infohash.cpp @@ -30,13 +30,6 @@ extern "C" { namespace dht { -static constexpr InfoHash zeroes {}; -static constexpr InfoHash ones = {std::array<uint8_t, HASH_LEN>{{ - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF -}}}; - InfoHash::InfoHash(const std::string& hex) { if (hex.size() < 2*HASH_LEN) { fill(0); diff --git a/src/network_engine.cpp b/src/network_engine.cpp index 75427f87f112e6e9ebd94b61cd1310332e7b92ae..acd73512954c6a9fa74cd6892fe85db74c421ae9 100644 --- a/src/network_engine.cpp +++ b/src/network_engine.cpp @@ -40,7 +40,7 @@ const std::string DhtProtocolException::PUT_INVALID_ID {"Put with invalid id"}; constexpr std::chrono::seconds NetworkEngine::UDP_REPLY_TIME; const std::string NetworkEngine::my_v {"RNG1"}; const constexpr uint16_t NetworkEngine::TransId::INVALID; -static std::mt19937 rd_device {dht::crypto::random_device{}()}; +std::mt19937 NetworkEngine::rd_device {dht::crypto::random_device{}()}; const NetworkEngine::TransPrefix NetworkEngine::TransPrefix::PING = {"pn"}; const NetworkEngine::TransPrefix NetworkEngine::TransPrefix::FIND_NODE = {"fn"}; @@ -141,6 +141,8 @@ NetworkEngine::processMessage(const uint8_t *buf, size_t buflen, const sockaddr case MessageType::Reply: req->on_done(req->status, msg.tid[2], std::move(msg)); break; + default: + break; } } else { auto node = onNewNode(msg.id, from, fromlen, 1); @@ -180,15 +182,18 @@ NetworkEngine::processMessage(const uint8_t *buf, size_t buflen, const sockaddr } break; } - case MessageType::Listen: + case MessageType::Listen: { if (!msg.tid.matches(TransPrefix::LISTEN, &ttid)) { - break; + break; } in_stats.listen++; RequestAnswer answer = onListen(node, msg.info_hash, msg.token, msg.tid[2]); sendListenConfirmation(from, fromlen, msg.tid); break; } + default: + break; + } } catch (const std::overflow_error& e) { DHT_LOG.ERROR("Can't send value: buffer not large enough !"); } catch (DhtProtocolException& e) { @@ -251,14 +256,17 @@ NetworkEngine::sendPing(std::shared_ptr<Node> n, RequestCb on_done, RequestCb on pk.pack(std::string("v")); pk.pack(my_v); Blob b {buffer.data(), buffer.data() + buffer.size()}; - Request req {tid[2], n, std::move(b), nullptr, - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool s) { /* on expired */ + Request req {tid[2], n, std::move(b), + [=](std::shared_ptr<RequestStatus> req_status, uint16_t, ParsedMessage&&){ + on_done(req_status, {}); + }, + [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool) { /* on expired */ on_expired(req_status, {}); requests.erase(tid); } }; - auto req_status = std::make_shared<RequestStatus>(req.status); - requests.emplace(std::move(req)); + auto req_status = req.status; + requests.emplace(tid[2], std::make_shared<Request>(std::move(req))); send(buffer.data(), buffer.size(), 0, (sockaddr*)&n->ss, n->sslen); out_stats.ping++; return std::move(req_status); @@ -309,16 +317,16 @@ NetworkEngine::sendFindNode(std::shared_ptr<Node> n, const InfoHash& target, wan Blob b {buffer.data(), buffer.data() + buffer.size()}; Request req {tid[2], n, std::move(b), - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, ParsedMessage&& msg) { /* on done */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t, ParsedMessage&& msg) { /* on done */ on_done(req_status, deserializeNodesValues(msg)); }, - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool s) { /* on expired */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool) { /* on expired */ on_expired(req_status, {}); requests.erase(tid); } }; - auto req_status = std::make_shared<RequestStatus>(req.status); - requests.emplace(std::move(req)); + auto req_status = req.status; + requests.emplace(tid[2], std::make_shared<Request>(std::move(req))); send(buffer.data(), buffer.size(), (n->reply_time >= scheduler->time() - UDP_REPLY_TIME) ? 0 : MSG_CONFIRM, (sockaddr*)&n->ss, n->sslen); out_stats.find++; @@ -352,16 +360,16 @@ NetworkEngine::sendGetValues(std::shared_ptr<Node> n, const InfoHash& target, wa Blob b {buffer.data(), buffer.data() + buffer.size()}; Request req {tid[2], n, std::move(b), - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, ParsedMessage&& msg) { /* on done */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t, ParsedMessage&& msg) { /* on done */ on_done(req_status, deserializeNodesValues(msg)); }, - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool s) { /* on expired */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool) { /* on expired */ on_expired(req_status, {}); requests.erase(tid); } }; - auto req_status = std::make_shared<RequestStatus>(req.status); - requests.emplace(std::move(req)); + auto req_status = req.status; + requests.emplace(tid[2], std::make_shared<Request>(std::move(req))); send(buffer.data(), buffer.size(), (n->reply_time >= scheduler->time() - UDP_REPLY_TIME) ? 0 : MSG_CONFIRM, (sockaddr*)&n->ss, n->sslen); out_stats.get++; @@ -370,7 +378,7 @@ NetworkEngine::sendGetValues(std::shared_ptr<Node> n, const InfoHash& target, wa NetworkEngine::RequestAnswer NetworkEngine::deserializeNodesValues(ParsedMessage& msg) { - RequestAnswer req_a {msg.token, std::move(msg.values)}; + RequestAnswer req_a {msg.token, std::move(msg.values), {}, {}}; if (msg.nodes4.size() % NODE4_INFO_BUF_LEN != 0 || msg.nodes6.size() % NODE6_INFO_BUF_LEN != 0) { throw DhtProtocolException {DhtProtocolException::WRONG_NODE_INFO_BUF_LEN}; } else { @@ -514,7 +522,6 @@ NetworkEngine::bufferNodes(sa_family_t af, const InfoHash& id, want_t want, { uint8_t bnodes[8 * NODE4_INFO_BUF_LEN]; uint8_t bnodes6[8 * NODE6_INFO_BUF_LEN]; - size_t numnodes, numnodes6 = 0; if (want < 0) want = af == AF_INET ? WANT4 : WANT6; @@ -524,15 +531,14 @@ NetworkEngine::bufferNodes(sa_family_t af, const InfoHash& id, want_t want, for (const auto& n : closest_nodes) { numnodes = insertClosestNode(nodes, numnodes, id, *n); } - return numnodes; }; if ((want & WANT4)) { - numnodes = buff(bnodes, id, nodes); + buff(bnodes, id, nodes); } if ((want & WANT6)) { - numnodes6 = buff(bnodes6, id, nodes6); + buff(bnodes6, id, nodes6); } Blob bn4(8 * NODE4_INFO_BUF_LEN), bn6(8 * NODE6_INFO_BUF_LEN); @@ -563,16 +569,16 @@ NetworkEngine::sendListen(std::shared_ptr<Node> n, const InfoHash& infohash, con Blob b {buffer.data(), buffer.data() + buffer.size()}; Request req {tid[2], n, std::move(b), - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, ParsedMessage&& msg) { /* on done */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t, ParsedMessage&&) { /* on done */ on_done(req_status, {}); }, - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool s) { /* on expired */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool) { /* on expired */ on_expired(req_status, {}); requests.erase(tid); } }; - auto req_status = std::make_shared<RequestStatus>(req.status); - requests.emplace(std::move(req)); + auto req_status = req.status; + requests.emplace(tid[2], std::make_shared<Request>(std::move(req))); send(buffer.data(), buffer.size(), (n->reply_time >= scheduler->time() - UDP_REPLY_TIME) ? 0 : MSG_CONFIRM, (sockaddr*)&n->ss, n->sslen); out_stats.listen++; @@ -623,20 +629,20 @@ NetworkEngine::sendAnnounceValue(std::shared_ptr<Node> n, const InfoHash& infoha Blob b {buffer.data(), buffer.data() + buffer.size()}; Request req {tid[2], n, std::move(b), - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, ParsedMessage&& msg) { /* on done */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t, ParsedMessage&& msg) { /* on done */ if (msg.value_id == Value::INVALID_ID) { DHT_LOG.DEBUG("Unknown search or announce!"); } else { on_done(req_status, {}); } }, - [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool s) { /* on expired */ + [=](std::shared_ptr<RequestStatus> req_status, uint16_t tid, bool) { /* on expired */ on_expired(req_status, {}); requests.erase(tid); } }; - auto req_status = std::make_shared<RequestStatus>(req.status); - requests.emplace(std::move(req)); + auto req_status = req.status; + requests.emplace(tid[2], std::make_shared<Request>(std::move(req))); send(buffer.data(), buffer.size(), (n->reply_time >= scheduler->time() - UDP_REPLY_TIME) ? 0 : MSG_CONFIRM, (sockaddr*)&n->ss, n->sslen); out_stats.put++; diff --git a/src/node.cpp b/src/node.cpp index 4bbc198208fc2f930df0a3b6f427fa77541c1b4c..e262c577889a0e587343e01ddf550534e03ab5f9 100644 --- a/src/node.cpp +++ b/src/node.cpp @@ -33,6 +33,7 @@ constexpr std::chrono::minutes Node::NODE_GOOD_TIME; constexpr std::chrono::seconds Node::MAX_RESPONSE_TIME; /* This is our definition of a known-good node. */ +bool Node::isGood(time_point now) const { return @@ -81,4 +82,10 @@ Node::received(time_point now, bool answer) } } +std::ostream& operator<< (std::ostream& s, const Node& h) +{ + s << h.id << " " << print_addr(h.ss, h.sslen); + return s; +} + } diff --git a/src/securedht.cpp b/src/securedht.cpp index d61275cbbb6ea94f651412a913484084e01d8fb9..fdc3dccc358d7327ce8ded2bf4767004a9fc0a9a 100644 --- a/src/securedht.cpp +++ b/src/securedht.cpp @@ -75,9 +75,9 @@ SecureDht::SecureDht(int s, int s6, SecureDht::Config conf) 1 }, [this](bool ok) { if (ok) - DHT_DEBUG("SecureDht: public key announced successfully"); + DHT_LOG.DEBUG("SecureDht: public key announced successfully"); else - DHT_ERROR("SecureDht: error while announcing public key!"); + DHT_LOG.ERROR("SecureDht: error while announcing public key!"); }); } } @@ -95,11 +95,11 @@ SecureDht::secureType(ValueType&& type) type.storePolicy = [this,type](InfoHash id, std::shared_ptr<Value>& v, InfoHash nid, const sockaddr* a, socklen_t al) { if (v->isSigned()) { if (!v->owner.checkSignature(v->getToSign(), v->signature)) { - DHT_WARN("Signature verification failed"); + DHT_LOG.WARN("Signature verification failed"); return false; } else - DHT_WARN("Signature verification succeded"); + DHT_LOG.WARN("Signature verification succeded"); } return type.storePolicy(id, v, nid, a, al); }; @@ -107,18 +107,18 @@ SecureDht::secureType(ValueType&& type) if (!o->isSigned()) return type.editPolicy(id, o, n, nid, a, al); if (o->owner != n->owner) { - DHT_WARN("Edition forbidden: owner changed."); + DHT_LOG.WARN("Edition forbidden: owner changed."); return false; } if (!o->owner.checkSignature(n->getToSign(), n->signature)) { - DHT_WARN("Edition forbidden: signature verification failed."); + DHT_LOG.WARN("Edition forbidden: signature verification failed."); return false; } if (o->seq == n->seq) { // If the data is exactly the same, // it can be reannounced, possibly by someone else. if (o->getToSign() != n->getToSign()) { - DHT_WARN("Edition forbidden: sequence number must be increasing."); + DHT_LOG.WARN("Edition forbidden: sequence number must be increasing."); return false; } } @@ -152,7 +152,7 @@ SecureDht::registerCertificate(const InfoHash& node, const Blob& data) } InfoHash h = crt->getPublicKey().getId(); if (node == h) { - DHT_DEBUG("Registering public key for %s", h.toString().c_str()); + DHT_LOG.DEBUG("Registering public key for %s", h.toString().c_str()); auto it = nodesCertificates_.find(h); if (it == nodesCertificates_.end()) std::tie(it, std::ignore) = nodesCertificates_.emplace(h, std::move(crt)); @@ -160,7 +160,7 @@ SecureDht::registerCertificate(const InfoHash& node, const Blob& data) it->second = std::move(crt); return it->second; } else { - DHT_DEBUG("Certificate %s for node %s does not match node id !", h.toString().c_str(), node.toString().c_str()); + DHT_LOG.DEBUG("Certificate %s for node %s does not match node id !", h.toString().c_str(), node.toString().c_str()); return nullptr; } } @@ -177,7 +177,7 @@ SecureDht::findCertificate(const InfoHash& node, std::function<void(const std::s { std::shared_ptr<crypto::Certificate> b = getCertificate(node); if (b && *b) { - DHT_DEBUG("Using public key from cache for %s", node.toString().c_str()); + DHT_LOG.DEBUG("Using public key from cache for %s", node.toString().c_str()); if (cb) cb(b); return; @@ -185,7 +185,7 @@ SecureDht::findCertificate(const InfoHash& node, std::function<void(const std::s if (localQueryMethod_) { auto res = localQueryMethod_(node); if (not res.empty()) { - DHT_DEBUG("Registering public key from local store for %s", node.toString().c_str()); + DHT_LOG.DEBUG("Registering public key from local store for %s", node.toString().c_str()); nodesCertificates_.emplace(node, res.front()); if (cb) cb(res.front()); @@ -200,7 +200,7 @@ SecureDht::findCertificate(const InfoHash& node, std::function<void(const std::s for (const auto& v : vals) { if (auto cert = registerCertificate(node, v->data)) { *found = true; - DHT_DEBUG("Found public key for %s", node.toString().c_str()); + DHT_LOG.DEBUG("Found public key for %s", node.toString().c_str()); if (cb) cb(cert); return false; @@ -232,7 +232,7 @@ SecureDht::getCallbackFilter(GetCallback cb, Value::Filter&& filter) } // Ignore values belonging to other people } catch (const std::exception& e) { - DHT_WARN("Could not decrypt value %s : %s", v->toString().c_str(), e.what()); + DHT_LOG.WARN("Could not decrypt value %s : %s", v->toString().c_str(), e.what()); } } // Check signed values @@ -242,7 +242,7 @@ SecureDht::getCallbackFilter(GetCallback cb, Value::Filter&& filter) tmpvals.push_back(v); } else - DHT_WARN("Signature verification failed for %s", v->toString().c_str()); + DHT_LOG.WARN("Signature verification failed for %s", v->toString().c_str()); } // Forward normal values else { @@ -279,19 +279,19 @@ SecureDht::putSigned(const InfoHash& hash, std::shared_ptr<Value> val, DoneCallb // Check if we are already announcing a value auto p = getPut(hash, val->id); if (p && val->seq <= p->seq) { - DHT_DEBUG("Found previous value being announced."); + DHT_LOG.DEBUG("Found previous value being announced."); val->seq = p->seq + 1; } // Check if data already exists on the dht get(hash, [val,this] (const std::vector<std::shared_ptr<Value>>& vals) { - DHT_DEBUG("Found online previous value being announced."); + DHT_LOG.DEBUG("Found online previous value being announced."); for (const auto& v : vals) { if (!v->isSigned()) - DHT_ERROR("Existing non-signed value seems to exists at this location."); + DHT_LOG.ERROR("Existing non-signed value seems to exists at this location."); else if (v->owner.getId() != getId()) - DHT_ERROR("Existing signed value belonging to someone else seems to exists at this location."); + DHT_LOG.ERROR("Existing signed value belonging to someone else seems to exists at this location."); else if (val->seq <= v->seq) val->seq = v->seq + 1; } @@ -314,11 +314,11 @@ SecureDht::putEncrypted(const InfoHash& hash, const InfoHash& to, std::shared_pt callback(false, {}); return; } - DHT_WARN("Encrypting data for PK: %s", crt->getPublicKey().getId().toString().c_str()); + DHT_LOG.WARN("Encrypting data for PK: %s", crt->getPublicKey().getId().toString().c_str()); try { put(hash, encrypt(*val, crt->getPublicKey()), callback); } catch (const std::exception& e) { - DHT_ERROR("Error putting encrypted data: %s", e.what()); + DHT_LOG.ERROR("Error putting encrypted data: %s", e.what()); if (callback) callback(false, {}); } diff --git a/src/utils.cpp b/src/utils.cpp index 5f2ea2bae5ca83ab01892132f7126418270e48e7..33ee40635805cf9f376719ae50ba7666847d6c43 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -18,11 +18,12 @@ */ #include "utils.h" +#include "default_types.h" namespace dht { std::string -dht::print_addr(const sockaddr* sa, socklen_t slen) +print_addr(const sockaddr* sa, socklen_t slen) { char hbuf[NI_MAXHOST]; char sbuf[NI_MAXSERV]; @@ -40,13 +41,13 @@ dht::print_addr(const sockaddr* sa, socklen_t slen) } std::string -dht::print_addr(const sockaddr_storage& ss, socklen_t sslen) +print_addr(const sockaddr_storage& ss, socklen_t sslen) { return print_addr((const sockaddr*)&ss, sslen); } std::string -dht::printAddr(const Address& addr) { +printAddr(const Address& addr) { return print_addr((const sockaddr*)&addr.first, addr.second); } diff --git a/tools/dhtchat.cpp b/tools/dhtchat.cpp index f0b4c4455e76c3dde5f5a08c49cb7399fd4d4363..359c0630a11122340cd16c4a2fe75659607d9868 100644 --- a/tools/dhtchat.cpp +++ b/tools/dhtchat.cpp @@ -38,7 +38,7 @@ const std::string printTime(const std::time_t& now) { return buf; } -void print_node_info(const DhtRunner& dht, const dht_params& params) { +void print_node_info(const DhtRunner& dht, const dht_params&) { std::cout << "OpenDht node " << dht.getNodeId() << " running on port " << dht.getBoundPort() << std::endl; std::cout << "Public key ID " << dht.getId() << std::endl; }