diff options
author | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-21 23:44:48 +0000 |
---|---|---|
committer | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2009-10-21 23:44:48 +0000 |
commit | 9924e5631193ad581d885380fd11ae8bfb91fa0b (patch) | |
tree | a818b0bd77cf16e793a4a54c1aeafc0cbf1d0ddf /src | |
parent | 30583ca1f1687927e8bae2bc6cdd7cfde423bfd6 (diff) |
Split LocalUser and RemoteUser
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11940 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/commands/cmd_wallops.cpp | 2 | ||||
-rw-r--r-- | src/helperfuncs.cpp | 2 | ||||
-rw-r--r-- | src/inspircd.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_cloaking.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_close.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_jumpserver.cpp | 2 | ||||
-rwxr-xr-x | src/modules/m_nationalchars.cpp | 2 | ||||
-rw-r--r-- | src/modules/m_spanningtree/uid.cpp | 2 | ||||
-rw-r--r-- | src/stats.cpp | 6 | ||||
-rw-r--r-- | src/usermanager.cpp | 12 | ||||
-rw-r--r-- | src/userprocess.cpp | 2 | ||||
-rw-r--r-- | src/users.cpp | 32 | ||||
-rw-r--r-- | src/xline.cpp | 8 |
13 files changed, 41 insertions, 35 deletions
diff --git a/src/commands/cmd_wallops.cpp b/src/commands/cmd_wallops.cpp index 52d28e987..d24a5887d 100644 --- a/src/commands/cmd_wallops.cpp +++ b/src/commands/cmd_wallops.cpp @@ -38,7 +38,7 @@ CmdResult CommandWallops::Handle (const std::vector<std::string>& parameters, Us std::string wallop("WALLOPS :"); wallop.append(parameters[0]); - for (std::vector<User*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) { User* t = *i; if (t->IsModeSet('w')) diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index cd173b55f..eced0c56a 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -123,7 +123,7 @@ Channel* InspIRCd::FindChan(const std::string &chan) /* Send an error notice to all users, registered or not */ void InspIRCd::SendError(const std::string &s) { - for (std::vector<User*>::const_iterator i = this->Users->local_users.begin(); i != this->Users->local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = this->Users->local_users.begin(); i != this->Users->local_users.end(); i++) { User* u = *i; if (u->registered == REG_ALL) diff --git a/src/inspircd.cpp b/src/inspircd.cpp index d9f1d0423..ca6a59cac 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -99,7 +99,7 @@ void InspIRCd::Cleanup() ports.clear(); /* Close all client sockets, or the new process inherits them */ - std::vector<User*>::reverse_iterator i = Users->local_users.rbegin(); + std::vector<LocalUser*>::reverse_iterator i = Users->local_users.rbegin(); while (i != this->Users->local_users.rend()) { User* u = *i++; diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp index 3be6e2163..c61868dc3 100644 --- a/src/modules/m_cloaking.cpp +++ b/src/modules/m_cloaking.cpp @@ -305,7 +305,7 @@ class ModuleCloaking : public Module void CloakExistingUsers() { std::string* cloak; - for (std::vector<User*>::iterator u = ServerInstance->Users->local_users.begin(); u != ServerInstance->Users->local_users.end(); u++) + for (std::vector<LocalUser*>::iterator u = ServerInstance->Users->local_users.begin(); u != ServerInstance->Users->local_users.end(); u++) { cloak = cu.ext.get(*u); if (!cloak) diff --git a/src/modules/m_close.cpp b/src/modules/m_close.cpp index 24831a807..5c0c0188b 100644 --- a/src/modules/m_close.cpp +++ b/src/modules/m_close.cpp @@ -37,7 +37,7 @@ class CommandClose : public Command { std::map<std::string,int> closed; - std::vector<User*>::reverse_iterator u = ServerInstance->Users->local_users.rbegin(); + std::vector<LocalUser*>::reverse_iterator u = ServerInstance->Users->local_users.rbegin(); while (u != ServerInstance->Users->local_users.rend()) { User* user = *u++; diff --git a/src/modules/m_jumpserver.cpp b/src/modules/m_jumpserver.cpp index b2bbe0d8c..d46e85bdd 100644 --- a/src/modules/m_jumpserver.cpp +++ b/src/modules/m_jumpserver.cpp @@ -95,7 +95,7 @@ class CommandJumpserver : public Command if (redirect_all_immediately) { /* Redirect everyone but the oper sending the command */ - for (std::vector<User*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) { User* t = *i; if (!IS_OPER(t)) diff --git a/src/modules/m_nationalchars.cpp b/src/modules/m_nationalchars.cpp index 5e919dad6..e8a70d148 100755 --- a/src/modules/m_nationalchars.cpp +++ b/src/modules/m_nationalchars.cpp @@ -258,7 +258,7 @@ class ModuleNationalChars : public Module if (!forcequit) return; - for (std::vector<User*>::iterator iter = ServerInstance->Users->local_users.begin(); iter != ServerInstance->Users->local_users.end(); ++iter) + for (std::vector<LocalUser*>::iterator iter = ServerInstance->Users->local_users.begin(); iter != ServerInstance->Users->local_users.end(); ++iter) { /* Fix by Brain: Dont quit UID users */ User* n = *iter; diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp index 4e3b07eea..340b7f496 100644 --- a/src/modules/m_spanningtree/uid.cpp +++ b/src/modules/m_spanningtree/uid.cpp @@ -86,7 +86,7 @@ bool TreeSocket::ParseUID(const std::string &source, parameterlist ¶ms) User* _new = NULL; try { - _new = new User(params[0]); + _new = new RemoteUser(params[0]); } catch (...) { diff --git a/src/stats.cpp b/src/stats.cpp index eb8fe0e45..f695104b0 100644 --- a/src/stats.cpp +++ b/src/stats.cpp @@ -98,7 +98,7 @@ void InspIRCd::DoStats(char statschar, User* user, string_list &results) case 'P': { int idx = 0; - for (user_hash::iterator i = this->Users->clientlist->begin(); i != this->Users->clientlist->end(); i++) + for (user_hash::iterator i = this->Users->clientlist->begin(); i != this->Users->clientlist->end(); i++) { if (IS_OPER(i->second) && !this->ULine(i->second->server)) { @@ -247,7 +247,7 @@ void InspIRCd::DoStats(char statschar, User* user, string_list &results) /* stats l (show user I/O stats) */ case 'l': results.push_back(sn+" 211 "+user->nick+" :nick[ident@host] sendq cmds_out bytes_out cmds_in bytes_in time_open"); - for (std::vector<User*>::iterator n = this->Users->local_users.begin(); n != this->Users->local_users.end(); n++) + for (std::vector<LocalUser*>::iterator n = this->Users->local_users.begin(); n != this->Users->local_users.end(); n++) { User* i = *n; results.push_back(sn+" 211 "+user->nick+" "+i->nick+"["+i->ident+"@"+i->dhost+"] "+ConvToStr(i->getSendQSize())+" "+ConvToStr(i->cmds_out)+" "+ConvToStr(i->bytes_out)+" "+ConvToStr(i->cmds_in)+" "+ConvToStr(i->bytes_in)+" "+ConvToStr(this->Time() - i->age)); @@ -257,7 +257,7 @@ void InspIRCd::DoStats(char statschar, User* user, string_list &results) /* stats L (show user I/O stats with IP addresses) */ case 'L': results.push_back(sn+" 211 "+user->nick+" :nick[ident@ip] sendq cmds_out bytes_out cmds_in bytes_in time_open"); - for (std::vector<User*>::iterator n = this->Users->local_users.begin(); n != this->Users->local_users.end(); n++) + for (std::vector<LocalUser*>::iterator n = this->Users->local_users.begin(); n != this->Users->local_users.end(); n++) { User* i = *n; results.push_back(sn+" 211 "+user->nick+" "+i->nick+"["+i->ident+"@"+i->GetIPString()+"] "+ConvToStr(i->getSendQSize())+" "+ConvToStr(i->cmds_out)+" "+ConvToStr(i->bytes_out)+" "+ConvToStr(i->cmds_in)+" "+ConvToStr(i->bytes_in)+" "+ConvToStr(this->Time() - i->age)); diff --git a/src/usermanager.cpp b/src/usermanager.cpp index 2eebb1ed0..db2b3a75c 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -23,10 +23,10 @@ void UserManager::AddUser(int socket, ClientListenSocket* via, irc::sockets::soc /* NOTE: Calling this one parameter constructor for User automatically * allocates a new UUID and places it in the hash_map. */ - User* New = NULL; + LocalUser* New = NULL; try { - New = new User(); + New = new LocalUser(); } catch (...) { @@ -423,7 +423,7 @@ void UserManager::ServerNoticeAll(const char* text, ...) snprintf(formatbuffer,MAXBUF,"NOTICE $%s :%s", ServerInstance->Config->ServerName.c_str(), textbuffer); - for (std::vector<User*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) { User* t = *i; t->WriteServ(std::string(formatbuffer)); @@ -444,7 +444,7 @@ void UserManager::ServerPrivmsgAll(const char* text, ...) snprintf(formatbuffer,MAXBUF,"PRIVMSG $%s :%s", ServerInstance->Config->ServerName.c_str(), textbuffer); - for (std::vector<User*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) { User* t = *i; t->WriteServ(std::string(formatbuffer)); @@ -470,7 +470,7 @@ void UserManager::WriteMode(const char* modes, int flags, const char* text, ...) if (flags == WM_AND) { - for (std::vector<User*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) { User* t = *i; bool send_to_user = true; @@ -491,7 +491,7 @@ void UserManager::WriteMode(const char* modes, int flags, const char* text, ...) } else if (flags == WM_OR) { - for (std::vector<User*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = local_users.begin(); i != local_users.end(); i++) { User* t = *i; bool send_to_user = false; diff --git a/src/userprocess.cpp b/src/userprocess.cpp index d4de29075..aa05504d5 100644 --- a/src/userprocess.cpp +++ b/src/userprocess.cpp @@ -46,7 +46,7 @@ void InspIRCd::DoBackgroundUserStuff() /* * loop over all local users.. */ - std::vector<User*>::reverse_iterator count2 = this->Users->local_users.rbegin(); + std::vector<LocalUser*>::reverse_iterator count2 = this->Users->local_users.rbegin(); while (count2 != this->Users->local_users.rend()) { User *curr = *count2; diff --git a/src/users.cpp b/src/users.cpp index fbb2309c3..e24f59a0c 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -233,13 +233,9 @@ User::User(const std::string &uid) server_sa.sa.sa_family = AF_UNSPEC; client_sa.sa.sa_family = AF_UNSPEC; AllowedPrivs = AllowedOperCommands = NULL; + uuid = uid; - if (uid.empty()) - uuid = ServerInstance->GetUID(); - else - uuid = uid; - - ServerInstance->Logs->Log("USERS", DEBUG,"New UUID for user: %s (%s)", uuid.c_str(), uid.empty() ? "allocated new" : "used remote"); + ServerInstance->Logs->Log("USERS", DEBUG, "New UUID for user: %s", uuid.c_str()); user_hash::iterator finduuid = ServerInstance->Users->uuidlist->find(uuid); if (finduuid == ServerInstance->Users->uuidlist->end()) @@ -248,6 +244,10 @@ User::User(const std::string &uid) throw CoreException("Duplicate UUID "+std::string(uuid)+" in User constructor"); } +LocalUser::LocalUser() : User(ServerInstance->GetUID()) +{ +} + User::~User() { if (uuid.length()) @@ -603,7 +603,7 @@ CullResult User::cull() if (fd != INT_MAX) Close(); - std::vector<User*>::iterator x = find(ServerInstance->Users->local_users.begin(),ServerInstance->Users->local_users.end(),this); + std::vector<LocalUser*>::iterator x = find(ServerInstance->Users->local_users.begin(),ServerInstance->Users->local_users.end(),this); if (x != ServerInstance->Users->local_users.end()) ServerInstance->Users->local_users.erase(x); else @@ -1341,12 +1341,18 @@ void User::WriteCommonQuit(const std::string &normal_text, const std::string &op } } -void User::SendText(const std::string& line) +void LocalUser::SendText(const std::string& line) +{ + Write(line); +} + +void RemoteUser::SendText(const std::string& line) +{ + ServerInstance->PI->PushToClient(this, line); +} + +void FakeUser::SendText(const std::string& line) { - if (IS_LOCAL(this)) - Write(line); - else if (!IS_SERVER(this)) - ServerInstance->PI->PushToClient(this, line); } void User::SendText(const char *text, ...) @@ -1557,7 +1563,7 @@ void User::SendAll(const char* command, const char* text, ...) snprintf(formatbuffer,MAXBUF,":%s %s $* :%s", this->GetFullHost().c_str(), command, textbuffer); std::string fmt = formatbuffer; - for (std::vector<User*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) + for (std::vector<LocalUser*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) { (*i)->Write(fmt); } diff --git a/src/xline.cpp b/src/xline.cpp index b101237a3..aa43ac43b 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -146,7 +146,7 @@ void XLineManager::CheckELines() if (ELines.empty()) return; - for (std::vector<User*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++) + for (std::vector<LocalUser*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++) { User* u = (User*)(*u2); @@ -311,7 +311,7 @@ bool XLineManager::DelLine(const char* hostmask, const std::string &type, User* void ELine::Unset() { /* remove exempt from everyone and force recheck after deleting eline */ - for (std::vector<User*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++) + for (std::vector<LocalUser*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++) { User* u = (User*)(*u2); u->exempt = false; @@ -415,7 +415,7 @@ void XLineManager::ExpireLine(ContainerIter container, LookupIter item) // applies lines, removing clients and changing nicks etc as applicable void XLineManager::ApplyLines() { - std::vector<User*>::reverse_iterator u2 = ServerInstance->Users->local_users.rbegin(); + std::vector<LocalUser*>::reverse_iterator u2 = ServerInstance->Users->local_users.rbegin(); while (u2 != ServerInstance->Users->local_users.rend()) { User* u = *u2++; @@ -670,7 +670,7 @@ bool GLine::Matches(const std::string &str) void ELine::OnAdd() { /* When adding one eline, only check the one eline */ - for (std::vector<User*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++) + for (std::vector<LocalUser*>::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++) { User* u = (User*)(*u2); if (this->Matches(u)) |