- std::vector<User *>::iterator a = list.begin();
-
- User *u = (*a);
- user_hash::iterator iter = ServerInstance->Users->clientlist->find(u->nick);
- const std::string& preset_reason = u->GetOperQuit();
- std::string reason;
- std::string oper_reason;
-
- reason.assign(u->quitmsg, 0, ServerInstance->Config->Limits.MaxQuit);
- oper_reason.assign(preset_reason.empty() ? preset_reason : u->operquitmsg, 0, ServerInstance->Config->Limits.MaxQuit);
-
- if (u->registered != REG_ALL)
- if (ServerInstance->Users->unregistered_count)
- ServerInstance->Users->unregistered_count--;
-
- if (IS_LOCAL(u))
- {
- if ((!u->sendq.empty()) && (!(*u->GetWriteError())))
- u->FlushWriteBuf();
- }
-
- if (u->registered == REG_ALL)
- {
- FOREACH_MOD_I(ServerInstance,I_OnUserQuit,OnUserQuit(u, reason, oper_reason));
- u->PurgeEmptyChannels();
- u->WriteCommonQuit(reason, oper_reason);
- }
-
- FOREACH_MOD_I(ServerInstance,I_OnUserDisconnect,OnUserDisconnect(u));
-
- if (IS_LOCAL(u))
- {
- if (u->io)
- {
- try
- {
- u->io->OnRawSocketClose(u->GetFd());
- }
- catch (CoreException& modexcept)
- {
- ServerInstance->Logs->Log("CULLLIST",DEBUG, "%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
- }
- }
-
- ServerInstance->SE->DelFd(u);
- u->CloseSocket();
- }
-
- /*
- * this must come before the ServerInstance->SNO->WriteToSnoMaskso that it doesnt try to fill their buffer with anything
- * if they were an oper with +sn +qQ.
- */
- if (u->registered == REG_ALL)