diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-01-23 21:47:11 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-01-23 21:50:33 +0100 |
| commit | de445ec5a490da6ff22d2789b330f45d5e37765c (patch) | |
| tree | bf5d2de21458c1e1007d516a4c334a735b3545c9 /src/Erebos/Discovery.hs | |
| parent | 924b0790084aebae13318425045aeaa66e150d5e (diff) | |
Silence error when calling discoverySearch without the service
Diffstat (limited to 'src/Erebos/Discovery.hs')
| -rw-r--r-- | src/Erebos/Discovery.hs | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/Erebos/Discovery.hs b/src/Erebos/Discovery.hs index 5590e4c..09ed22d 100644 --- a/src/Erebos/Discovery.hs +++ b/src/Erebos/Discovery.hs @@ -566,20 +566,29 @@ getIceConfig = do #endif -discoverySearch :: (MonadIO m, MonadError e m, FromErebosError e) => Server -> RefDigest -> m () +-- | Start search for an identity identified by given ref using the discovery +-- service. +discoverySearch + :: forall m e. (MonadIO m, MonadError e m, FromErebosError e) + => Server -- ^ `Server' object to run the discovery + -> RefDigest -- ^ Reference identifying the intended peer + -> m () discoverySearch server dgst = do - peers <- liftIO $ getCurrentPeerList server - match <- forM peers $ \peer -> do - getPeerIdentity peer >>= \case - PeerIdentityFull pid -> do - return $ dgst `elem` identityDigests pid - _ -> return False - when (not $ or match) $ do - modifyServiceGlobalState server (Proxy @DiscoveryService) $ \s -> (, ()) s - { dgsSearchingFor = S.insert dgst $ dgsSearchingFor s - } - forM_ peers $ \peer -> do - sendToPeer peer $ DiscoverySearch $ Right dgst + flip catchError (\e -> case toErebosError e of + Just (UnhandledService svc) | svc == serviceID (Proxy @DiscoveryService) -> return () + _ -> throwError e) $ do + peers <- liftIO $ getCurrentPeerList server + match <- forM peers $ \peer -> do + getPeerIdentity peer >>= \case + PeerIdentityFull pid -> do + return $ dgst `elem` identityDigests pid + _ -> return False + when (not $ or match) $ do + modifyServiceGlobalState server (Proxy @DiscoveryService) $ \s -> (, ()) s + { dgsSearchingFor = S.insert dgst $ dgsSearchingFor s + } + forM_ peers $ \peer -> do + sendToPeer peer $ DiscoverySearch $ Right dgst data TunnelAddress = TunnelAddress |