summaryrefslogtreecommitdiff
path: root/src/Erebos/Discovery.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-01-23 21:47:11 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2026-01-23 21:50:33 +0100
commitde445ec5a490da6ff22d2789b330f45d5e37765c (patch)
treebf5d2de21458c1e1007d516a4c334a735b3545c9 /src/Erebos/Discovery.hs
parent924b0790084aebae13318425045aeaa66e150d5e (diff)
Silence error when calling discoverySearch without the service
Diffstat (limited to 'src/Erebos/Discovery.hs')
-rw-r--r--src/Erebos/Discovery.hs35
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