1919#include < libp2p/protocol/kademlia/node_id.hpp>
2020
2121namespace libp2p ::protocol::kademlia {
22+ constexpr size_t kBucketCount = 256 ;
2223
2324 struct BucketPeerInfo {
2425 peer::PeerId peer_id;
2526 bool is_replaceable;
27+ bool is_connected;
2628 NodeId node_id;
27- BucketPeerInfo (const peer::PeerId &peer_id, bool is_replaceable)
28- : peer_id(peer_id), is_replaceable(is_replaceable), node_id(peer_id) {}
29+ BucketPeerInfo (const PeerId &peer_id,
30+ bool is_replaceable,
31+ bool is_connected)
32+ : peer_id{peer_id},
33+ is_replaceable{is_replaceable},
34+ is_connected{is_connected},
35+ node_id{peer_id} {}
2936 };
3037
3138 struct XorDistanceComparator {
32- explicit XorDistanceComparator (const peer::PeerId &from) {
33- hfrom = crypto::sha256 (from.toVector ()).value ();
34- }
35-
36- explicit XorDistanceComparator (const NodeId &from)
37- : hfrom(from.getData()) {}
38-
39- explicit XorDistanceComparator (const Hash256 &hash) : hfrom(hash) {}
40-
4139 bool operator ()(const BucketPeerInfo &a, const BucketPeerInfo &b) {
42- NodeId from (hfrom);
4340 auto d1 = a.node_id .distance (from);
4441 auto d2 = b.node_id .distance (from);
4542 constexpr auto size = Hash256 ().size ();
@@ -48,7 +45,7 @@ namespace libp2p::protocol::kademlia {
4845 return std::memcmp (d1.data (), d2.data (), size) < 0 ;
4946 }
5047
51- Hash256 hfrom{} ;
48+ NodeId from ;
5249 };
5350
5451 /* *
@@ -67,7 +64,9 @@ namespace libp2p::protocol::kademlia {
6764
6865 bool moveToFront (const PeerId &pid);
6966
70- void emplaceToFront (const PeerId &pid, bool is_replaceable);
67+ void emplaceToFront (const PeerId &pid,
68+ bool is_replaceable,
69+ bool is_connected);
7170
7271 boost::optional<PeerId> removeReplaceableItem ();
7372
@@ -79,8 +78,6 @@ namespace libp2p::protocol::kademlia {
7978
8079 bool remove (const peer::PeerId &p);
8180
82- Bucket split (size_t commonLenPrefix, const NodeId &target);
83-
8481 private:
8582 std::list<BucketPeerInfo> peers_;
8683 };
@@ -116,17 +113,15 @@ namespace libp2p::protocol::kademlia {
116113 size_t size () const override ;
117114
118115 private:
119- void nextBucket () ;
116+ std::optional< size_t > getBucketIndex ( const NodeId &key) const ;
120117
121118 const Config &config_;
122119 std::shared_ptr<peer::IdentityManager> identity_manager_;
123120 std::shared_ptr<event::Bus> bus_;
124121
125122 const NodeId local_;
126123
127- std::vector<Bucket> buckets_;
128-
129- log::SubLogger log_;
124+ std::array<Bucket, kBucketCount > buckets_;
130125 };
131126
132127} // namespace libp2p::protocol::kademlia
0 commit comments