diff options
author | Joe Crayne <joe@jerkface.net> | 2019-12-20 01:07:27 -0500 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2020-01-01 23:27:24 -0500 |
commit | 6863cc64e606dd753d57aa1a124584bcb4416de4 (patch) | |
tree | 23076a5d547e33721fdd02320c743b9912c9c644 | |
parent | 3a03ba64a8d60708a43959cb0a5d97056afe056e (diff) |
Use tcp table as fallback nodes for onion search.
-rw-r--r-- | dht/ToxManager.hs | 23 | ||||
-rw-r--r-- | dht/src/Network/Tox/TCP.hs | 2 |
2 files changed, 18 insertions, 7 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 |
diff --git a/dht/src/Network/Tox/TCP.hs b/dht/src/Network/Tox/TCP.hs index 04119164..9f0af976 100644 --- a/dht/src/Network/Tox/TCP.hs +++ b/dht/src/Network/Tox/TCP.hs | |||
@@ -349,7 +349,7 @@ newClient crypto store load lookupSender getRoute = do | |||
349 | OOBRecv k bs -> IsUnsolicited $ handleOOB k bs | 349 | OOBRecv k bs -> IsUnsolicited $ handleOOB k bs |
350 | wut -> IsUnknown (show wut) | 350 | wut -> IsUnknown (show wut) |
351 | , lookupHandler = \case | 351 | , lookupHandler = \case |
352 | PingPacket -> trace ("tcp-received-ping") $ Just MethodHandler | 352 | PingPacket -> Just MethodHandler |
353 | { methodParse = \case (_,RelayPing n8) -> Right () | 353 | { methodParse = \case (_,RelayPing n8) -> Right () |
354 | _ -> trace ("tcp-non-ping") $ Left "TCP: Non-ping?" | 354 | _ -> trace ("tcp-non-ping") $ Left "TCP: Non-ping?" |
355 | , methodSerialize = \n8 src dst () -> {- trace ("tcp-made-pong-"++show n8) -} (False, RelayPong n8) | 355 | , methodSerialize = \n8 src dst () -> {- trace ("tcp-made-pong-"++show n8) -} (False, RelayPong n8) |