summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2020-01-12 22:57:39 -0500
committerJoe Crayne <joe@jerkface.net>2020-01-12 22:57:39 -0500
commitc3866287f929e153a00293d3c548b26c7e910b9b (patch)
treefb44b4df043487bf1a76d454f6b7c35d291c7eaa
parent038fc07c26122bd65e07c079107abf8ab34f6278 (diff)
Configure connection requests before having contact's dhtkey.
-rw-r--r--dht/ToxManager.hs2
-rw-r--r--dht/examples/dhtd.hs6
-rw-r--r--dht/src/Network/Tox.hs12
3 files changed, 14 insertions, 6 deletions
diff --git a/dht/ToxManager.hs b/dht/ToxManager.hs
index 4d8910e2..dd8f5940 100644
--- a/dht/ToxManager.hs
+++ b/dht/ToxManager.hs
@@ -646,7 +646,7 @@ startConnecting0 tx them contact reason = do
646 let meth = SearchMethod (toxQSearch tox) onResult (nearNodes tox) (key2id them) 30 646 let meth = SearchMethod (toxQSearch tox) onResult (nearNodes tox) (key2id them) 30
647 where 647 where
648 onResult theirkey rendezvous = do 648 onResult theirkey rendezvous = do
649 dkey <- Tox.getContactInfo tox 649 dkey <- Tox.getContactInfo (Just (txTCP tx,them)) tox
650 let tr = Tox.toxToRoute tox 650 let tr = Tox.toxToRoute tox
651 route = Tox.AnnouncedRendezvous theirkey rendezvous 651 route = Tox.AnnouncedRendezvous theirkey rendezvous
652 dput XMan $ unwords [ take 8 (show $ key2id theirkey) 652 dput XMan $ unwords [ take 8 (show $ key2id theirkey)
diff --git a/dht/examples/dhtd.hs b/dht/examples/dhtd.hs
index c36508ef..d7c817ca 100644
--- a/dht/examples/dhtd.hs
+++ b/dht/examples/dhtd.hs
@@ -1581,7 +1581,11 @@ initTox runio opts ssvar keysdb mbxmpp invc = case porttox opts of
1581 -- 1581 --
1582 -- > a +dhtkey KWoEx1XQHrluIoW.3nK6BFb6XCebKWr3nDDt3V7CcoJ 1582 -- > a +dhtkey KWoEx1XQHrluIoW.3nK6BFb6XCebKWr3nDDt3V7CcoJ
1583 , ("dhtkey", DHTAnnouncable { announceSendData = Left ("toxid", readEither, \me them addr -> do 1583 , ("dhtkey", DHTAnnouncable { announceSendData = Left ("toxid", readEither, \me them addr -> do
1584 dkey <- Tox.getContactInfo tox 1584 -- let mthem = Just ( TCP.tcpClient
1585 -- $ tcpKademliaClient
1586 -- $ toxOnionRoutes tox
1587 -- , them )
1588 dkey <- Tox.getContactInfo Nothing tox
1585 sendMessage 1589 sendMessage
1586 (Tox.toxToRoute tox) 1590 (Tox.toxToRoute tox)
1587 (Tox.AnnouncedRendezvous them addr) 1591 (Tox.AnnouncedRendezvous them addr)
diff --git a/dht/src/Network/Tox.hs b/dht/src/Network/Tox.hs
index f136ab96..fca0f9e0 100644
--- a/dht/src/Network/Tox.hs
+++ b/dht/src/Network/Tox.hs
@@ -72,7 +72,7 @@ import qualified Network.Tox.Onion.Transport as Onion
72import Network.Tox.RelayPinger 72import Network.Tox.RelayPinger
73import System.Global6 73import System.Global6
74import Network.Tox.Transport 74import Network.Tox.Transport
75import Network.Tox.TCP (tcpClient) 75import Network.Tox.TCP (tcpClient, RelayClient)
76import Network.Tox.Onion.Routes 76import Network.Tox.Onion.Routes
77import Network.Tox.ContactInfo 77import Network.Tox.ContactInfo
78import Text.XXD 78import Text.XXD
@@ -199,8 +199,8 @@ data Tox extra = Tox
199 199
200 200
201-- | Create a DHTPublicKey packet to send to a remote contact. 201-- | Create a DHTPublicKey packet to send to a remote contact.
202getContactInfo :: Tox extra -> IO DHT.DHTPublicKey 202getContactInfo :: Maybe (RelayClient,PublicKey) -> Tox extra -> IO DHT.DHTPublicKey
203getContactInfo Tox{toxCryptoKeys,toxRouting,toxOnionRoutes} = join $ atomically $ do 203getContactInfo mthem Tox{toxCryptoKeys,toxRouting,toxOnionRoutes} = join $ atomically $ do
204 (rcnt,relays) <- currentRelays (tcpRelayPinger toxOnionRoutes) 204 (rcnt,relays) <- currentRelays (tcpRelayPinger toxOnionRoutes)
205 r4 <- readTVar $ DHT.routing4 toxRouting 205 r4 <- readTVar $ DHT.routing4 toxRouting
206 r6 <- readTVar $ DHT.routing6 toxRouting 206 r6 <- readTVar $ DHT.routing6 toxRouting
@@ -212,12 +212,16 @@ getContactInfo Tox{toxCryptoKeys,toxRouting,toxOnionRoutes} = join $ atomically
212 n6s = R.kclosest DHT.toxSpace 4 self r6 212 n6s = R.kclosest DHT.toxSpace 4 self r6
213 ns = filter (DHT.isGlobal . nodeIP) [n4,n6] 213 ns = filter (DHT.isGlobal . nodeIP) [n4,n6]
214 ++ concat (zipWith (\a b -> [a,b]) n4s n6s) 214 ++ concat (zipWith (\a b -> [a,b]) n4s n6s)
215 sending_ns = take 4 $ relays ++ map TCP.fromUDPNode ns
215 return $ do 216 return $ do
217 forM_ mthem $ \(tcp,them) ->
218 forM_ (filter (\n -> TCP.tcpPort n /= 0) sending_ns) $ \ni -> do
219 Multi.tcpConnectionRequest tcp them ni
216 timestamp <- round . (* 1000000) <$> getPOSIXTime 220 timestamp <- round . (* 1000000) <$> getPOSIXTime
217 return DHT.DHTPublicKey 221 return DHT.DHTPublicKey
218 { dhtpkNonce = timestamp 222 { dhtpkNonce = timestamp
219 , dhtpk = id2key self 223 , dhtpk = id2key self
220 , dhtpkNodes = DHT.SendNodes $ take 4 $ relays ++ map TCP.fromUDPNode ns 224 , dhtpkNodes = DHT.SendNodes sending_ns
221 } 225 }
222 226
223isLocalHost :: SockAddr -> Bool 227isLocalHost :: SockAddr -> Bool