summaryrefslogtreecommitdiff
path: root/src/Erebos/Discovery.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Erebos/Discovery.hs')
-rw-r--r--src/Erebos/Discovery.hs15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/Erebos/Discovery.hs b/src/Erebos/Discovery.hs
index ede9cc9..b27c617 100644
--- a/src/Erebos/Discovery.hs
+++ b/src/Erebos/Discovery.hs
@@ -28,6 +28,8 @@ import Data.Word
import Network.Socket
+import Text.Read
+
#ifdef ENABLE_ICE_SUPPORT
import Erebos.ICE
#endif
@@ -222,10 +224,13 @@ instance Service DiscoveryService where
| addr == T.pack "ICE" -> do
return $ Just addr
- | [ ipaddr, port ] <- words (T.unpack addr)
- , DatagramAddress paddr <- peerAddress peer -> do
- saddr <- liftIO $ head <$> getAddrInfo (Just $ defaultHints { addrSocketType = Datagram }) (Just ipaddr) (Just port)
- return $ if paddr == addrAddress saddr
+ | [ ipaddrStr, portStr ] <- words (T.unpack addr)
+ , Just ipaddr <- readMaybe ipaddrStr
+ , Just port <- readMaybe portStr
+ , DatagramAddress saddr <- peerAddress peer
+ , Just paddr <- IP.fromSockAddr saddr
+ -> do
+ return $ if ( ipaddr, port ) == paddr
then Just addr
else Nothing
@@ -235,7 +240,7 @@ instance Service DiscoveryService where
let dp = DiscoveryPeer
{ dpPriority = fromMaybe 0 priority
, dpPeer = Just peer
- , dpAddress = addrs
+ , dpAddress = matchedAddrs
, dpIceSession = Nothing
}
svcModifyGlobal $ \s -> s { dgsPeers = M.insertWith insertHelper (refDigest $ storedRef sdata) dp $ dgsPeers s }