Changed handling of timeouts for unregistered connections: don't reset

the counter if data is received and disconnect clients earlier.
This commit is contained in:
Alexander Barton 2005-08-27 23:33:10 +00:00
parent 12e288c062
commit e728bd2e1a
2 changed files with 28 additions and 12 deletions

View File

@ -12,6 +12,8 @@
ngIRCd CVSHEAD ngIRCd CVSHEAD
- Changed handling of timeouts for unregistered connections: don't reset
the counter if data is received and disconnect clients earlier.
- Fixed a format string bug in "connection statistics" messages to clients. - Fixed a format string bug in "connection statistics" messages to clients.
- Removed unnecessary #define of "LOCAL", now use plain C "static" instead. - Removed unnecessary #define of "LOCAL", now use plain C "static" instead.
- Channel topics are no longer limited to 127 characters: now the only limit - Channel topics are no longer limited to 127 characters: now the only limit
@ -632,4 +634,4 @@ ngIRCd 0.0.1, 31.12.2001
-- --
$Id: ChangeLog,v 1.288 2005/08/27 22:59:06 alex Exp $ $Id: ChangeLog,v 1.289 2005/08/27 23:33:10 alex Exp $

View File

@ -17,7 +17,7 @@
#include "portab.h" #include "portab.h"
#include "io.h" #include "io.h"
static char UNUSED id[] = "$Id: conn.c,v 1.170 2005/08/15 23:02:40 alex Exp $"; static char UNUSED id[] = "$Id: conn.c,v 1.171 2005/08/27 23:33:11 alex Exp $";
#include "imp.h" #include "imp.h"
#include <assert.h> #include <assert.h>
@ -1078,6 +1078,7 @@ Read_Request( CONN_ID Idx )
int len; int len;
char readbuf[1024]; char readbuf[1024];
CLIENT *c;
assert( Idx > NONE ); assert( Idx > NONE );
assert( My_Connections[Idx].sock > NONE ); assert( My_Connections[Idx].sock > NONE );
@ -1129,13 +1130,21 @@ Read_Request( CONN_ID Idx )
} }
} }
/* Connection-Statistik aktualisieren */ /* Update connection statistics */
My_Connections[Idx].bytes_in += len; My_Connections[Idx].bytes_in += len;
/* Timestamp aktualisieren */ /* Update timestamp of last data received if this connection is
My_Connections[Idx].lastdata = time( NULL ); * registered as a user, server or service connection. Don't update
* otherwise, so users have at least Conf_PongTimeout seconds time to
* register with the IRC server -- see Check_Connections(). */
c = Client_GetFromConn(Idx);
if (c && (Client_Type(c) == CLIENT_USER
|| Client_Type(c) == CLIENT_SERVER
|| Client_Type(c) == CLIENT_SERVICE))
My_Connections[Idx].lastdata = time(NULL);
Handle_Buffer( Idx ); /* Look at the data in the (read-) buffer of this connection */
Handle_Buffer(Idx);
} /* Read_Request */ } /* Read_Request */
@ -1286,14 +1295,19 @@ Check_Connections( void )
} }
else else
{ {
/* connection is not fully established yet */ /* The connection is not fully established yet, so
if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout ) * we don't do the PING-PONG game here but instead
{ * disconnect the client after "a short time" if it's
/* Timeout */ * still not registered. */
if (My_Connections[i].lastdata <
time(NULL) - Conf_PongTimeout) {
#ifdef DEBUG #ifdef DEBUG
Log( LOG_DEBUG, "Connection %d timed out ...", i ); Log(LOG_DEBUG,
"Unregistered connection %d timed out ...",
i);
#endif #endif
Conn_Close( i, NULL, "Timeout", false ); Conn_Close(i, NULL, "Timeout", false);
} }
} }
} }