summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2012-01-24 02:46:12 +0100
committerAlexander Barton <alex@barton.de>2012-01-24 02:46:12 +0100
commitbc20f9ec1076a67a81ed8e7c3489ffbdf3387e53 (patch)
tree58259c2cdf178293d43434eb4eeef1b91ffdf1ef
parent5a200e154347bde2a885ad1ede620d8d946b6420 (diff)
downloadngircd-bc20f9ec1076a67a81ed8e7c3489ffbdf3387e53.tar.gz
ngircd-bc20f9ec1076a67a81ed8e7c3489ffbdf3387e53.zip
Send a PING at the end of the server sync to detect it
At the end of sending all "state" to the remote server, a PING command
is sent to request a PONG reply. Until then, no "regual" PING was sent,
so Conn_LastPing(<connection>) is null and now becomes non-null in the
PONG command handler.

So the servers are still synchronizing when Conn_LastPing(<connection>)
is 0, which could easily be tested.
-rw-r--r--src/ngircd/irc-login.c19
-rw-r--r--src/ngircd/numeric.c4
2 files changed, 14 insertions, 9 deletions
diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c
index 54818fe4..133a0e5f 100644
--- a/src/ngircd/irc-login.c
+++ b/src/ngircd/irc-login.c
@@ -889,15 +889,16 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
 	}
 #endif
 
-#ifdef DEBUG
-	if (conn > NONE)
-		Log(LOG_DEBUG,
-			"Connection %d: received PONG. Lag: %ld seconds.", conn,
-			time(NULL) - Conn_LastPing(Client_Conn(Client)));
-	else
-		 Log(LOG_DEBUG,
-			"Connection %d: received PONG.", conn);
-#endif
+	if (Client_Type(Client) == CLIENT_SERVER && Conn_LastPing(conn) == 0) {
+		Log(LOG_INFO,
+		    "Synchronization with \"%s\" done (connection %d): %ld seconds [%ld users, %ld channels]",
+		    Client_ID(Client), conn, time(NULL) - Conn_GetSignon(conn),
+		    Client_UserCount(), Channel_CountVisible(NULL));
+		Conn_UpdatePing(conn);
+	} else
+		LogDebug("Connection %d: received PONG. Lag: %ld seconds.",
+			 conn, time(NULL) - Conn_LastPing(conn));
+
 	return CONNECTED;
 } /* IRC_PONG */
 
diff --git a/src/ngircd/numeric.c b/src/ngircd/numeric.c
index 0440768c..d59a1dc3 100644
--- a/src/ngircd/numeric.c
+++ b/src/ngircd/numeric.c
@@ -384,6 +384,10 @@ IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req)
 	}
 #endif
 
+	if (!IRC_WriteStrClient(Client, "PING :%s",
+	    Client_ID(Client_ThisServer())))
+		return DISCONNECTED;
+
 	return CONNECTED;
 } /* IRC_Num_ENDOFMOTD */