summaryrefslogtreecommitdiff
path: root/dht/src/Network/Tox/DHT
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2020-01-03 18:22:16 -0500
committerJoe Crayne <joe@jerkface.net>2020-01-07 13:24:59 -0500
commit15ab3290ad04280764968ba4760474a8c0cbfa52 (patch)
tree8df7bdfe38005f5478243427bb2b692d32843283 /dht/src/Network/Tox/DHT
parentb411ab66ceee7386e4829e2337c735a08fb3d54d (diff)
Modify kademlia search to distinguish a Canceled from timed-out query.
Diffstat (limited to 'dht/src/Network/Tox/DHT')
-rw-r--r--dht/src/Network/Tox/DHT/Handlers.hs12
1 files changed, 8 insertions, 4 deletions
diff --git a/dht/src/Network/Tox/DHT/Handlers.hs b/dht/src/Network/Tox/DHT/Handlers.hs
index dc4ca5fa..d132da88 100644
--- a/dht/src/Network/Tox/DHT/Handlers.hs
+++ b/dht/src/Network/Tox/DHT/Handlers.hs
@@ -198,7 +198,7 @@ newRouting addr crypto update4 update6 = do
198 nullSearch = Search 198 nullSearch = Search
199 { searchSpace = toxSpace 199 { searchSpace = toxSpace
200 , searchNodeAddress = nodeIP &&& nodePort 200 , searchNodeAddress = nodeIP &&& nodePort
201 , searchQuery = \_ _ -> return Nothing 201 , searchQuery = \_ _ -> return Canceled
202 , searchAlpha = 1 202 , searchAlpha = 1
203 , searchK = 2 203 , searchK = 2
204 } 204 }
@@ -410,7 +410,8 @@ unsendNodes _ = Nothing
410unwrapNodes :: SendNodes -> ( [NodeInfo], [NodeInfo], Maybe () ) 410unwrapNodes :: SendNodes -> ( [NodeInfo], [NodeInfo], Maybe () )
411unwrapNodes (SendNodes ns) = (map udpNodeInfo ns,map udpNodeInfo ns,Just ()) 411unwrapNodes (SendNodes ns) = (map udpNodeInfo ns,map udpNodeInfo ns,Just ())
412 412
413getNodes :: Client -> TVar (HashMap NodeId [NodeInfoCallback]) -> NodeId -> Multi.NodeInfo -> IO (Maybe ([NodeInfo],[NodeInfo],Maybe ())) 413getNodes :: Client -> TVar (HashMap NodeId [NodeInfoCallback]) -> NodeId -> Multi.NodeInfo
414 -> IO (QR.Result ([NodeInfo],[NodeInfo],Maybe ()))
414getNodes client cbvar nid addr = do 415getNodes client cbvar nid addr = do
415 -- dput XMisc $ show addr ++ " <-- getnodes " ++ show nid 416 -- dput XMisc $ show addr ++ " <-- getnodes " ++ show nid
416 reply <- QR.sendQuery client (serializer GetNodesType DHTGetNodes unsendNodes) (GetNodes nid) addr 417 reply <- QR.sendQuery client (serializer GetNodesType DHTGetNodes unsendNodes) (GetNodes nid) addr
@@ -423,9 +424,12 @@ getNodes client cbvar nid addr = do
423 forM_ mcbs $ \cbs -> do 424 forM_ mcbs $ \cbs -> do
424 forM_ cbs $ \cb -> do 425 forM_ cbs $ \cb -> do
425 rumoredAddress cb now addr (udpNodeInfo n) 426 rumoredAddress cb now addr (udpNodeInfo n)
426 return $ fmap unwrapNodes $ join $ resultToMaybe reply 427 return $ case reply of
428 Success x -> maybe Canceled (Success . unwrapNodes) x
429 _ -> fmap (error "Network.Tox.DHT.Handlers.getNodes: the impossible happened!") reply
427 430
428getNodesUDP :: Client -> TVar (HashMap NodeId [NodeInfoCallback]) -> NodeId -> NodeInfo -> IO (Maybe ([NodeInfo],[NodeInfo],Maybe ())) 431getNodesUDP :: Client -> TVar (HashMap NodeId [NodeInfoCallback]) -> NodeId -> NodeInfo
432 -> IO (QR.Result ([NodeInfo],[NodeInfo],Maybe ()))
429getNodesUDP client cbvar nid addr = getNodes client cbvar nid (Multi.UDP ==> addr) 433getNodesUDP client cbvar nid addr = getNodes client cbvar nid (Multi.UDP ==> addr)
430 434
431updateRouting :: Client -> Routing 435updateRouting :: Client -> Routing