diff options
author | Joe Crayne <joe@jerkface.net> | 2019-11-28 12:05:47 -0500 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2020-01-01 22:50:28 -0500 |
commit | 62be467e38b5919baeed90784ac1b62a3e256649 (patch) | |
tree | 13ea603a52e1c4972fedda18a306da0c27ae63af /dht/src/Network/Tox.hs | |
parent | 3ebd7ae11d7a86798b31bdb17af9797ba5e09f1d (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.hs | 11 |
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 | |||
45 | import System.IO.Error | 45 | import System.IO.Error |
46 | 46 | ||
47 | import Data.TableMethods | 47 | import Data.TableMethods |
48 | import Data.Tox.Onion (substituteLoopback) | ||
48 | import qualified Data.Word64Map | 49 | import qualified Data.Word64Map |
49 | import Network.BitTorrent.DHT.Token as Token | 50 | import Network.BitTorrent.DHT.Token as Token |
50 | import qualified Data.Wrapper.PSQ as PSQ | 51 | import qualified Data.Wrapper.PSQ as PSQ |
@@ -78,6 +79,7 @@ import Network.Tox.Relay | |||
78 | import Network.SessionTransports | 79 | import Network.SessionTransports |
79 | import Network.Kademlia.Search | 80 | import Network.Kademlia.Search |
80 | import HandshakeCache | 81 | import HandshakeCache |
82 | import Data.ByteString.Base16 as Base16 | ||
81 | 83 | ||
82 | updateIP :: TVar (R.BucketList NodeInfo) -> SockAddr -> STM () | 84 | updateIP :: TVar (R.BucketList NodeInfo) -> SockAddr -> STM () |
83 | updateIP tblvar a = do | 85 | updateIP 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) |