summaryrefslogtreecommitdiff
path: root/src/cull_list.cpp
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-09-02 00:50:12 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-09-02 00:50:12 +0000
commitdb7cc57f444a82df65f47b4f7058560e645e35cf (patch)
treea56309d5d5ae0dec214f2d45a2852f2bd1cf2b02 /src/cull_list.cpp
parent3999c2eccf43c998e70d49023d8f35e3fa1632c8 (diff)
Move user quit logic out of cull list
This changes the cull list from a list of User* that ran special cleanup to a list of classbase* that simply deletes the objects. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11636 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/cull_list.cpp')
-rw-r--r--src/cull_list.cpp93
1 files changed, 2 insertions, 91 deletions
diff --git a/src/cull_list.cpp b/src/cull_list.cpp
index 07649ed81..79c077ead 100644
--- a/src/cull_list.cpp
+++ b/src/cull_list.cpp
@@ -16,99 +16,10 @@
#include "inspircd.h"
#include "cull_list.h"
-CullList::CullList(InspIRCd* Instance) : ServerInstance(Instance)
-{
-}
-
-void CullList::AddItem(User* user)
-{
- list.push_back(user);
-}
-
-void CullList::MakeSilent(User* user)
-{
- user->quietquit = true;
- return;
-}
-
void CullList::Apply()
{
- for(std::vector<User *>::iterator a = list.begin(); a != list.end(); a++)
- {
- User *u = *a;
- // user has been moved onto their UID; that's why this isn't find(u->nick)
- user_hash::iterator iter = ServerInstance->Users->clientlist->find(u->uuid);
-
- if (u->registered != REG_ALL)
- if (ServerInstance->Users->unregistered_count)
- ServerInstance->Users->unregistered_count--;
-
- if (IS_LOCAL(u))
- {
- if (!u->sendq.empty())
- u->FlushWriteBuf();
-
- if (u->GetIOHook())
- {
- try
- {
- u->GetIOHook()->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)
- {
- if (IS_LOCAL(u))
- {
- if (!u->quietquit)
- {
- ServerInstance->SNO->WriteToSnoMask('q',"Client exiting: %s!%s@%s [%s]", u->nick.c_str(), u->ident.c_str(), u->host.c_str(), u->operquitmsg.c_str());
- }
- }
- else
- {
- if ((!ServerInstance->SilentULine(u->server)) && (!u->quietquit))
- {
- ServerInstance->SNO->WriteToSnoMask('Q',"Client exiting on server %s: %s!%s@%s [%s]", u->server, u->nick.c_str(), u->ident.c_str(), u->host.c_str(), u->operquitmsg.c_str());
- }
- }
- u->AddToWhoWas();
- }
-
- if (iter != ServerInstance->Users->clientlist->end())
- {
- ServerInstance->Users->clientlist->erase(iter);
- }
- else
- {
- ServerInstance->Logs->Log("CULLLIST", DEBUG, "iter == clientlist->end, can't remove them from hash... problematic..");
- }
-
- if (IS_LOCAL(u))
- {
- std::vector<User*>::iterator x = find(ServerInstance->Users->local_users.begin(),ServerInstance->Users->local_users.end(),u);
- if (x != ServerInstance->Users->local_users.end())
- ServerInstance->Users->local_users.erase(x);
- else
- {
- ServerInstance->Logs->Log("CULLLIST", DEBUG, "Failed to remove user from vector..");
- }
- }
-
- delete u;
- }
+ for(std::vector<classbase*>::iterator i = list.begin(); i != list.end(); i++)
+ delete *i;
list.clear();
}