diff options
Diffstat (limited to 'dht/ToxManager.hs')
-rw-r--r-- | dht/ToxManager.hs | 23 |
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 | |||
35 | import Foreign.Storable | 35 | import Foreign.Storable |
36 | import HandshakeCache | 36 | import HandshakeCache |
37 | import Network.Address | 37 | import Network.Address |
38 | import Network.Kademlia.Bootstrap | ||
38 | import qualified Network.Kademlia.Routing as R | 39 | import qualified Network.Kademlia.Routing as R |
39 | ;import Network.Kademlia.Routing as R | 40 | ;import Network.Kademlia.Routing as R |
40 | import Network.Kademlia.Search | 41 | import Network.Kademlia.Search |
@@ -51,7 +52,7 @@ import Network.Tox.NodeId | |||
51 | import qualified Network.Tox.Onion.Handlers as Tox | 52 | import qualified Network.Tox.Onion.Handlers as Tox |
52 | import qualified Network.Tox.Onion.Transport as Tox | 53 | import qualified Network.Tox.Onion.Transport as Tox |
53 | ;import Network.Tox.Onion.Transport (OnionData (..)) | 54 | ;import Network.Tox.Onion.Transport (OnionData (..)) |
54 | import Network.Tox.Onion.Routes (tcpKademliaClient) | 55 | import Network.Tox.Onion.Routes (tcpKademliaClient,tcpBucketRefresher) |
55 | import qualified Network.Tox.TCP as TCP | 56 | import qualified Network.Tox.TCP as TCP |
56 | import Presence | 57 | import Presence |
57 | import Text.Read | 58 | import Text.Read |
@@ -310,6 +311,11 @@ connectViaRelay tx theirKey theirDhtKey ann tkey now = do | |||
310 | 311 | ||
311 | gotDhtPubkey :: Tox.DHTPublicKey -> ToxToXMPP -> PublicKey -> IO () | 312 | gotDhtPubkey :: Tox.DHTPublicKey -> ToxToXMPP -> PublicKey -> IO () |
312 | gotDhtPubkey theirDhtKey tx theirKey = do | 313 | gotDhtPubkey 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 | ||
592 | nearNodes :: Tox extra -> NodeId -> STM [NodeInfo] | 598 | nearNodes :: Tox extra -> NodeId -> STM [NodeInfo] |
593 | nearNodes tox nid = do | 599 | nearNodes 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 | ||
602 | startConnecting0 :: ToxToXMPP -> PublicKey -> Contact -> String -> IO () | 613 | startConnecting0 :: ToxToXMPP -> PublicKey -> Contact -> String -> IO () |
603 | startConnecting0 tx them contact reason = do | 614 | startConnecting0 tx them contact reason = do |