grim/pidgin

Use the leaky bucket algorithm to rate limit irc messages.
draft 2.x.y-irc-rate-limiting
2021-02-24, Gary Kramlich
5bbd0f3a7d4f
Use the leaky bucket algorithm to rate limit irc messages.

The default values were suggested by an operator of freenode.

We don't rate limit the login process, nor parts and quits. However, if you
paste a bunch of text and then part a channel, you will be spammed with a
bunch of "no such nick/channel" error dialogs. I tried to work around this,
but the alternative just makes irc unresponsive until all the pasted messages
are sent. That said, other messages are still delayed while these errors
dialogs are slowly popping up.
/** @page gtkimhtml-signals GtkIMHtml Signals
@signals
@signal url_clicked
@signal format_buttons_update
@signal format_function_clear
@signal format_function_toggle
@signal format_function_update
@signal paste
@endsignals
@see gtkimhtml.h
<hr>
@signaldef url_clicked
@signalproto
void (*url_clicked)(GtkIMHtml *imhtml, char *uri);
@endsignalproto
@signaldesc Emitted when a link is clicked
@param imhtml The GtkIMHtml emitting the signal.
@param url The uri.
@endsignaldef
@signaldef format_buttons_update
@signalproto
void (*format_buttons_update)(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, gpointer data);
@endsignalproto
@signaldesc Emitted when allowed formatting has changed.
@param imhtml The GtkIMHtml emitting the signal.
@param buttons GtkIMHtmlButtons for the GtkIMHtml.
@param data User defined data.
@endsignaldef
@signaldef format_function_clear
@signalproto
void (*format_function_clear)(GtkIMHtml *imhtml, gpointer data);
@endsignalproto
@signaldesc Emitted when clearing the formatting for the GtkIMHtml.
@param imhtml The GtkIMHtml emitting the signal.
@param data User defined data.
@endsignaldef
@signaldef format_function_toggle
@signalproto
void (*format_function_toggle)(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, gpointer data);
@endsignalproto
@signaldesc Emitted when a format has been toggled.
@param imhtml The GtkIMHtml emitting the signal.
@param buttons GtkIMHtmlButtons for the GtkIMHtml.
@param data User defined data.
@endsignaldef
@signaldef format_function_update
@signalproto
void (*format_function_update)(GtkIMHtml *imhtml, gpointer data);
@endsignalproto
@signaldesc Emitted when the cursor has moved and formatting has changed
@param imhtml The GtkIMHtml emitting the signal.
@param data User defined data.
@signaldef paste
@signalproto
void (*paste) (GtkIMHtml *imhtml, char *format)
@endsignalproto
@signaldesc Emitted when paste from the clipboard is requested.
@param imhtml The GtkIMHtml emitting the signal.
@param format If 'text', then the formatting of the clipboard content
will be removed before pasting. If empty or 'html', then
the formatting will not be removed. Any other value for
this parameter is ignored and nothing is pasted.
@endsignaldef
*/
// vim: syntax=c.doxygen tw=75 et