on master help sign in
Fix bug #3: enforce per-peer forward cap on total outstanding forwards
e6e5aa8iko
server.knot+3−1
@@ -569,8 +569,10 @@ forwardQueuedToServer : PubkeyHex -> ServerName -> IO {rw *forwards, r *messages
569forwardQueuedToServer = \pubkey server -> atomic (do
569forwardQueuedToServer = \pubkey server -> atomic (do
570 msgs <- *messages
570 msgs <- *messages
571 fwds <- *forwards
571 fwds <- *forwards
572+ let existing = count (filter (\f -> f.toServer == server) fwds)
573+ let budget = max 0 (maxForwardsPerServer - existing)
572 let candidates = filter (\m -> m.toKey == pubkey && not any (forwardMatches m.encryptedBlob server) fwds) msgs
574 let candidates = filter (\m -> m.toKey == pubkey && not any (forwardMatches m.encryptedBlob server) fwds) msgs
573− let newFwds = map (\m -> {toServer: server, m.toKey, m.encryptedBlob, retries: 0}) (take maxForwardsPerServer candidates)
575+ let newFwds = map (\m -> {toServer: server, m.toKey, m.encryptedBlob, retries: 0}) (take budget candidates)
574 *forwards = union fwds newFwds)
576 *forwards = union fwds newFwds)
575
577
576-- ============================================
578-- ============================================