+/**
+ * Throttle a connection because of excessive usage.
+ *
+ * @param Reason The reason, see THROTTLE_xxx constants.
+ * @param Idx The connection index.
+ * @param Client The client of this connection.
+ * @param Seconds The time to delay this connection.
+ */
+static void
+Throttle_Connection(const CONN_ID Idx, CLIENT *Client, const int Reason,
+ unsigned int Value)
+{
+ assert(Idx > NONE);
+ assert(Client != NULL);
+
+ /* Never throttle servers or services, only interrupt processing */
+ if (Client_Type(Client) == CLIENT_SERVER
+ || Client_Type(Client) == CLIENT_UNKNOWNSERVER
+ || Client_Type(Client) == CLIENT_SERVICE)
+ return;
+
+ /* Don't throttle clients with user mode 'F' set */
+ if (Client_HasMode(Client, 'F'))
+ return;
+
+ LogDebug("Throttling connection %d: code %d, value %d!", Idx,
+ Reason, Value);
+ Conn_SetPenalty(Idx, 1);
+}