* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2010 InspIRCd Development Team
* See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
ServerInstance->SNO->WriteToSnoMask('a', "WARNING *** Duplicate UUID allocated!");
return;
}
+ UserIOHandler* eh = &New->eh;
/* Give each of the modules an attempt to hook the user for I/O */
- FOREACH_MOD(I_OnHookIO, OnHookIO(New, via));
+ FOREACH_MOD(I_OnHookIO, OnHookIO(eh, via));
- if (New->GetIOHook())
+ if (eh->GetIOHook())
{
try
{
- New->GetIOHook()->OnStreamSocketAccept(New, client, server);
+ eh->GetIOHook()->OnStreamSocketAccept(eh, client, server);
}
catch (CoreException& modexcept)
{
}
}
- if (!ServerInstance->SE->AddFd(New, FD_WANT_FAST_READ | FD_WANT_EDGE_WRITE))
+ if (!ServerInstance->SE->AddFd(eh, FD_WANT_FAST_READ | FD_WANT_EDGE_WRITE))
{
ServerInstance->Logs->Log("USERS", DEBUG,"Internal error on new connection");
this->QuitUser(New, "Internal error handling connection");
{
LocalUser* lu = IS_LOCAL(user);
FOREACH_MOD(I_OnUserDisconnect,OnUserDisconnect(lu));
- lu->DoWrite();
- if (lu->GetIOHook())
+ UserIOHandler* eh = &lu->eh;
+ eh->DoWrite();
+ if (eh->GetIOHook())
{
try
{
- lu->GetIOHook()->OnStreamSocketClose(lu);
+ eh->GetIOHook()->OnStreamSocketClose(eh);
}
catch (CoreException& modexcept)
{
}
}
- ServerInstance->SE->DelFd(lu);
- lu->Close();
+ ServerInstance->SE->DelFd(eh);
+ eh->Close();
}
/*
/* return how many users have a given mode e.g. 'a' */
int UserManager::ModeCount(const char mode)
{
- ModeHandler* mh = ServerInstance->Modes->FindMode(mode, MODETYPE_USER);
-
- if (mh)
- return mh->GetCount();
- else
- return 0;
+ int c = 0;
+ for(user_hash::iterator i = clientlist->begin(); i != clientlist->end(); ++i)
+ {
+ User* u = i->second;
+ if (u->modes[mode-65])
+ c++;
+ }
+ return c;
}