diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-07-12 09:28:55 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-07-12 11:56:52 +0200 |
commit | c93d7b7fd421c66806ff748edaece69f894eb30b (patch) | |
tree | 9f7d3ad7ac070a5764fd86b498702a8769049ca4 /src | |
parent | a1c634a56aefa84668fc5bfde6845824ecc48bac (diff) |
Discovery: record only matched addresses
Diffstat (limited to 'src')
-rw-r--r-- | src/Erebos/Discovery.hs | 15 |
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 } |