commit - d0045afb09948ba3dc50951e770b059a2edb5665
commit + 2af87e91520a333f79519f597b0d454c6c981aab
blob - 2bd537c4c5e58b3a70ab7523a282921280832055
blob + 13c8085524bf36aba2061202663fc1f32a6654ca
--- src/ngircd/conn.c
+++ src/ngircd/conn.c
#include "portab.h"
#include "io.h"
-static char UNUSED id[] = "$Id: conn.c,v 1.193 2006/04/29 16:19:46 fw Exp $";
+static char UNUSED id[] = "$Id: conn.c,v 1.194 2006/05/09 14:49:08 alex Exp $";
#include "imp.h"
#include <assert.h>
/* 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(). */
+ * register with the IRC server -- see Check_Connections().
+ * Set "lastping", too, so we can handle time shifts backwards ... */
c = Conn_GetClient(Idx);
if (c && (Client_Type(c) == CLIENT_USER
|| Client_Type(c) == CLIENT_SERVER
- || Client_Type(c) == CLIENT_SERVICE))
+ || Client_Type(c) == CLIENT_SERVICE)) {
My_Connections[Idx].lastdata = time(NULL);
+ My_Connections[Idx].lastping = My_Connections[Idx].lastdata;
+ }
/* Look at the data in the (read-) buffer of this connection */
Handle_Buffer(Idx);
static void
-Check_Connections( void )
+Check_Connections(void)
{
/* check if connections are alive. if not, play PING-PONG first.
* if this doesn't help either, disconnect client. */
CLIENT *c;
CONN_ID i;
- for( i = 0; i < Pool_Size; i++ ) {
+ for (i = 0; i < Pool_Size; i++) {
if (My_Connections[i].sock < 0)
continue;
- c = Conn_GetClient( i );
- if( c && (( Client_Type( c ) == CLIENT_USER ) || ( Client_Type( c ) == CLIENT_SERVER ) || ( Client_Type( c ) == CLIENT_SERVICE )))
- {
+ c = Conn_GetClient(i);
+ if (c && ((Client_Type(c) == CLIENT_USER)
+ || (Client_Type(c) == CLIENT_SERVER)
+ || (Client_Type(c) == CLIENT_SERVICE))) {
/* connected User, Server or Service */
- if( My_Connections[i].lastping > My_Connections[i].lastdata ) {
- /* we already sent a ping */
- if( My_Connections[i].lastping < time( NULL ) - Conf_PongTimeout ) {
+ if (My_Connections[i].lastping >
+ My_Connections[i].lastdata) {
+ /* We already sent a ping */
+ if (My_Connections[i].lastping <
+ time(NULL) - Conf_PongTimeout) {
/* Timeout */
- LogDebug("Connection %d: Ping timeout: %d seconds.",
- i, Conf_PongTimeout );
- Conn_Close( i, NULL, "Ping timeout", true );
+ LogDebug
+ ("Connection %d: Ping timeout: %d seconds.",
+ i, Conf_PongTimeout);
+ Conn_Close(i, NULL, "Ping timeout",
+ true);
}
- }
- else if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout ) {
- /* we need to sent a PING */
- LogDebug("Connection %d: sending PING ...", i );
- My_Connections[i].lastping = time( NULL );
- Conn_WriteStr( i, "PING :%s", Client_ID( Client_ThisServer( )));
+ } else if (My_Connections[i].lastdata <
+ time(NULL) - Conf_PingTimeout) {
+ /* We need to send a PING ... */
+ LogDebug("Connection %d: sending PING ...", i);
+ My_Connections[i].lastping = time(NULL);
+ Conn_WriteStr(i, "PING :%s",
+ Client_ID(Client_ThisServer()));
}
- }
- else
- {
+ } else {
/* 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
if (My_Connections[i].lastdata <
time(NULL) - Conf_PongTimeout) {
- LogDebug("Unregistered connection %d timed out ...", i);
+ LogDebug
+ ("Unregistered connection %d timed out ...",
+ i);
Conn_Close(i, NULL, "Timeout", false);
}
}