diff options
| author | Alexander Barton <alex@barton.de> | 2012-01-24 02:46:12 +0100 |
|---|---|---|
| committer | Alexander Barton <alex@barton.de> | 2012-01-24 02:46:12 +0100 |
| commit | bc20f9ec1076a67a81ed8e7c3489ffbdf3387e53 (patch) | |
| tree | 58259c2cdf178293d43434eb4eeef1b91ffdf1ef | |
| parent | 5a200e154347bde2a885ad1ede620d8d946b6420 (diff) | |
| download | ngircd-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.c | 19 | ||||
| -rw-r--r-- | src/ngircd/numeric.c | 4 |
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 */ |