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=fb5c55fa1289b8c8aa3527dbb32b605c6246357c;hp=196325eea1aa82ee6083e04d7a94a5866c22e3ad;hb=6171beb7ab5dc0586581660852576f437470df63;hpb=544b9884f4ccab6488b6f75b5fafd68a85aa8cd7 diff --git a/src/ngircd/conn-func.c b/src/ngircd/conn-func.c index 196325ee..fb5c55fa 100644 --- a/src/ngircd/conn-func.c +++ b/src/ngircd/conn-func.c @@ -1,40 +1,57 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2008 Alexander Barton (alex@barton.de) + * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. - * - * Connection management: Global functions */ - #define CONN_MODULE #include "portab.h" -#include "imp.h" +/** + * @file + * Connection management: Global functions + */ + #include -#include -#include "log.h" +#include +#ifdef DEBUG +# include "log.h" +#endif #include "conn.h" -#include "client.h" -#include "exp.h" #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. @@ -54,7 +71,6 @@ Conn_GetIdle( CONN_ID Idx ) return time( NULL ) - My_Connections[Idx].lastprivmsg; } /* Conn_GetIdle */ - GLOBAL time_t Conn_LastPing( CONN_ID Idx ) { @@ -62,39 +78,40 @@ Conn_LastPing( CONN_ID Idx ) return My_Connections[Idx].lastping; } /* 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 */ - -GLOBAL void -Conn_ResetPenalty( CONN_ID Idx ) -{ - assert( Idx > NONE ); - My_Connections[Idx].delaytime = 0; -} /* Conn_ResetPenalty */ - - GLOBAL void Conn_ClearFlags( void ) { @@ -103,7 +120,6 @@ Conn_ClearFlags( void ) for( i = 0; i < Pool_Size; i++ ) My_Connections[i].flag = 0; } /* Conn_ClearFlags */ - GLOBAL int Conn_Flag( CONN_ID Idx ) { @@ -111,23 +127,16 @@ Conn_Flag( CONN_ID Idx ) return My_Connections[Idx].flag; } /* Conn_Flag */ - GLOBAL void Conn_SetFlag( CONN_ID Idx, int Flag ) { - /* Connection markieren */ - assert( Idx > NONE ); My_Connections[Idx].flag = Flag; } /* Conn_SetFlag */ - GLOBAL CONN_ID Conn_First( void ) { - /* Connection-Struktur der ersten Verbindung liefern; - * Ist keine Verbindung vorhanden, wird NONE geliefert. */ - CONN_ID i; for( i = 0; i < Pool_Size; i++ ) @@ -137,13 +146,9 @@ Conn_First( void ) return NONE; } /* Conn_First */ - GLOBAL CONN_ID Conn_Next( CONN_ID Idx ) { - /* Naechste Verbindungs-Struktur liefern; existiert keine - * weitere, so wird NONE geliefert. */ - CONN_ID i = NONE; assert( Idx > NONE ); @@ -155,7 +160,6 @@ Conn_Next( CONN_ID Idx ) return NONE; } /* Conn_Next */ - GLOBAL UINT16 Conn_Options( CONN_ID Idx ) { @@ -163,7 +167,6 @@ Conn_Options( CONN_ID Idx ) return My_Connections[Idx].options; } /* Conn_Options */ - /** * Set connection option. */ @@ -174,7 +177,6 @@ Conn_SetOption(CONN_ID Idx, int Option) Conn_OPTION_ADD(&My_Connections[Idx], Option); } /* Conn_SetOption */ - /** * Get the start time of the connection. * The result is the start time in seconds since 1970-01-01, as reported @@ -210,7 +212,6 @@ Conn_SendQ( CONN_ID Idx ) return array_bytes(&My_Connections[Idx].wbuf); } /* Conn_SendQ */ - /** * return number of messages sent on this connection so far */ @@ -222,7 +223,6 @@ Conn_SendMsg( CONN_ID Idx ) return My_Connections[Idx].msg_out; } /* Conn_SendMsg */ - /** * return number of (uncompressed) bytes sent * on this connection so far @@ -234,7 +234,6 @@ Conn_SendBytes( CONN_ID Idx ) return My_Connections[Idx].bytes_out; } /* Conn_SendBytes */ - /** * return number of bytes pending in read buffer */ @@ -250,7 +249,6 @@ Conn_RecvQ( CONN_ID Idx ) return array_bytes(&My_Connections[Idx].rbuf); } /* Conn_RecvQ */ - /** * return number of messages received on this connection so far */ @@ -261,7 +259,6 @@ Conn_RecvMsg( CONN_ID Idx ) return My_Connections[Idx].msg_in; } /* Conn_RecvMsg */ - /** * return number of (uncompressed) bytes received on this * connection so far @@ -273,6 +270,15 @@ Conn_RecvBytes( CONN_ID Idx ) return My_Connections[Idx].bytes_in; } /* Conn_RecvBytes */ +/** + * Return the remote IP address of this connection as string. + */ +GLOBAL const char * +Conn_IPA(CONN_ID Idx) +{ + assert (Idx > NONE); + return ng_ipaddr_tostr(&My_Connections[Idx].addr); +} GLOBAL void Conn_ResetWCounter( void ) @@ -280,12 +286,10 @@ Conn_ResetWCounter( void ) WCounter = 0; } /* Conn_ResetWCounter */ - GLOBAL long Conn_WCounter( void ) { return WCounter; } /* Conn_WCounter */ - /* -eof- */