X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fusermanager.cpp;h=aaf512019399c9838f95cb7ec67690dafd5f7f04;hb=050e232499a04bb516c2dfee50b1f8c41ef1f5a6;hp=af76f56515d75b53effc1e5799cb5f9f1673323d;hpb=43d1577839df81d3746092f11ebd1280ca2f85c1;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/usermanager.cpp b/src/usermanager.cpp index af76f5651..aaf512019 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -18,7 +18,7 @@ #include "bancache.h" /* add a client connection to the sockets list */ -void UserManager::AddClient(InspIRCd* Instance, int socket, int port, bool iscached, int socketfamily, sockaddr* ip, const std::string &targetip) +void UserManager::AddUser(InspIRCd* Instance, int socket, int port, bool iscached, int socketfamily, sockaddr* ip, const std::string &targetip) { /* NOTE: Calling this one parameter constructor for User automatically * allocates a new UUID and places it in the hash_map. @@ -96,7 +96,7 @@ void UserManager::AddClient(InspIRCd* Instance, int socket, int port, bool iscac if (!i) { - User::QuitUser(Instance, New, "Access denied by configuration"); + this->QuitUser(New, "Access denied by configuration"); return; } @@ -108,10 +108,10 @@ void UserManager::AddClient(InspIRCd* Instance, int socket, int port, bool iscac this->local_users.push_back(New); - if ((this->local_users.size() > Instance->Config->SoftLimit) || (this->local_users.size() >= MAXCLIENTS)) + if ((this->local_users.size() > Instance->Config->SoftLimit) || (this->local_users.size() >= (unsigned int)Instance->SE->GetMaxFds())) { Instance->SNO->WriteToSnoMask('A', "Warning: softlimit value has been reached: %d clients", Instance->Config->SoftLimit); - User::QuitUser(Instance, New,"No more connections allowed"); + this->QuitUser(New,"No more connections allowed"); return; } @@ -125,13 +125,12 @@ void UserManager::AddClient(InspIRCd* Instance, int socket, int port, bool iscac * which for the time being is a physical impossibility (even the largest networks dont have more * than about 10,000 users on ONE server!) */ -#ifndef WINDOWS - if ((unsigned int)socket >= MAX_DESCRIPTORS) + if (socket >= Instance->SE->GetMaxFds()) { - User::QuitUser(Instance, New, "Server is full"); + this->QuitUser(New, "Server is full"); return; } -#endif + /* * even with bancache, we still have to keep User::exempt current. * besides that, if we get a positive bancache hit, we still won't fuck @@ -147,7 +146,7 @@ void UserManager::AddClient(InspIRCd* Instance, int socket, int port, bool iscac Instance->Logs->Log("BANCACHE", DEBUG, std::string("BanCache: Positive hit for ") + New->GetIPString()); if (*Instance->Config->MoronBanner) New->WriteServ("NOTICE %s :*** %s", New->nick, Instance->Config->MoronBanner); - User::QuitUser(Instance, New, b->Reason); + this->QuitUser(New, b->Reason); return; } else @@ -172,7 +171,7 @@ void UserManager::AddClient(InspIRCd* Instance, int socket, int port, bool iscac if (!Instance->SE->AddFd(New)) { Instance->Logs->Log("USERS", DEBUG,"Internal error on new connection"); - User::QuitUser(Instance, New, "Internal error handling connection"); + this->QuitUser(New, "Internal error handling connection"); } /* NOTE: even if dns lookups are *off*, we still need to display this. @@ -190,6 +189,22 @@ void UserManager::AddClient(InspIRCd* Instance, int socket, int port, bool iscac } } +void UserManager::QuitUser(User *user, const std::string &quitreason, const char* operreason) +{ + ServerInstance->Logs->Log("USERS", DEBUG,"QuitUser: %s '%s'", user->nick, quitreason.c_str()); + user->Write("ERROR :Closing link (%s@%s) [%s]", user->ident, user->host, *operreason ? operreason : quitreason.c_str()); + user->quietquit = false; + user->quitmsg = quitreason; + + if (!*operreason) + user->operquitmsg = quitreason; + else + user->operquitmsg = operreason; + + ServerInstance->GlobalCulls.AddItem(user); +} + + void UserManager::AddLocalClone(User *user) { clonemap::iterator x = local_clones.find(user->GetIPString());