summaryrefslogtreecommitdiff
path: root/dht/src/Network/Tox.hs
diff options
context:
space:
mode:
Diffstat (limited to 'dht/src/Network/Tox.hs')
-rw-r--r--dht/src/Network/Tox.hs13
1 files changed, 6 insertions, 7 deletions
diff --git a/dht/src/Network/Tox.hs b/dht/src/Network/Tox.hs
index 4aed1c43..270a9036 100644
--- a/dht/src/Network/Tox.hs
+++ b/dht/src/Network/Tox.hs
@@ -36,6 +36,7 @@ import qualified Data.ByteString.Char8 as C8
36import Data.Data 36import Data.Data
37import qualified Data.Dependent.Map as DMap 37import qualified Data.Dependent.Map as DMap
38import Data.Dependent.Sum 38import Data.Dependent.Sum
39import Data.Functor
39import Data.Functor.Identity 40import Data.Functor.Identity
40import Data.Functor.Contravariant 41import Data.Functor.Contravariant
41import Data.Maybe 42import Data.Maybe
@@ -56,6 +57,7 @@ import qualified Data.Word64Map (empty)
56 ;import Data.Word64Map (fitsInInt) 57 ;import Data.Word64Map (fitsInInt)
57import qualified Data.Wrapper.PSQ as PSQ 58import qualified Data.Wrapper.PSQ as PSQ
58import Network.Address (IP, WantIP (..), getBindAddress) 59import Network.Address (IP, WantIP (..), getBindAddress)
60import Network.Bind as Bind
59import Network.BitTorrent.DHT.Token as Token 61import Network.BitTorrent.DHT.Token as Token
60import Network.Kademlia.Bootstrap (bootstrap, forkPollForRefresh) 62import Network.Kademlia.Bootstrap (bootstrap, forkPollForRefresh)
61import qualified Network.Kademlia.Routing as R 63import qualified Network.Kademlia.Routing as R
@@ -262,14 +264,11 @@ newTox :: TVar Onion.AnnouncedKeys -- ^ Store of announced keys we are a rende
262 -- ( Int -> Onion.OnionMessage Encrypted -> IO () ) -- ^ TCP-bound onion responses. XXX ignored 264 -- ( Int -> Onion.OnionMessage Encrypted -> IO () ) -- ^ TCP-bound onion responses. XXX ignored
263 -> IO (Tox extra) 265 -> IO (Tox extra)
264newTox keydb bindspecs onsess crypto usetcp = do 266newTox keydb bindspecs onsess crypto usetcp = do
265 addrs <- mapM (`getBindAddress` True) bindspecs 267 msock <- Bind.udpTransport' True bindspecs
266 let tryBind addr next _ = udpTransport' addr `catchIOError` (next . Just) 268 let failedBind = do
267 failedBind mbe = do 269 dput XDHT $ "tox udp bind error: " ++ show bindspecs
268 forM_ mbe $ \e -> do
269 dput XDHT $ "tox udp bind error: " ++ show addrs ++ " " ++ show e
270 throwIO e
271 throwIO $ userError "Tox UDP listen port?" 270 throwIO $ userError "Tox UDP listen port?"
272 (udp,sock) <- foldr tryBind failedBind addrs Nothing 271 fromMaybe failedBind $ msock <&> \(udp,sock) -> do
273 addr <- getSocketName sock 272 addr <- getSocketName sock
274 dput XOnion $ "UDP bind address: " ++ show addr 273 dput XOnion $ "UDP bind address: " ++ show addr
275 (relay,sendTCP) <- 274 (relay,sendTCP) <-