]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Ive tidied up the mode count stuff, but i still cant duplicate negative invisible...
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 18 Jul 2007 18:03:21 +0000 (18:03 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 18 Jul 2007 18:03:21 +0000 (18:03 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7474 e03df62e-2008-0410-955e-edbf42e46eb7

src/inspsocket.cpp
src/mode.cpp
src/modes/umode_i.cpp
src/modes/umode_s.cpp
src/modes/umode_w.cpp
src/modules/m_spanningtree/main.cpp
src/modules/m_spanningtree/treesocket1.cpp

index f29366c73bad71ab7b400309f0b939f0ff9feabc..ecf7e0b249d3b5adcd8fcd8387d651479657c07f 100644 (file)
@@ -356,9 +356,9 @@ void InspSocket::Close()
                                Instance->Log(DEFAULT,"%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
                        }
                }
-               this->OnClose();
                shutdown(this->fd,2);
-               close(this->fd);
+               if (close(this->fd) != -1)
+                       this->OnClose();
 
                if (Instance->SocketCull.find(this) == Instance->SocketCull.end())
                        Instance->SocketCull[this] = this;
index db120cfe587a59be26b676815fbc44f4002b8f90..d04b7df975bdb69484544f2ccb8a8ece48d94103 100644 (file)
@@ -79,6 +79,7 @@ unsigned int ModeHandler::GetCount()
 void ModeHandler::ChangeCount(int modifier)
 {
        count += modifier;
+       ServerInstance->Log(DEBUG,"Change count for mode %c is now %d", mode, count);
 }
 
 ModeType ModeHandler::GetModeType()
@@ -564,6 +565,8 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
                                                                /* Add the mode letter */
                                                                output_sequence.push_back(modechar);
 
+                                                               modehandlers[handler_id]->ChangeCount(adding ? 1 : -1);
+
                                                                /* Is there a valid parameter for this mode? If so add it to the parameter list */
                                                                if ((modehandlers[handler_id]->GetNumParams(adding)) && (!parameter.empty()))
                                                                {
index 5a93273757e0a7e7f8323f5e31e9c1404149ab92..a599f8f6f4b22a00ec93aa823b00548d8dcd07f5 100644 (file)
@@ -31,7 +31,6 @@ ModeAction ModeUserInvisible::OnModeChange(userrec* source, userrec* dest, chanr
        if (dest->modes[UM_INVISIBLE] != adding)
        {
                dest->modes[UM_INVISIBLE] = adding;
-               this->count += (adding ? 1: -1);
                return MODEACTION_ALLOW;
        }
 
index 4b3179001af415419eb14950628f1ba05720bdd8..faf6348de6136900694f30fd41d403f4a977892c 100644 (file)
@@ -31,7 +31,6 @@ ModeAction ModeUserServerNotice::OnModeChange(userrec* source, userrec* dest, ch
        if (dest->modes[UM_SERVERNOTICE] != adding)
        {
                dest->modes[UM_SERVERNOTICE] = adding;
-               this->count += (adding ? 1: -1);
                return MODEACTION_ALLOW;
        }
 
index 383c91f6ef1f5e6a179d568a42141e41bd6e6e23..50000f75f126c9fa9ecea1481ce5637f6d3122d2 100644 (file)
@@ -31,7 +31,6 @@ ModeAction ModeUserWallops::OnModeChange(userrec* source, userrec* dest, chanrec
        if (dest->modes[UM_WALLOPS] != adding)
        {
                dest->modes[UM_WALLOPS] = adding;
-               this->count += (adding ? 1: -1);
                return MODEACTION_ALLOW;
        }
 
index 1cc18dae6f1e46cc145816225ff0730735722214..9a678dc5bcd0337bbeebccb3ea8e027ef5fc7d95 100644 (file)
@@ -137,13 +137,20 @@ void ModuleSpanningTree::HandleLusers(const char** parameters, int pcnt, userrec
                        }
                }
        }
-       user->WriteServ("251 %s :There are %d users and %d invisible on %d servers",user->nick,n_users-ServerInstance->InvisibleUserCount(),ServerInstance->InvisibleUserCount(),ulined_count ? this->CountServs() - ulined_count : this->CountServs());
+       user->WriteServ("251 %s :There are %d users and %d invisible on %d servers",user->nick,
+                       n_users-ServerInstance->InvisibleUserCount(),
+                       ServerInstance->InvisibleUserCount(),
+                       ulined_count ? this->CountServs() - ulined_count : this->CountServs());
+
        if (ServerInstance->OperCount())
                user->WriteServ("252 %s %d :operator(s) online",user->nick,ServerInstance->OperCount());
+
        if (ServerInstance->UnregisteredUserCount())
                user->WriteServ("253 %s %d :unknown connections",user->nick,ServerInstance->UnregisteredUserCount());
+       
        if (ServerInstance->ChannelCount())
                user->WriteServ("254 %s %d :channels formed",user->nick,ServerInstance->ChannelCount());
+       
        user->WriteServ("255 %s :I have %d clients and %d servers",user->nick,ServerInstance->LocalUserCount(),ulined_local_count ? this->CountLocalServs() - ulined_local_count : this->CountLocalServs());
        user->WriteServ("265 %s :Current Local Users: %d  Max: %d",user->nick,ServerInstance->LocalUserCount(),max_local);
        user->WriteServ("266 %s :Current Global Users: %d  Max: %d",user->nick,n_users,max_global);
@@ -487,7 +494,8 @@ void ModuleSpanningTree::DoPingChecks(time_t curtime)
                                        /* they didnt answer, boot them */
                                        sock->SendError("Ping timeout");
                                        sock->Squit(serv,"Ping timeout");
-                                       /*** XXX SOCKET CULL ***/
+                                       ServerInstance->SE->DelFd(sock);
+                                       sock->Close();
                                        return;
                                }
                        }
index a907bb440464872312e209c8a1979ecf5599790b..4d960cf8a55ad9c8fce6ca91c7ae0abfe8e29aa5 100644 (file)
@@ -918,6 +918,7 @@ bool TreeSocket::IntroduceClient(const std::string &source, std::deque<std::stri
 
        time_t age = ConvToInt(params[0]);
        const char* tempnick = params[1].c_str();
+       std::string empty;
 
        cmd_validation valid[] = { {"Nickname", 1, NICKMAX}, {"Hostname", 2, 64}, {"Displayed hostname", 3, 64}, {"Ident", 4, IDENTMAX}, {"GECOS", 7, MAXGECOS}, {"", 0, 0} };
 
@@ -975,11 +976,14 @@ bool TreeSocket::IntroduceClient(const std::string &source, std::deque<std::stri
 
        for (std::string::iterator v = params[5].begin(); v != params[5].end(); v++)
        {
-               _new->modes[(*v)-65] = 1;
                /* For each mode thats set, increase counter */
                ModeHandler* mh = Instance->Modes->FindMode(*v, MODETYPE_USER);
                if (mh)
+               {
+                       mh->OnModeChange(_new, _new, NULL, empty, true);
+                       _new->SetMode(*v, true);
                        mh->ChangeCount(1);
+               }
        }
 
        /* now we've done with modes processing, put the + back for remote servers */