commit - 12e288c0625bde5aa5a56b6d813abbe2b22d2af5
commit + e728bd2e1a5bcf69596b8c2a305cd6decbeaf42a
blob - 2018a10f91aab64dacbe71fbdf93f662b0a5cd36
blob + a9c5e8c8640ac03ae4f07cc215e983dd67d042fe
--- ChangeLog
+++ ChangeLog
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.
- Removed unnecessary #define of "LOCAL", now use plain C "static" instead.
- Channel topics are no longer limited to 127 characters: now the only limit
--
-$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 $
blob - 714ebe6f34e611c45e36596c8e7b0278d6380cad
blob + c1bc4c23540ff13e160c5ad7c07b1f732d2719ed
--- src/ngircd/conn.c
+++ src/ngircd/conn.c
#include "portab.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 <assert.h>
int len;
char readbuf[1024];
+ CLIENT *c;
assert( Idx > NONE );
assert( My_Connections[Idx].sock > NONE );
}
}
- /* Connection-Statistik aktualisieren */
+ /* Update connection statistics */
My_Connections[Idx].bytes_in += len;
- /* Timestamp aktualisieren */
- My_Connections[Idx].lastdata = time( NULL );
+ /* Update timestamp of last data received if this connection is
+ * 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 */
}
else
{
- /* connection is not fully established yet */
- if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout )
- {
- /* Timeout */
-#ifdef DEBUG
- Log( LOG_DEBUG, "Connection %d timed out ...", i );
+ /* The connection is not fully established yet, so
+ * we don't do the PING-PONG game here but instead
+ * disconnect the client after "a short time" if it's
+ * still not registered. */
+
+ if (My_Connections[i].lastdata <
+ time(NULL) - Conf_PongTimeout) {
+#ifdef DEBUG
+ Log(LOG_DEBUG,
+ "Unregistered connection %d timed out ...",
+ i);
#endif
- Conn_Close( i, NULL, "Timeout", false );
+ Conn_Close(i, NULL, "Timeout", false);
}
}
}