- /* Display message if they have sent a NICK and a USER but no
- * nospoof PONG.
- */
- if (*(cli_name(cptr)) && cli_user(cptr) && *(cli_user(cptr))->username) {
- send_reply(cptr, SND_EXPLICIT | ERR_BADPING,
- ":Your client may not be compatible with this server.");
- send_reply(cptr, SND_EXPLICIT | ERR_BADPING,
- ":Compatible clients are available at "
- URL_CLIENTS);
- }
- exit_client_msg(cptr,cptr,&me, "Ping Timeout");
+ assert(!IsServer(cptr));
+ /* If client authorization time has expired, ask auth whether they
+ * should be checked again later. */
+ if ((CurrentTime-cli_firsttime(cptr) >= max_ping)
+ && auth_ping_timeout(cptr))
+ continue;
+ /* OK, they still have enough time left, so we'll just skip to the
+ * next client. Set the next check to be when their time is up, if
+ * that's before the currently scheduled next check -- hikari */
+ expire = cli_firsttime(cptr) + max_ping;
+ if (expire < next_check)
+ next_check = expire;
+ continue;
+ }
+
+ /* Quit the client after max_ping*2 - they should have answered by now */
+ if (CurrentTime-cli_lasttime(cptr) >= (max_ping*2) )
+ {
+ /* If it was a server, then tell ops about it. */
+ if (IsServer(cptr) || IsConnecting(cptr) || IsHandshake(cptr))
+ sendto_opmask_butone(0, SNO_OLDSNO,
+ "No response from %s, closing link",
+ cli_name(cptr));
+ exit_client_msg(cptr, cptr, &me, "Ping timeout");