From 37b12c114d62b0c947f8ee879c2b62e1fa9adc2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Tue, 21 May 2019 23:33:30 -0400 Subject: [PATCH] dht: cleanup --- include/opendht/dht.h | 14 +++---------- include/opendht/dhtrunner.h | 2 +- src/dhtrunner.cpp | 39 +++++++++++++++---------------------- 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/include/opendht/dht.h b/include/opendht/dht.h index 68536db9..435f0f8f 100644 --- a/include/opendht/dht.h +++ b/include/opendht/dht.h @@ -436,17 +436,9 @@ private: RoutingTable& buckets(sa_family_t af) { return af == AF_INET ? buckets4 : buckets6; } const RoutingTable& buckets(sa_family_t af) const { return af == AF_INET ? buckets4 : buckets6; } Bucket* findBucket(const InfoHash& id, sa_family_t af) { - RoutingTable::iterator b; - switch (af) { - case AF_INET: - b = buckets4.findBucket(id); - return b == buckets4.end() ? nullptr : &(*b); - case AF_INET6: - b = buckets6.findBucket(id); - return b == buckets6.end() ? nullptr : &(*b); - default: - return nullptr; - } + auto& b = buckets(af); + auto it = b.findBucket(id); + return it == b.end() ? nullptr : &(*it); } const Bucket* findBucket(const InfoHash& id, sa_family_t af) const { return const_cast<Dht*>(this)->findBucket(id, af); diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h index 659fd507..aa638c5b 100644 --- a/include/opendht/dhtrunner.h +++ b/include/opendht/dhtrunner.h @@ -52,7 +52,7 @@ struct SecureDhtConfig; class OPENDHT_PUBLIC DhtRunner { public: - typedef std::function<void(NodeStatus, NodeStatus)> StatusCallback; + using StatusCallback = std::function<void(NodeStatus, NodeStatus)>; struct Config { SecureDhtConfig dht_config; diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index e8f7f73d..fb96d0f8 100644 --- a/src/dhtrunner.cpp +++ b/src/dhtrunner.cpp @@ -50,12 +50,11 @@ struct DhtRunner::Listener { Where w; }; -class OPENDHT_PUBLIC NodeInsertionPack{ -public: - dht::InfoHash nodeid_; - in_port_t node_port_; - dht::NetId nid_; - MSGPACK_DEFINE(nodeid_, node_port_, nid_) +struct NodeInsertionPack { + dht::InfoHash nodeId; + in_port_t port; + dht::NetId net; + MSGPACK_DEFINE(nodeId, port, net) }; DhtRunner::DhtRunner() : dht_() @@ -160,23 +159,17 @@ DhtRunner::run(const SockAddr& local4, const SockAddr& local6, const DhtRunner:: }); if (config.peer_discovery or config.peer_publish) { - if (context.peerDiscovery) - peerDiscovery_ = std::move(context.peerDiscovery); - else - peerDiscovery_.reset(new PeerDiscovery(PEER_DISCOVERY_PORT)); + peerDiscovery_ = context.peerDiscovery ? + std::move(context.peerDiscovery) : + std::make_shared<PeerDiscovery>(PEER_DISCOVERY_PORT); } auto netId = config.dht_config.node_config.network; if (config.peer_discovery) { - peerDiscovery_->startDiscovery(PEER_DISCOVERY_DHT_SERVICE, [this, netId](msgpack::object&& obj, SockAddr&& add){ - try { - auto v = obj.as<NodeInsertionPack>(); - add.setPort(v.node_port_); - if(v.nodeid_ != dht_->getNodeId() && netId == v.nid_){ - bootstrap(v.nodeid_, add); - } - } catch(const msgpack::type_error &e){ - std::cerr << "Msgpack Info Invalid: " << e.what() << '\n'; + peerDiscovery_->startDiscovery<NodeInsertionPack>(PEER_DISCOVERY_DHT_SERVICE, [this, netId](NodeInsertionPack&& v, SockAddr&& addr){ + addr.setPort(v.port); + if (v.nodeId != dht_->getNodeId() && netId == v.net){ + bootstrap(v.nodeId, addr); } }); } @@ -184,13 +177,13 @@ DhtRunner::run(const SockAddr& local4, const SockAddr& local6, const DhtRunner:: msgpack::sbuffer sbuf_node; // IPv4 NodeInsertionPack adc; - adc.nid_ = netId; - adc.node_port_ = getBoundPort(AF_INET); - adc.nodeid_ = dht_->getNodeId(); + adc.net = netId; + adc.port = getBoundPort(AF_INET); + adc.nodeId = dht_->getNodeId(); msgpack::pack(sbuf_node, adc); peerDiscovery_->startPublish(AF_INET, PEER_DISCOVERY_DHT_SERVICE, sbuf_node); // IPv6 - adc.node_port_ = getBoundPort(AF_INET6); + adc.port = getBoundPort(AF_INET6); sbuf_node.clear(); msgpack::pack(sbuf_node, adc); peerDiscovery_->startPublish(AF_INET6, PEER_DISCOVERY_DHT_SERVICE, sbuf_node); -- GitLab