summaryrefslogtreecommitdiff
path: root/dht/src/Network/Tox.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-11-28 12:05:47 -0500
committerJoe Crayne <joe@jerkface.net>2020-01-01 22:50:28 -0500
commit62be467e38b5919baeed90784ac1b62a3e256649 (patch)
tree13ea603a52e1c4972fedda18a306da0c27ae63af /dht/src/Network/Tox.hs
parent3ebd7ae11d7a86798b31bdb17af9797ba5e09f1d (diff)
* Fixed accidental usage of TCP rather than UDP port.
* Onion: special handling for localhost addresses.
Diffstat (limited to 'dht/src/Network/Tox.hs')
-rw-r--r--dht/src/Network/Tox.hs11
1 files changed, 9 insertions, 2 deletions
diff --git a/dht/src/Network/Tox.hs b/dht/src/Network/Tox.hs
index 69c56e24..8a952aa4 100644
--- a/dht/src/Network/Tox.hs
+++ b/dht/src/Network/Tox.hs
@@ -45,6 +45,7 @@ import System.Endian
45import System.IO.Error 45import System.IO.Error
46 46
47import Data.TableMethods 47import Data.TableMethods
48import Data.Tox.Onion (substituteLoopback)
48import qualified Data.Word64Map 49import qualified Data.Word64Map
49import Network.BitTorrent.DHT.Token as Token 50import Network.BitTorrent.DHT.Token as Token
50import qualified Data.Wrapper.PSQ as PSQ 51import qualified Data.Wrapper.PSQ as PSQ
@@ -78,6 +79,7 @@ import Network.Tox.Relay
78import Network.SessionTransports 79import Network.SessionTransports
79import Network.Kademlia.Search 80import Network.Kademlia.Search
80import HandshakeCache 81import HandshakeCache
82import Data.ByteString.Base16 as Base16
81 83
82updateIP :: TVar (R.BucketList NodeInfo) -> SockAddr -> STM () 84updateIP :: TVar (R.BucketList NodeInfo) -> SockAddr -> STM ()
83updateIP tblvar a = do 85updateIP tblvar a = do
@@ -291,7 +293,12 @@ newTox keydb bindspecs onsess crypto tcp = do
291 throwIO $ userError "Tox UDP listen port?" 293 throwIO $ userError "Tox UDP listen port?"
292 (udp,sock) <- foldr tryBind failedBind addrs Nothing 294 (udp,sock) <- foldr tryBind failedBind addrs Nothing
293 addr <- getSocketName sock 295 addr <- getSocketName sock
294 (relay,sendTCP) <- tcpRelay (fst crypto) addr (\a x -> sendMessage udp a $ S.runPut $ Onion.putRequest x) 296 dput XOnion $ "UDP bind address: " ++ show addr
297 (relay,sendTCP) <- tcpRelay (fst crypto) addr $ \a x -> do
298 let bs = S.runPut $ Onion.putRequest x
299 dput XOnion $ "Sending onion(0x" ++ (C8.unpack . Base16.encode) (B.take 1 bs) ++ ") from tcp-client to " ++ show a
300 -- mapM_ (dput XOnion) (xxd2 0 bs)
301 sendMessage udp (substituteLoopback addr a) bs
295 tox <- newToxOverTransport keydb addr onsess crypto udp sendTCP 302 tox <- newToxOverTransport keydb addr onsess crypto udp sendTCP
296 return tox { toxAnnounceToLan = announceToLan sock (key2id $ transportPublic $ toxCryptoKeys tox) 303 return tox { toxAnnounceToLan = announceToLan sock (key2id $ transportPublic $ toxCryptoKeys tox)
297 , toxRelayServer = Just relay 304 , toxRelayServer = Just relay
@@ -330,7 +337,7 @@ newToxOverTransport keydb addr onNewSession (crypto,roster) udp tcp = do
330 mkrouting <- DHT.newRouting addr crypto updateIP updateIP 337 mkrouting <- DHT.newRouting addr crypto updateIP updateIP
331 (orouter,otbl) <- newOnionRouter crypto (dput XRoutes) 338 (orouter,otbl) <- newOnionRouter crypto (dput XRoutes)
332 (cryptonet,dhtcrypt,onioncrypt,dtacrypt,handshakes) 339 (cryptonet,dhtcrypt,onioncrypt,dtacrypt,handshakes)
333 <- toxTransport crypto orouter lookupClose udp 340 <- toxTransport crypto orouter lookupClose addr udp
334 (\dst x -> sendMessage (clientNet $ tcpClient $ tcpKademliaClient orouter) dst (True,x)) 341 (\dst x -> sendMessage (clientNet $ tcpClient $ tcpKademliaClient orouter) dst (True,x))
335 tcp 342 tcp
336 sessions <- initSessions (sendMessage cryptonet) 343 sessions <- initSessions (sendMessage cryptonet)