X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fconn-func.c;h=e81a79e961a1c165b4bf4851a8f594f6d4af74ee;hp=8b0b6f7161db82c4fd73f0d71faf8ff25c9879c9;hb=32f63abb59b5c9f47b4d517e0bbf9cc73fd044dc;hpb=2a7dd06ebd9cc72d45a6a4becdbef5213d7b7800 diff --git a/src/ngircd/conn-func.c b/src/ngircd/conn-func.c index 8b0b6f71..e81a79e9 100644 --- a/src/ngircd/conn-func.c +++ b/src/ngircd/conn-func.c @@ -30,13 +30,30 @@ #include "conn-func.h" +/** + * Update "idle timestamp", the time of the last visible user action + * (e. g. like sending messages, joining or leaving channels). + * + * @param Idx Connection index. + */ GLOBAL void -Conn_UpdateIdle( CONN_ID Idx ) +Conn_UpdateIdle(CONN_ID Idx) { - assert( Idx > NONE ); - My_Connections[Idx].lastprivmsg = time( NULL ); + assert(Idx > NONE); + My_Connections[Idx].lastprivmsg = time(NULL); } +/** + * Update "ping timestamp", the time of the last outgoing PING request. + * + * @param Idx Connection index. + */ +GLOBAL void +Conn_UpdatePing(CONN_ID Idx) +{ + assert(Idx > NONE); + My_Connections[Idx].lastping = time(NULL); +} /* * Get signon time of a connection. @@ -65,35 +82,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 */