summaryrefslogtreecommitdiff
path: root/src/Network/DHT/Routing.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/DHT/Routing.hs')
-rw-r--r--src/Network/DHT/Routing.hs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/Network/DHT/Routing.hs b/src/Network/DHT/Routing.hs
index 0391c116..85525a90 100644
--- a/src/Network/DHT/Routing.hs
+++ b/src/Network/DHT/Routing.hs
@@ -388,6 +388,9 @@ split testNodeIdBit i b = (Bucket ns qs, Bucket ms rs)
388defaultBucketCount :: Int 388defaultBucketCount :: Int
389defaultBucketCount = 20 389defaultBucketCount = 20
390 390
391defaultMaxBucketCount :: Word
392defaultMaxBucketCount = 24
393
391data Info ni nid = Info 394data Info ni nid = Info
392 { myBuckets :: BucketList ni 395 { myBuckets :: BucketList ni
393 , myNodeId :: nid 396 , myNodeId :: nid
@@ -678,8 +681,14 @@ modifyBucket space nid f (BucketList self bkts)
678 | kademliaTestBit space d i = second (: buckets) <$> f bucket 681 | kademliaTestBit space d i = second (: buckets) <$> f bucket
679 | otherwise = second (bucket :) <$> go (succ i) buckets 682 | otherwise = second (bucket :) <$> go (succ i) buckets
680 683
681 go !i [bucket] = second (: []) <$> f bucket 684 go !i [bucket] = second (: []) <$> f bucket <|> gosplit
682 <|> go i (splitTip (kademliaTestBit space . kademliaLocation space) self i bucket) 685 where
686 gosplit | i < defaultMaxBucketCount = go i (splitTip ( kademliaTestBit space
687 . kademliaLocation space )
688 self
689 i
690 bucket)
691 | otherwise = Nothing -- Limit the number of buckets.
683 692
684 693
685bktCount :: BucketList ni -> Int 694bktCount :: BucketList ni -> Int