summaryrefslogtreecommitdiff
path: root/dht/ToxManager.hs
diff options
context:
space:
mode:
Diffstat (limited to 'dht/ToxManager.hs')
-rw-r--r--dht/ToxManager.hs23
1 files changed, 17 insertions, 6 deletions
diff --git a/dht/ToxManager.hs b/dht/ToxManager.hs
index 403167c2..0363f7f0 100644
--- a/dht/ToxManager.hs
+++ b/dht/ToxManager.hs
@@ -35,6 +35,7 @@ import DebugTag
35import Foreign.Storable 35import Foreign.Storable
36import HandshakeCache 36import HandshakeCache
37import Network.Address 37import Network.Address
38import Network.Kademlia.Bootstrap
38import qualified Network.Kademlia.Routing as R 39import qualified Network.Kademlia.Routing as R
39 ;import Network.Kademlia.Routing as R 40 ;import Network.Kademlia.Routing as R
40import Network.Kademlia.Search 41import Network.Kademlia.Search
@@ -51,7 +52,7 @@ import Network.Tox.NodeId
51import qualified Network.Tox.Onion.Handlers as Tox 52import qualified Network.Tox.Onion.Handlers as Tox
52import qualified Network.Tox.Onion.Transport as Tox 53import qualified Network.Tox.Onion.Transport as Tox
53 ;import Network.Tox.Onion.Transport (OnionData (..)) 54 ;import Network.Tox.Onion.Transport (OnionData (..))
54import Network.Tox.Onion.Routes (tcpKademliaClient) 55import Network.Tox.Onion.Routes (tcpKademliaClient,tcpBucketRefresher)
55import qualified Network.Tox.TCP as TCP 56import qualified Network.Tox.TCP as TCP
56import Presence 57import Presence
57import Text.Read 58import Text.Read
@@ -310,6 +311,11 @@ connectViaRelay tx theirKey theirDhtKey ann tkey now = do
310 311
311gotDhtPubkey :: Tox.DHTPublicKey -> ToxToXMPP -> PublicKey -> IO () 312gotDhtPubkey :: Tox.DHTPublicKey -> ToxToXMPP -> PublicKey -> IO ()
312gotDhtPubkey theirDhtKey tx theirKey = do 313gotDhtPubkey theirDhtKey tx theirKey = do
314 dput XNetCrypto $ unlines $
315 [ "Recieved DHTKey from " ++ show (Tox.key2id theirKey)
316 , " DHT: " ++ show target
317 ] ++ let Tox.SendNodes ns = Tox.dhtpkNodes theirDhtKey
318 in [ " relay " ++ show n | n <- ns ]
313 contact <- atomically $ getContact theirKey (txAccount tx) >>= mapM (readTVar . contactLastSeenAddr) 319 contact <- atomically $ getContact theirKey (txAccount tx) >>= mapM (readTVar . contactLastSeenAddr)
314 forM_ contact $ \lastSeen -> do 320 forM_ contact $ \lastSeen -> do
315 case lastSeen of 321 case lastSeen of
@@ -591,13 +597,18 @@ checkSoliciting presence me them contact = do
591 597
592nearNodes :: Tox extra -> NodeId -> STM [NodeInfo] 598nearNodes :: Tox extra -> NodeId -> STM [NodeInfo]
593nearNodes tox nid = do 599nearNodes tox nid = do
600 let refresher = tcpBucketRefresher $ toxOnionRoutes tox
594 bkts4 <- readTVar $ routing4 $ toxRouting tox 601 bkts4 <- readTVar $ routing4 $ toxRouting tox
595 bkts6 <- readTVar $ routing6 $ toxRouting tox 602 bkts6 <- readTVar $ routing6 $ toxRouting tox
596 let nss = 603 bktsTCP <- readTVar $ refreshBuckets refresher
597 map 604 let udpSpace = searchSpace $ toxQSearch tox
598 (R.kclosest (searchSpace $ toxQSearch tox) (searchK $ toxQSearch tox) nid) 605 k = searchK $ toxQSearch tox
599 [bkts4, bkts6] 606 nss = map (R.kclosest udpSpace k nid) [bkts4, bkts6]
600 return $ foldr interweave [] nss 607 ns_UDP = foldr interweave [] nss
608 ns_TCP = case refresher of
609 BucketRefresher{refreshSearch=sch}
610 -> R.kclosest (searchSpace sch) k nid bktsTCP
611 return $ ns_UDP ++ map TCP.udpNodeInfo ns_TCP
601 612
602startConnecting0 :: ToxToXMPP -> PublicKey -> Contact -> String -> IO () 613startConnecting0 :: ToxToXMPP -> PublicKey -> Contact -> String -> IO ()
603startConnecting0 tx them contact reason = do 614startConnecting0 tx them contact reason = do