summaryrefslogtreecommitdiff
path: root/src/Erebos
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-07-12 09:28:55 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-07-12 11:56:52 +0200
commitc93d7b7fd421c66806ff748edaece69f894eb30b (patch)
tree9f7d3ad7ac070a5764fd86b498702a8769049ca4 /src/Erebos
parenta1c634a56aefa84668fc5bfde6845824ecc48bac (diff)
Discovery: record only matched addresses
Diffstat (limited to 'src/Erebos')
-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 }