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 connection-signals Connection Signals
@signals
@signal signing-on
@signal signed-on
@signal autojoin
@signal signing-off
@signal signed-off
@signal connection-error
@endsignals
@see connection.h
<hr>
@signaldef signing-on
@signalproto
void (*signing_on)(PurpleConnection *gc);
@endsignalproto
@signaldesc
Emitted when a connection is about to sign on.
@param gc The connection that is about to sign on.
@endsignaldef
@signaldef signed-on
@signalproto
void (*signed_on)(PurpleConnection *gc);
@endsignalproto
@signaldesc
Emitted when a connection has signed on.
@param gc The connection that has signed on.
@endsignaldef
@signaldef autojoin
@signalproto
gboolean (*autojoin)(PurpleConnection *gc);
@endsignalproto
@signaldesc
Emitted when a connection has signed on, after the signed-on signal, to
signal UIs to autojoin chats if they wish. UIs should connect to this
with @c PURPLE_SIGNAL_PRIORITY_HIGHEST to allow plugins to block this
signal before the UI sees it and then re-emit it later.
@param gc The connection that has signed on.
@return @c TRUE if the signal was handled or @c FALSE otherwise. In
practice, the return value is irrelevant, as it really only
exists so plugins can block the UI's autojoin.
@since 2.7.0
@endsignaldef
@signaldef signing-off
@signalproto
void (*signing_off)(PurpleConnection *gc);
@endsignalproto
@signaldesc
Emitted when a connection is about to sign off.
@param gc The connection that is about to sign off.
@endsignaldef
@signaldef signed-off
@signalproto
void (*signed_off)(PurpleConnection *gc);
@endsignalproto
@signaldesc
Emitted when a connection has signed off.
@param gc The connection that has signed off.
@endsignaldef
@signaldef connection-error
@signalproto
void (*connection_error)(PurpleConnection *gc, PurpleConnectionError err, const gchar *desc)
@endsignalproto
@signaldesc
Emitted when a connection error occurs, before @ref signed-off.
@param gc The connection on which the error has occurred
@param err The error that occurred
@param desc A description of the error, giving more information.
@endsignaldef
*/
// vim: syntax=c.doxygen tw=75 et