@@ -475,10 +475,12 @@ sendBatchedGossipToServer = \server allEvents ->
475475 if count acc >= maxGossipEvents then acc
476476 else union acc [e]) [] allEvents
477477 let rest = diff allEvents batch
478− fetch (federationScheme ++ server) (RecvGossip {
478+ batchResult <- fetch (federationScheme ++ server) (RecvGossip {
479479 authorization: "Bearer " ++ federationSecret,
480480 events: batch, hopsRemaining: 2, fromServer: serverHostN})
481− sendBatchedGossipToServer server rest
481+ case batchResult of
482+ Ok _ -> sendBatchedGossipToServer server rest
483+ Err _ -> yield {}
482484
483485sendBatchedGossip : [Text] -> [{eventType: Text, pubkey: Text, server: Text, timestamp: Int, ttl: Int}] -> IO {} {}
484486sendBatchedGossip = \peerServers allEvents ->
@@ -843,16 +845,18 @@ serve = \req -> case req of
843845 let finalStatus = if result.status == "federated" && (federationSecret == "" || result.forwardsAtCapacity) then "queued" else result.status
844846 if count result.remoteServers > 0 && not (result.status == "unauthorized") && not (result.status == "invalid") && not (result.status == "rejected") && not (federationSecret == "")
845847 then sendToEach result.remoteServers (\server -> do
846− fetch (federationScheme ++ server) (ForwardMessage {
848+ fwdResult <- fetch (federationScheme ++ server) (ForwardMessage {
847849 toKey: to, fromKey: result.fromKey, encryptedBlob: encryptedBlob,
848850 timestamp: clampedTs, originServer: serverHostN, messageId: msgId,
849851 authorization: "Bearer " ++ federationSecret})
850− atomic do
851− forwards <- *forwards
852− set *forwards = do
853− x <- forwards
854− where not (x.messageId == msgId && x.toServer == server)
855− yield x)
852+ case fwdResult of
853+ Ok _ -> atomic do
854+ forwards <- *forwards
855+ set *forwards = do
856+ x <- forwards
857+ where not (x.messageId == msgId && x.toServer == server)
858+ yield x
859+ Err _ -> yield {})
856860 else yield {}
857861 if result.forwardsAtCapacity && count result.remoteServers > 0 && not (result.status == "unauthorized") && not (result.status == "invalid") && not (result.status == "rejected")
858862 then println ("sendMessage: forwards at capacity (" ++ show maxForwardsEntries ++ "), skipping forward tracking")
@@ -1046,14 +1050,13 @@ serve = \req -> case req of
10461050 gossipResult <- atomic do
10471051 pr <- maybePrune t
10481052 presence <- *presence
1049− let fromServerTrusted = count (do p <- presence; where p.server == fromServer; where p.expiresAt > t; yield p) > 0
10501053 let trustedDeduped = do
10511054 e <- deduped
1052− where e.server == fromServer || fromServerTrusted || count (do p <- presence; where p.server == e.server; where p.expiresAt > t; yield p) > 0
1055+ where e.server == fromServer || count (do p <- presence; where p.server == e.server; where p.expiresAt > t; yield p) > 0
10531056 yield e
10541057 let trustedOffline = do
10551058 e <- offlineEntries
1056− where e.server == fromServer || fromServerTrusted || count (do p <- presence; where p.server == e.server; where p.expiresAt > t; yield p) > 0
1059+ where e.server == fromServer || count (do p <- presence; where p.server == e.server; where p.expiresAt > t; yield p) > 0
10571060 yield e
10581061 let appliedOnline = do
10591062 e <- trustedDeduped
@@ -1356,10 +1359,11 @@ backgroundPrune = do
13561359 where not (a.originServer == serverHostN)
13571360 yield a
13581361 yield {expiredLocal: pr.expiredLocal, peerServers: pr.peerServers, pendingForwards: pendingForwards, pendingAcks: pendingAcks}
1362+ fork backgroundPrune
13591363 broadcastOfflineGossip t result.peerServers result.expiredLocal
13601364 if not (federationSecret == "") && count result.pendingForwards > 0
13611365 then retryPendingForwards result.pendingForwards
1362− else yield {}
1366+ else yield {}
13631367 if not (federationSecret == "") && count result.pendingAcks > 0
13641368 then do
13651369 let ackOriginServers = fold (\acc a ->
@@ -1367,7 +1371,6 @@ backgroundPrune = do
13671371 else union acc [a.originServer]) [] result.pendingAcks
13681372 sendAcksAndClean result.pendingAcks ackOriginServers
13691373 else yield {}
1370− fork backgroundPrune
13711374
13721375main = do
13731376 println "Skrepka relay server starting on port 8080..."