summaryrefslogtreecommitdiff
path: root/Kademlia.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-09-06 01:27:36 -0400
committerjoe <joe@jerkface.net>2017-09-06 01:31:41 -0400
commit921f845e56033b959247dc0347083e287963f677 (patch)
tree4ff89d4186c255d38b0a59a7eb5b47ad521be299 /Kademlia.hs
parent2423be0ebf0bcdc4568b251cd8f9a9830bf9b04f (diff)
Removed Data.Bits requirement for Kademlia node id.
Diffstat (limited to 'Kademlia.hs')
-rw-r--r--Kademlia.hs13
1 files changed, 8 insertions, 5 deletions
diff --git a/Kademlia.hs b/Kademlia.hs
index f2288642..2620948d 100644
--- a/Kademlia.hs
+++ b/Kademlia.hs
@@ -30,6 +30,7 @@ import qualified Data.Wrapper.PSQInt as Int
30 ;import Data.Wrapper.PSQInt (pattern (:->)) 30 ;import Data.Wrapper.PSQInt (pattern (:->))
31import Network.Address (bucketRange,genBucketSample) 31import Network.Address (bucketRange,genBucketSample)
32import Network.BitTorrent.DHT.Search 32import Network.BitTorrent.DHT.Search
33import System.Entropy
33import System.Timeout 34import System.Timeout
34import Text.PrettyPrint as PP hiding (($$), (<>)) 35import Text.PrettyPrint as PP hiding (($$), (<>))
35import Text.PrettyPrint.HughesPJClass hiding (($$), (<>)) 36import Text.PrettyPrint.HughesPJClass hiding (($$), (<>))
@@ -268,15 +269,17 @@ forkPollForRefresh interval psq refresh = do
268 again 269 again
269 270
270refreshBucket :: forall nid tok ni addr. 271refreshBucket :: forall nid tok ni addr.
271 ( Show nid, FiniteBits nid, Serialize nid, Ord nid, Ord ni, Hashable nid, Hashable ni, Ord addr ) => 272 ( Show nid, Serialize nid, Ord nid, Ord ni, Hashable nid, Hashable ni, Ord addr ) =>
272 Search nid addr tok ni ni -> TVar (BucketList ni) -> Int -> IO Int 273 Search nid addr tok ni ni -> TVar (BucketList ni) -> Int -> IO Int
273refreshBucket sch var n = do 274refreshBucket sch var n = do
274 tbl <- atomically (readTVar var) 275 tbl <- atomically (readTVar var)
275 let count = bktCount tbl 276 let count = bktCount tbl
276 nid = kademliaLocation (searchSpace sch) (thisNode tbl) 277 nid = kademliaLocation (searchSpace sch) (thisNode tbl)
277 sample <- if n+1 >= count -- Is this the last bucket? 278 sample <- if n+1 >= count -- Is this the last bucket?
278 then return nid -- Yes? Search our own id. 279 then return nid -- Yes? Search our own id.
279 else genBucketSample nid -- No? Generate a random id. 280 else kademliaSample (searchSpace sch) -- No? Generate a random id.
281 getEntropy
282 nid
280 (bucketRange n (n + 1 < count)) 283 (bucketRange n (n + 1 < count))
281 fin <- atomically $ newTVar False 284 fin <- atomically $ newTVar False
282 resultCounter <- atomically $ newTVar Set.empty 285 resultCounter <- atomically $ newTVar Set.empty
@@ -314,7 +317,7 @@ refreshBucket sch var n = do
314bootstrap :: 317bootstrap ::
315 ( Show nid 318 ( Show nid
316 , Serialize nid 319 , Serialize nid
317 , FiniteBits nid 320 -- , FiniteBits nid
318 , Hashable ni 321 , Hashable ni
319 , Hashable nid 322 , Hashable nid
320 , Ord ni 323 , Ord ni