commit b24d645ca183194b0158cd7bba1e0c1f468a7de9 from: Alexander Barton date: Wed Jan 04 20:39:46 2012 UTC Conn_SetPenalty(): Add new "penalty time" on each function call Until now, the penalty time has only been set when longer as the already set one, so it didn't accumulate. And add documentation for and clean up code in Conn_SetPenalty() and Conn_ResetPenalty() functions. commit - 1bb2fbedcc975aa6e424fd201f59a178a03d45b0 commit + b24d645ca183194b0158cd7bba1e0c1f468a7de9 blob - 8b0b6f7161db82c4fd73f0d71faf8ff25c9879c9 blob + 32001f08d93c97bb3ee454c7564ae1ef0b43b184 --- src/ngircd/conn-func.c +++ src/ngircd/conn-func.c @@ -65,35 +65,56 @@ Conn_LastPing( CONN_ID Idx ) } /* Conn_LastPing */ +/** + * Add "penalty time" for a connection. + * + * During the "penalty time" the socket is ignored completely, no new data + * is read. This function only increases the penalty, it is not possible to + * decrease the penalty time. + * + * @param Idex Connection index. + * @param Seconds Seconds to add. + * @see Conn_ResetPenalty + */ GLOBAL void -Conn_SetPenalty( CONN_ID Idx, time_t Seconds ) +Conn_SetPenalty(CONN_ID Idx, time_t Seconds) { - /* set Penalty-Delay for a socket. - * during the penalty, the socket is ignored completely, no new - * data is read. This function only increases the penalty, it is - * not possible to decrease the penalty time. - */ time_t t; - - assert( Idx > NONE ); - assert( Seconds >= 0 ); - t = time( NULL ) + Seconds; - if (t > My_Connections[Idx].delaytime) + assert(Idx > NONE); + assert(Seconds >= 0); + + t = time(NULL); + if (My_Connections[Idx].delaytime < t) My_Connections[Idx].delaytime = t; + My_Connections[Idx].delaytime += Seconds; + #ifdef DEBUG - Log(LOG_DEBUG, "Add penalty time on connection %d: %ld second(s).", - Idx, (long)Seconds); + Log(LOG_DEBUG, + "Add penalty time on connection %d: %ld second%s, total %ld second%s.", + Idx, (long)Seconds, Seconds != 1 ? "s" : "", + My_Connections[Idx].delaytime - t, + My_Connections[Idx].delaytime - t != 1 ? "s" : ""); #endif } /* Conn_SetPenalty */ +/** + * Reset the "penalty time" for one connection. + * + * @param Idx Connection index. + * @see Conn_SetPenalty + */ GLOBAL void -Conn_ResetPenalty( CONN_ID Idx ) +Conn_ResetPenalty(CONN_ID Idx) { - assert( Idx > NONE ); + assert(Idx > NONE); + My_Connections[Idx].delaytime = 0; +#ifdef DEBUG + Log(LOG_DEBUG, "Penalty time on connection %d has been reset."); +#endif } /* Conn_ResetPenalty */