From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Sun, 13 Mar 2022 01:34:10 -0800 Subject: [PATCH 07/35] Allow exemption from flood penalty in erc-backend * lisp/erc/erc-backend (erc-server-send, erc-server-PING): Change name of param `forcep' in `erc-server-send' to `force' and change its type to the union of the symbol `no-penalty' and the set of all other non-nil values. In `erc-server-PING', use this exemption when calling `erc-server-send'. This fix was fast tracked and summarily incorporated into bug#48598 because users of the soju bouncer are all affected. See update #5 in the bug's email thread under the section entitled "Riders" for an explanation. --- lisp/erc/erc-backend.el | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 787c5a8b57..96305c9410 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -816,11 +816,11 @@ erc-send-line (erc-split-line text))) ;; From Circe, with modifications -(defun erc-server-send (string &optional forcep target) +(defun erc-server-send (string &optional force target) "Send STRING to the current server. -If FORCEP is non-nil, no flood protection is done - the string is -sent directly. This might cause the messages to arrive in a wrong -order. +When FORCE is non-nil, bypass flood protection so that STRING is sent +directly without modifying the queue. When FORCE is the symbol +`no-penalty', exempt this round from accumulating a timeout penalty. If TARGET is specified, look up encoding information for that channel in `erc-encoding-coding-alist' or @@ -836,11 +836,11 @@ erc-server-send (if (erc-server-process-alive) (erc-with-server-buffer (let ((str (concat string "\r\n"))) - (if forcep + (if force (progn - (setq erc-server-flood-last-message - (+ erc-server-flood-penalty - erc-server-flood-last-message)) + (unless (eq force 'no-penalty) + (cl-incf erc-server-flood-last-message + erc-server-flood-penalty)) (erc-log-irc-protocol str 'outbound) (condition-case nil (progn @@ -1470,7 +1470,7 @@ define-erc-response-handler (let ((pinger (car (erc-response.command-args parsed)))) (erc-log (format "PING: %s" pinger)) ;; ping response to the server MUST be forced, or you can lose big - (erc-server-send (format "PONG :%s" pinger) t) + (erc-server-send (format "PONG :%s" pinger) 'no-penalty) (when erc-verbose-server-ping (erc-display-message parsed 'error proc -- 2.36.1