diff --git a/include/opendht/dht.h b/include/opendht/dht.h index 68536db94a1759d30da814b26b240fa346bc583b..435f0f8fecd56f7a40f871e714d3b09cd637209d 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 659fd507b64ee3100c0f9281c8f1adfc745395df..aa638c5bc49615ebbddf63071b9109edef33bb14 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 e8f7f73d653491a7ff36c04a186733d2e486037d..fb96d0f8bda29fa4b883eac2cae8e130b9f07d95 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);