]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/userprocess.cpp
Fix for bug #569, thanks dz.
[user/henk/code/inspircd.git] / src / userprocess.cpp
index 62cd452cd182aee2e67e743897d3a8b7f7b115bc..3dc3143de02abaa8b441813e695c423147499700 100644 (file)
 
 void FloodQuitUserHandler::Call(User* current)
 {
-       Server->Logs->Log("USERS",DEFAULT,"Excess flood from: %s@%s", current->ident, current->host);
+       Server->Logs->Log("USERS",DEFAULT,"Excess flood from: %s@%s", current->ident.c_str(), current->host.c_str());
        Server->SNO->WriteToSnoMask('f',"Excess flood from: %s%s%s@%s",
-                       current->registered == REG_ALL ? current->nick : "",
-                       current->registered == REG_ALL ? "!" : "", current->ident, current->host);
-       User::QuitUser(Server, current, "Excess flood");
+                       current->registered == REG_ALL ? current->nick.c_str() : "",
+                       current->registered == REG_ALL ? "!" : "", current->ident.c_str(), current->host.c_str());
+       Server->Users->QuitUser(current, "Excess flood");
 
        if (current->registered != REG_ALL)
        {
@@ -46,14 +46,14 @@ void ProcessUserHandler::Call(User* cu)
 
        char* ReadBuffer = Server->GetReadBuffer();
 
-       if (Server->Config->GetIOHook(cu->GetPort()))
+       if (cu->io)
        {
                int result2 = 0;
                int MOD_RESULT = 0;
 
                try
                {
-                       MOD_RESULT = Server->Config->GetIOHook(cu->GetPort())->OnRawSocketRead(cu->GetFd(),ReadBuffer,Server->Config->NetBufferSize,result2);
+                       MOD_RESULT = cu->io->OnRawSocketRead(cu->GetFd(),ReadBuffer,Server->Config->NetBufferSize,result2);
                }
                catch (CoreException& modexcept)
                {
@@ -120,7 +120,7 @@ void ProcessUserHandler::Call(User* cu)
                                                        Server->FloodQuitUser(current);
                                                else
                                                {
-                                                       current->WriteServ("NOTICE %s :Your previous line was too long and was not delivered (Over %d chars) Please shorten it.", current->nick, MAXBUF-2);
+                                                       current->WriteServ("NOTICE %s :Your previous line was too long and was not delivered (Over %d chars) Please shorten it.", current->nick.c_str(), MAXBUF-2);
                                                        current->recvq.clear();
                                                }
                                        }
@@ -140,7 +140,7 @@ void ProcessUserHandler::Call(User* cu)
 
                if ((result == -1) && (errno != EAGAIN) && (errno != EINTR))
                {
-                       User::QuitUser(Server, cu, errno ? strerror(errno) : "EOF from client");
+                       Server->Users->QuitUser(cu, errno ? strerror(errno) : "EOF from client");
                        return;
                }
        }
@@ -152,7 +152,7 @@ void ProcessUserHandler::Call(User* cu)
        }
        else if (result == 0)
        {
-               User::QuitUser(Server, cu, "Connection closed");
+               Server->Users->QuitUser(cu, "Connection closed");
                return;
        }
 }
@@ -171,6 +171,9 @@ void InspIRCd::DoBackgroundUserStuff()
        {
                User *curr = *count2;
 
+               if (curr->quitting)
+                       continue;
+
                if (curr->Penalty)
                {
                        curr->Penalty--;
@@ -190,7 +193,7 @@ void InspIRCd::DoBackgroundUserStuff()
                         * registration timeout -- didnt send USER/NICK/HOST
                         * in the time specified in their connection class.
                         */
-                       User::QuitUser(this, curr, "Registration timeout");
+                       this->Users->QuitUser(curr, "Registration timeout");
                        continue;
                }
 
@@ -221,9 +224,10 @@ void InspIRCd::DoBackgroundUserStuff()
                                snprintf(message, MAXBUF, "Ping timeout: %ld second%s", (long)time, time > 1 ? "s" : "");
                                curr->lastping = 1;
                                curr->nping = TIME + curr->MyClass->GetPingTime();
-                               User::QuitUser(this, curr, message);
+                               this->Users->QuitUser(curr, message);
                                continue;
                        }
+
                        curr->Write("PING :%s",this->Config->ServerName);
                        curr->lastping = 0;
                        curr->nping = TIME  +curr->MyClass->GetPingTime();