CLIENT *Prefix, void *Buffer));
static void Send_Marked_Connections PARAMS((CLIENT *Prefix, const char *Buffer));
+/**
+ * Send an error message to a client and enforce a penalty time.
+ *
+ * @param Client The target client.
+ * @param Format Format string.
+ * @return CONNECTED or DISCONNECTED.
+ */
+#ifdef PROTOTYPES
+GLOBAL bool
+IRC_WriteErrClient( CLIENT *Client, const char *Format, ... )
+#else
+GLOBAL bool
+IRC_WriteErrClient( Client, Format, va_alist )
+CLIENT *Client;
+const char *Format;
+va_dcl
+#endif
+{
+ char buffer[1000];
+ va_list ap;
+
+ assert(Client != NULL);
+ assert(Format != NULL);
+
+#ifdef PROTOTYPES
+ va_start(ap, Format);
+#else
+ va_start(ap);
+#endif
+ vsnprintf(buffer, 1000, Format, ap);
+ va_end(ap);
+
+ IRC_SetPenalty(Client, 2);
+ return IRC_WriteStrClientPrefix(Client, Client_ThisServer(),
+ "%s", buffer);
+}
+
/**
* Send a message to a client.
*
/**
* Set a "penalty time" for an IRC client.
*
- * Note: penalty times are never set for server links!
+ * Note: penalty times are never set for server links or remote clients!
*
* @param Client The client.
* @param Seconds The additional "penalty time" to enforce.
*/
GLOBAL void
-IRC_SetPenalty( CLIENT *Client, time_t Seconds )
+IRC_SetPenalty(CLIENT *Client, time_t Seconds)
{
CONN_ID c;
- assert( Client != NULL );
- assert( Seconds > 0 );
+ assert(Client != NULL);
+ assert(Seconds > 0);
+
+ if (Client_Type(Client) == CLIENT_SERVER)
+ return;
- if( Client_Type( Client ) == CLIENT_SERVER ) return;
+ c = Client_Conn(Client);
+ if (c <= NONE)
+ return;
- c = Client_Conn( Client );
- if (c > NONE)
- Conn_SetPenalty(c, Seconds);
+ Conn_SetPenalty(c, Seconds);
} /* IRC_SetPenalty */
static const char *