- /*
- * registration timeout -- didnt send USER/NICK/HOST
- * in the time specified in their connection class.
- */
- if (((unsigned)TIME > (unsigned)curr->timeout) && (curr->registered != REG_ALL))
- {
- this->Log(DEBUG,"InspIRCd: registration timeout: %s",curr->nick);
- GlobalGoners.AddItem(curr,"Registration timeout");
- continue;
- }
- else
- {
- if ((curr->registered != REG_ALL) && (next_call > (time_t)curr->timeout))
- next_call = curr->timeout;
- }
-
- /*
- * user has signed on with USER/NICK/PASS, and dns has completed, all the modules
- * say this user is ok to proceed, fully connect them.
- */
- bool ready = AllModulesReportReady(curr);
- if ((TIME > curr->signon) && (curr->registered == REG_NICKUSER) && (ready))
- {
- curr->dns_done = true;
- this->stats->statsDnsBad++;
- curr->FullConnect(&GlobalGoners);
- continue;
- }
- else
- {
- if ((curr->registered == REG_NICKUSER) && (ready) && (next_call > curr->signon))
- next_call = curr->signon;
- }
-
- if ((curr->dns_done) && (curr->registered == REG_NICKUSER) && (ready))
- {
- this->Log(DEBUG,"dns done, registered=3, and modules ready, OK");
- curr->FullConnect(&GlobalGoners);
- continue;
- }
- else
- {
- if ((curr->registered == REG_NICKUSER) && (ready) && (next_call > curr->signon + this->Config->dns_timeout))
- next_call = curr->signon + this->Config->dns_timeout;
- }
-
- // It's time to PING this user. Send them a ping.
- if ((TIME > curr->nping) && (curr->registered == REG_ALL))
- {
- // This user didn't answer the last ping, remove them
- if (!curr->lastping)
- {
- /* Everybody loves boobies. */
- time_t time = this->Time(false) - (curr->nping - curr->pingmax);
- std::string boobies = "Ping timeout: " + ConvToStr(time) + " second" + (time > 1 ? "s" : "");
- GlobalGoners.AddItem(curr, boobies);
- curr->lastping = 1;
- curr->nping = TIME+curr->pingmax;
- continue;
- }
- curr->Write("PING :%s",this->Config->ServerName);
- curr->lastping = 0;
- curr->nping = TIME+curr->pingmax;
- }
- else
- {
- if ((curr->registered == REG_ALL) && (next_call > curr->nping))
- next_call = curr->nping;
- }
-
- /*
- * We can flush the write buffer as the last thing we do, because if they
- * match any of the above conditions its no use flushing their buffer anyway.
- */
-
- curr->FlushWriteBuf();
- if (*curr->GetWriteError())
- {
- GlobalGoners.AddItem(curr,curr->GetWriteError());
- continue;
- }