From 69c6384ee924bf47550cfd680234bfc7ffeecc2c Mon Sep 17 00:00:00 2001 From: brain Date: Mon, 9 Jan 2006 00:29:36 +0000 Subject: More usertopseudo fixes git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2742 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/modules.cpp') diff --git a/src/modules.cpp b/src/modules.cpp index ca9808ef5..efd4a5f06 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -57,6 +57,7 @@ extern int MODCOUNT; extern std::vector modules; extern std::vector factory; extern std::vector module_sockets; +extern std::vector local_users; extern time_t TIME; class Server; extern userrec* fd_ref_table[65536]; @@ -602,6 +603,13 @@ bool Server::UserToPseudo(userrec* user,std::string message) user->FlushWriteBuf(); user->ClearBuffer(); user->fd = FD_MAGIC_NUMBER; + + if (find(local_users.begin(),local_users.end(),user) != local_users.end()) + { + local_users.erase(find(local_users.begin(),local_users.end(),user)); + log(DEBUG,"Delete local user"); + } + ServerInstance->SE->DelFd(old_fd); shutdown(old_fd,2); close(old_fd); @@ -610,12 +618,20 @@ bool Server::UserToPseudo(userrec* user,std::string message) bool Server::PseudoToUser(userrec* alive,userrec* zombie,std::string message) { + log(DEBUG,"PseudoToUser"); zombie->fd = alive->fd; alive->fd = FD_MAGIC_NUMBER; alive->FlushWriteBuf(); alive->ClearBuffer(); Write(zombie->fd,":%s!%s@%s NICK %s",alive->nick,alive->ident,alive->host,zombie->nick); kill_link(alive,message.c_str()); + + if (find(local_users.begin(),local_users.end(),alive) != local_users.end()) + { + local_users.erase(find(local_users.begin(),local_users.end(),alive)); + log(DEBUG,"Delete local user"); + } + fd_ref_table[zombie->fd] = zombie; for (unsigned int i = 0; i < zombie->chans.size(); i++) { @@ -636,6 +652,9 @@ bool Server::PseudoToUser(userrec* alive,userrec* zombie,std::string message) } } } + if (find(local_users.begin(),local_users.end(),zombie) == local_users.end()) + local_users.push_back(zombie); + return true; } -- cgit v1.2.3