]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Get rid of ModePair
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Sat, 24 Oct 2009 03:29:58 +0000 (03:29 +0000)
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Sat, 24 Oct 2009 03:29:58 +0000 (03:29 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11963 e03df62e-2008-0410-955e-edbf42e46eb7

30 files changed:
include/mode.h
include/modes/cmode_b.h
include/modes/cmode_h.h
include/modes/cmode_k.h
include/modes/cmode_l.h
include/modes/cmode_o.h
include/modes/cmode_v.h
src/channels.cpp
src/listensocket.cpp
src/mode.cpp
src/modes/cmode_b.cpp
src/modes/cmode_h.cpp
src/modes/cmode_k.cpp
src/modes/cmode_l.cpp
src/modes/cmode_o.cpp
src/modes/cmode_v.cpp
src/modules/m_chanprotect.cpp
src/modules/m_delayjoin.cpp
src/modules/m_delaymsg.cpp
src/modules/m_invisible.cpp
src/modules/m_joinflood.cpp
src/modules/m_kicknorejoin.cpp
src/modules/m_messageflood.cpp
src/modules/m_nickflood.cpp
src/modules/m_ojoin.cpp
src/modules/m_operprefix.cpp
src/modules/m_redirect.cpp
src/modules/m_servprotect.cpp
src/modules/m_spanningtree/netburst.cpp
src/users.cpp

index 2fca1204df790c562f9620b2fd049bbcd10641fb..091d11c3df453ddcd19a97db375b8d91f59bbd60 100644 (file)
@@ -80,13 +80,6 @@ enum ParamSpec
        PARAM_ALWAYS
 };
 
-/**
- * Used by ModeHandler::ModeSet() to return the state of a mode upon a channel or user.
- * The pair contains an activity flag, true if the mode is set with the given parameter,
- * and the parameter of the mode (or the parameter provided) in the std::string.
- */
-typedef std::pair<bool,std::string> ModePair;
-
 /** Each mode is implemented by ONE ModeHandler class.
  * You must derive ModeHandler and add the child class to
  * the list of modes handled by the ircd, using
@@ -285,21 +278,6 @@ class CoreExport ModeHandler : public classbase
         */
        virtual bool ResolveModeConflict(std::string &their_param, const std::string &our_param, Channel* channel);
 
-       /**
-        * When a remote server needs to bounce a set of modes, it will call this method for every mode
-        * in the mode string to determine if the mode is set or not.
-        * @param source of the mode change, this will be NULL for a server mode
-        * @param dest Target user of the mode change, if this is a user mode
-        * @param channel Target channel of the mode change, if this is a channel mode
-        * @param parameter The parameter given for the mode change, or an empty string
-        * @returns The first value of the pair should be true if the mode is set with the given parameter.
-        * In the case of permissions modes such as channelmode +o, this should return true if the user given
-        * as the parameter has the given privilage on the given channel. The string value of the pair will hold
-        * the current setting for this mode set locally, when the bool is true, or, the parameter given.
-        * This allows the local server to enforce our locally set parameters back to a remote server.
-        */
-       virtual ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter);
-
        /**
         * When a MODETYPE_USER mode handler is being removed, the server will call this method for every user on the server.
         * Your mode handler should remove its user mode from the user by sending the appropriate server modes using
@@ -578,18 +556,6 @@ class CoreExport ModeParser
        /** This returns the PREFIX=(ohv)@%+ section of the 005 numeric.
         */
        std::string BuildPrefixes();
-
-       /** This returns the privilages of a user upon a channel, in the format of a mode change.
-        * For example, if a user has privilages +avh, this will return the string "avh nick nick nick".
-        * This is used by the core when cycling a user to refresh their hostname. You may use it for
-        * similar purposes.
-        * @param user The username to look up
-        * @param channel The channel name to look up the privilages of the user for
-        * @param nick_suffix true (the default) if you want nicknames in the mode string, for easy
-        * use with the mode stacker, false if you just want the "avh" part of "avh nick nick nick".
-        * @return The mode string.
-        */
-       std::string ModeString(User* user, Channel* channel, bool nick_suffix = true);
 };
 
 #endif
index 0fdbaee3bd5fca44f6f32692d25e74e07721ce55..7e613941772b7f76a7f3999f3a8ed847004024b4 100644 (file)
@@ -29,7 +29,6 @@ class ModeChannelBan : public ModeHandler
        std::string& DelBan(User *user,std::string& dest,Channel *chan,int status);
        void DisplayList(User* user, Channel* channel);
        void DisplayEmptyList(User* user, Channel* channel);
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter);
        void RemoveMode(User* user, irc::modestacker* stack = NULL);
        void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
 };
index aea56ba32ed5fbae6a1560d1fefdd2e16502c416..a93e8bf6a78e419ff46273869eca85bbbd4498d7 100644 (file)
@@ -24,7 +24,6 @@ class ModeChannelHalfOp : public ModeHandler
  public:
        ModeChannelHalfOp();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter);
        unsigned int GetPrefixRank();
        void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
        void RemoveMode(User* user, irc::modestacker* stack = NULL);
index bb35979234a1dbc2f7fccba52bb0aa6e1bbe1e7d..e26d7e5a68031cf9d523bab3e76c92b468de4b9d 100644 (file)
@@ -22,7 +22,6 @@ class ModeChannelKey : public ModeHandler
  public:
        ModeChannelKey();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter);
        void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
        void RemoveMode(User* user, irc::modestacker* stack = NULL);
 };
index d83c4f1cf4ae411fef220b354610a8960752c263..dc93396d738eba150639d539133389152796bd14 100644 (file)
@@ -22,6 +22,5 @@ class ModeChannelLimit : public ModeHandler
  public:
        ModeChannelLimit();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter);
        bool ResolveModeConflict(std::string &their_param, const std::string &our_param, Channel* channel);
 };
index 524d254ee38bf2061326f3cd773755934a963188..06c7862c4226807af048655c0a4d2961335192b6 100644 (file)
@@ -24,7 +24,6 @@ class ModeChannelOp : public ModeHandler
  public:
        ModeChannelOp();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter);
        unsigned int GetPrefixRank();
        void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
        void RemoveMode(User* user, irc::modestacker* stack = NULL);
index 77e8562f293f2e597b2ea25b1c394aed24e6abaf..30a1650ad0b3dfb369d13c5d9781ea82758f91a4 100644 (file)
@@ -24,7 +24,6 @@ class ModeChannelVoice : public ModeHandler
  public:
        ModeChannelVoice();
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter);
        unsigned int GetPrefixRank();
        void RemoveMode(User* user, irc::modestacker* stack = NULL);
        void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
index fd9861279e15258972b5086b10cdce92c3c1c0ed..500791ea3818f641c8b514d2074c92e166393d5a 100644 (file)
@@ -377,7 +377,9 @@ Channel* Channel::ForceChan(Channel* Ptr, User* user, const std::string &privs,
        Ptr->WriteAllExcept(user, false, 0, except_list, "JOIN :%s", Ptr->name.c_str());
 
        /* Theyre not the first ones in here, make sure everyone else sees the modes we gave the user */
-       std::string ms = ServerInstance->Modes->ModeString(user, Ptr);
+       std::string ms = memb->modes;
+       for(unsigned int i=0; i < memb->modes.length(); i++)
+               ms.append(" ").append(user->nick);
        if ((Ptr->GetUserCounter() > 1) && (ms.length()))
                Ptr->WriteAllExceptSender(user, true, 0, "MODE %s +%s", Ptr->name.c_str(), ms.c_str());
 
index 038c665beba008c0a8ddae8d9cef632e27ef3021..43584eae1d28051432859136bd20206fb9f6905a 100644 (file)
@@ -71,16 +71,12 @@ void ListenSocket::AcceptInternal()
        irc::sockets::sockaddrs client;
        irc::sockets::sockaddrs server;
 
-       ServerInstance->Logs->Log("SOCKET",DEBUG,"HandleEvent for Listensoket");
-       int incomingSockfd;
-
        socklen_t length = sizeof(client);
-       incomingSockfd = ServerInstance->SE->Accept(this, &client.sa, &length);
+       int incomingSockfd = ServerInstance->SE->Accept(this, &client.sa, &length);
 
+       ServerInstance->Logs->Log("SOCKET",DEBUG,"HandleEvent for Listensoket %s nfd=%d", bind_desc.c_str(), incomingSockfd);
        if (incomingSockfd < 0)
        {
-               ServerInstance->SE->Shutdown(incomingSockfd, 2);
-               ServerInstance->SE->Close(incomingSockfd);
                ServerInstance->stats->statsRefused++;
                return;
        }
@@ -141,7 +137,6 @@ void ListenSocket::AcceptInternal()
        }
 
        ServerInstance->SE->NonBlocking(incomingSockfd);
-       ServerInstance->stats->statsAccept++;
 
        ModResult res;
        FIRST_MOD_RESULT(OnAcceptConnection, res, (incomingSockfd, this, &client, &server));
@@ -154,8 +149,13 @@ void ListenSocket::AcceptInternal()
                        res = MOD_RES_ALLOW;
                }
        }
-       if (res != MOD_RES_ALLOW)
+       if (res == MOD_RES_ALLOW)
        {
+               ServerInstance->stats->statsAccept++;
+       }
+       else
+       {
+               ServerInstance->stats->statsRefused++;
                ServerInstance->Logs->Log("SOCKET",DEFAULT,"Refusing connection on %s - %s",
                        bind_desc.c_str(), res == MOD_RES_DENY ? "Connection refused by module" : "Module for this port not found");
                ServerInstance->SE->Close(incomingSockfd);
index d19647caea8fed728aecf7c0c43eb142d05182d8..d12469aef53e6a99c2bfc5548dd7ccd51c3cbf56 100644 (file)
@@ -121,18 +121,6 @@ ModeAction ModeHandler::OnModeChange(User*, User*, Channel*, std::string&, bool)
        return MODEACTION_DENY;
 }
 
-ModePair ModeHandler::ModeSet(User*, User* dest, Channel* channel, const std::string&)
-{
-       if (dest)
-       {
-               return std::make_pair(dest->IsModeSet(this->mode), "");
-       }
-       else
-       {
-               return std::make_pair(channel->IsModeSet(this->mode), "");
-       }
-}
-
 void ModeHandler::DisplayList(User*, Channel*)
 {
 }
@@ -768,40 +756,6 @@ ModeHandler* ModeParser::FindPrefix(unsigned const char pfxletter)
        return NULL;
 }
 
-std::string ModeParser::ModeString(User* user, Channel* channel, bool nick_suffix)
-{
-       std::string types;
-       std::string pars;
-
-       if (!channel || !user)
-               return "";
-
-       for (unsigned char mode = 'A'; mode <= 'z'; mode++)
-       {
-               unsigned char pos = (mode-65) | MASK_CHANNEL;
-               ModeHandler* mh = modehandlers[pos];
-               if ((mh) && (mh->GetNumParams(true)) && (mh->GetNumParams(false)))
-               {
-                       ModePair ret;
-                       ret = mh->ModeSet(NULL, user, channel, user->nick);
-                       if ((ret.first) && (ret.second == user->nick))
-                       {
-                               if (nick_suffix)
-                               {
-                                       pars.append(" ");
-                                       pars.append(user->nick);
-                               }
-                               types.push_back(mh->GetModeChar());
-                       }
-               }
-       }
-
-       if (nick_suffix)
-               return types+pars;
-       else
-               return types;
-}
-
 std::string ModeParser::GiveModeList(ModeMasks m)
 {
        std::string type1;      /* Listmodes EXCEPT those with a prefix */
index 477d875445a8bbacb1a21c8c57a42cb586a9b580..b2b3f3c6f10b434419bb26faa2c03e778162f43e 100644 (file)
@@ -141,18 +141,6 @@ std::string& ModeChannelBan::AddBan(User *user, std::string &dest, Channel *chan
        return dest;
 }
 
-ModePair ModeChannelBan::ModeSet(User*, User*, Channel* channel, const std::string &parameter)
-{
-       for (BanList::iterator i = channel->bans.begin(); i != channel->bans.end(); i++)
-       {
-               if (!strcasecmp(i->data.c_str(), parameter.c_str()))
-               {
-                       return std::make_pair(true, i->data);
-               }
-       }
-       return std::make_pair(false, parameter);
-}
-
 std::string& ModeChannelBan::DelBan(User *user, std::string& dest, Channel *chan, int)
 {
        if ((!user) || (!chan))
index 9ca050de22ebe9766f19d52156637ce161d65c01..0b0f0b700d5fcb51ad1665a4ee6367440cabf81e 100644 (file)
@@ -32,24 +32,6 @@ unsigned int ModeChannelHalfOp::GetPrefixRank()
        return HALFOP_VALUE;
 }
 
-ModePair ModeChannelHalfOp::ModeSet(User*, User*, Channel* channel, const std::string &parameter)
-{
-       User* x = ServerInstance->FindNick(parameter);
-       if (x)
-       {
-               Membership* memb = channel->GetUser(x);
-               if (memb && memb->hasMode('h'))
-               {
-                       return std::make_pair(true, x->nick);
-               }
-               else
-               {
-                       return std::make_pair(false, x->nick);
-               }
-       }
-       return std::make_pair(false, parameter);
-}
-
 void ModeChannelHalfOp::RemoveMode(Channel* channel, irc::modestacker* stack)
 {
        const UserMembList* clist = channel->GetUsers();
index 5b273cdd1a5a23cd1a4b84ce2e183ad3fd33e429..d8b04b5764b5b53f106c39ac445e5ca643093559 100644 (file)
@@ -21,19 +21,6 @@ ModeChannelKey::ModeChannelKey() : ModeHandler(NULL, "key", 'k', PARAM_ALWAYS, M
 {
 }
 
-ModePair ModeChannelKey::ModeSet(User*, User*, Channel* channel, const std::string &parameter)
-{
-    if (channel->modes[CM_KEY])
-    {
-               std::string ckey = channel->GetModeParameter('k');
-               return std::make_pair(true, ckey);
-    }
-    else
-    {
-               return std::make_pair(false, parameter);
-    }
-}
-
 void ModeChannelKey::RemoveMode(Channel* channel, irc::modestacker* stack)
 {
        /** +k needs a parameter when being removed,
index 0fddf2af0dd637244e4b35883e8d485ed004d538..fce1952002bd0a21a71228030a2a570cde7964aa 100644 (file)
@@ -21,19 +21,6 @@ ModeChannelLimit::ModeChannelLimit() : ModeHandler(NULL, "limit", 'l', PARAM_SET
 {
 }
 
-ModePair ModeChannelLimit::ModeSet(User*, User*, Channel* channel, const std::string &parameter)
-{
-       std::string climit = channel->GetModeParameter('l');
-       if (!climit.empty())
-       {
-               return std::make_pair(true, climit);
-       }
-       else
-       {
-               return std::make_pair(false, parameter);
-       }
-}
-
 bool ModeChannelLimit::ResolveModeConflict(std::string &their_param, const std::string &our_param, Channel*)
 {
        /* When TS is equal, the higher channel limit wins */
index 1bab9db26a3627a7b89222fbada0cca3f6132729..e706302dc59365696e1d3078735dda36d90ea54d 100644 (file)
@@ -32,25 +32,6 @@ unsigned int ModeChannelOp::GetPrefixRank()
        return OP_VALUE;
 }
 
-ModePair ModeChannelOp::ModeSet(User*, User*, Channel* channel, const std::string &parameter)
-{
-       User* x = ServerInstance->FindNick(parameter);
-       if (x)
-       {
-               Membership* memb = channel->GetUser(x);
-               if (memb && memb->hasMode('o'))
-               {
-                       return std::make_pair(true, x->nick);
-               }
-               else
-               {
-                       return std::make_pair(false, parameter);
-               }
-       }
-       return std::make_pair(false, parameter);
-}
-
-
 void ModeChannelOp::RemoveMode(Channel* channel, irc::modestacker* stack)
 {
        const UserMembList* clist = channel->GetUsers();
index b791f5574cb8363a10c454f8a0a572c62a67a03c..6e5ebd0a9cf40fca17647f5d607af851f1e1f2c0 100644 (file)
@@ -33,24 +33,6 @@ unsigned int ModeChannelVoice::GetPrefixRank()
        return VOICE_VALUE;
 }
 
-ModePair ModeChannelVoice::ModeSet(User*, User*, Channel* channel, const std::string &parameter)
-{
-       User* x = ServerInstance->FindNick(parameter);
-       if (x)
-       {
-               Membership* memb = channel->GetUser(x);
-               if (memb && memb->hasMode('v'))
-               {
-                       return std::make_pair(true, x->nick);
-               }
-               else
-               {
-                       return std::make_pair(false, parameter);
-               }
-       }
-       return std::make_pair(false, parameter);
-}
-
 void ModeChannelVoice::RemoveMode(Channel* channel, irc::modestacker* stack)
 {
        const UserMembList* clist = channel->GetUsers();
index 9164d9992d4d411c1ebb4f0ae37eb073b6da2242..369703d2c1212759dc57fe605727f230b33be3d9 100644 (file)
@@ -44,31 +44,6 @@ class FounderProtectBase
        {
        }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               User* x = ServerInstance->FindNick(parameter);
-               if (x)
-               {
-                       Membership* memb = channel->GetUser(x);
-                       if (!memb)
-                       {
-                               return std::make_pair(false, parameter);
-                       }
-                       else
-                       {
-                               if (memb->hasMode(mode))
-                               {
-                                       return std::make_pair(true, x->nick);
-                               }
-                               else
-                               {
-                                       return std::make_pair(false, parameter);
-                               }
-                       }
-               }
-               return std::make_pair(false, parameter);
-       }
-
        void RemoveMode(Channel* channel, irc::modestacker* stack)
        {
                const UserMembList* cl = channel->GetUsers();
@@ -143,11 +118,6 @@ class ChanFounder : public ModeHandler, public FounderProtectBase
                return FOUNDER_VALUE;
        }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               return FounderProtectBase::ModeSet(source, dest, channel, parameter);
-       }
-
        void RemoveMode(Channel* channel, irc::modestacker* stack)
        {
                FounderProtectBase::RemoveMode(channel, stack);
@@ -215,11 +185,6 @@ class ChanProtect : public ModeHandler, public FounderProtectBase
                return PROTECT_VALUE;
        }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               return FounderProtectBase::ModeSet(source, dest, channel, parameter);
-       }
-
        void RemoveMode(Channel* channel, irc::modestacker* stack)
        {
                FounderProtectBase::RemoveMode(channel, stack);
index 5c545c2f6fd64f05e0707204c6981f3ae8eb4b59..cde9ed047f34d23690fc997b000be60643cda3b9 100644 (file)
@@ -154,9 +154,12 @@ void ModuleDelayJoin::OnText(User* user, void* dest, int target_type, const std:
        /* Display the join to everyone else (the user who joined got it earlier) */
        channel->WriteAllExceptSender(user, false, 0, "JOIN %s", channel->name.c_str());
 
-       std::string n = ServerInstance->Modes->ModeString(user, channel);
-       if (n.length() > 0)
-               channel->WriteAllExceptSender(user, false, 0, "MODE %s +%s", channel->name.c_str(), n.c_str());
+       std::string ms = memb->modes;
+       for(unsigned int i=0; i < memb->modes.length(); i++)
+               ms.append(" ").append(user->nick);
+
+       if (ms.length() > 0)
+               channel->WriteAllExceptSender(user, false, 0, "MODE %s +%s", channel->name.c_str(), ms.c_str());
 }
 
 MODULE_INIT(ModuleDelayJoin)
index 0432bce5b0cc80af70074a1d70c3c15f9d20dbdf..192bca15f146e20681c2aa643638ce4cd0833840 100644 (file)
@@ -28,19 +28,6 @@ class DelayMsgMode : public ModeHandler
                levelrequired = OP_VALUE;
        }
 
-       ModePair ModeSet(User*, User*, Channel* channel, const std::string &parameter)
-       {
-               std::string climit = channel->GetModeParameter('d');
-               if (!climit.empty())
-               {
-                       return std::make_pair(true, climit);
-               }
-               else
-               {
-                       return std::make_pair(false, parameter);
-               }
-       }
-
        bool ResolveModeConflict(std::string &their_param, const std::string &our_param, Channel*)
        {
                return (atoi(their_param.c_str()) < atoi(our_param.c_str()));
index 0c7cc4dc76e6b6e2396ea0b386e982f80e2f872d..cc2080f7ff4034ef563859971087397a97398133 100644 (file)
@@ -49,7 +49,11 @@ class InvisibleMode : public ModeHandler
 
                                snprintf(tb,MAXBUF,":%s %s %s", dest->GetFullHost().c_str(), adding ? "PART" : "JOIN", (*f)->name.c_str());
                                std::string out = tb;
-                               std::string n = ServerInstance->Modes->ModeString(dest, (*f));
+                               Membership* memb = (**f).GetUser(dest);
+                               std::string ms = memb->modes;
+                               for(unsigned int i=0; i < memb->modes.length(); i++)
+                                       ms.append(" ").append(dest->nick);
+
 
                                for (UserMembCIter i = ulist->begin(); i != ulist->end(); i++)
                                {
@@ -57,8 +61,8 @@ class InvisibleMode : public ModeHandler
                                        if (IS_LOCAL(i->first) && !IS_OPER(i->first))
                                        {
                                                i->first->Write(out);
-                                               if (!n.empty() && !adding)
-                                                       i->first->WriteServ("MODE %s +%s", (*f)->name.c_str(), n.c_str());
+                                               if (!ms.empty() && !adding)
+                                                       i->first->WriteServ("MODE %s +%s", (**f).name.c_str(), ms.c_str());
                                        }
                                }
                        }
index e0555b37f490367c94594ef1f0d1f90b3053b3bb..77d02a28846fbc6ecf79cf0dc335fd32c7ff0f0c 100644 (file)
@@ -88,15 +88,6 @@ class JoinFlood : public ModeHandler
        JoinFlood(Module* Creator) : ModeHandler(Creator, "joinflood", 'j', PARAM_SETONLY, MODETYPE_CHANNEL),
                ext("joinflood", Creator) { }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               joinfloodsettings* x = ext.get(channel);
-               if (x)
-                       return std::make_pair(true, ConvToStr(x->joins)+":"+ConvToStr(x->secs));
-               else
-                       return std::make_pair(false, parameter);
-       }
-
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
        {
                if (adding)
index 9d5fe3b623434d831e456cebe20d87491bb21c7a..aee4bf8697951e20e92928368b7761b923b1479f 100644 (file)
@@ -34,14 +34,6 @@ class KickRejoin : public ModeHandler
        KickRejoin(Module* Creator) : ModeHandler(Creator, "kicknorejoin", 'J', PARAM_SETONLY, MODETYPE_CHANNEL),
                ext("norejoinusers", Creator) { }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               if (channel->IsModeSet('J'))
-                       return std::make_pair(true, channel->GetModeParameter('J'));
-               else
-                       return std::make_pair(false, parameter);
-       }
-
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
        {
                if (!adding)
index c39bc980744cada0890ced417cbcad7f105d7179..5fceee19c29d2c45cc9d2d565f37c147aa312a43 100644 (file)
@@ -78,15 +78,6 @@ class MsgFlood : public ModeHandler
        MsgFlood(Module* Creator) : ModeHandler(Creator, "flood", 'f', PARAM_SETONLY, MODETYPE_CHANNEL),
                ext("messageflood", Creator) { }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               floodsettings* x = ext.get(channel);
-               if (x)
-                       return std::make_pair(true, (x->ban ? "*" : "")+ConvToStr(x->lines)+":"+ConvToStr(x->secs));
-               else
-                       return std::make_pair(false, parameter);
-       }
-
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
        {
                floodsettings *f = ext.get(channel);
index a267cd4043d448031046c3cd29db7e297bad9c91..f34cc81e42700708086a8b85a8bcf6f37918a1aa 100644 (file)
@@ -92,15 +92,6 @@ class NickFlood : public ModeHandler
        NickFlood(Module* Creator) : ModeHandler(Creator, "nickflood", 'F', PARAM_SETONLY, MODETYPE_CHANNEL),
                ext("nickflood", Creator) { }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               nickfloodsettings* x = ext.get(channel);
-               if (x)
-                       return std::make_pair(true, ConvToStr(x->nicks)+":"+ConvToStr(x->secs));
-               else
-                       return std::make_pair(false, parameter);
-       }
-
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
        {
                nickfloodsettings *f = ext.get(channel);
index d5f7b9443f8c77ce93cf773e1b1562ad1ef8cbe4..775dea204d3fc78f6e740b0bcaee3b372cf87c37 100644 (file)
@@ -103,31 +103,6 @@ class NetworkPrefix : public ModeHandler
                m_paramtype = TR_NICK;
        }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               User* x = ServerInstance->FindNick(parameter);
-               if (x)
-               {
-                       Membership* m = channel->GetUser(x);
-                       if (!m)
-                       {
-                               return std::make_pair(false, parameter);
-                       }
-                       else
-                       {
-                               if (m->hasMode('Y'))
-                               {
-                                       return std::make_pair(true, x->nick);
-                               }
-                               else
-                               {
-                                       return std::make_pair(false, parameter);
-                               }
-                       }
-               }
-               return std::make_pair(false, parameter);
-       }
-
        void RemoveMode(Channel* channel, irc::modestacker* stack)
        {
                const UserMembList* cl = channel->GetUsers();
index da1e4d242a7d20ee5afddd1e14a1b4276e1fe0d9..e40f6b0506f35832d82a792ae92d3b37beb1a4f2 100644 (file)
@@ -49,27 +49,6 @@ class OperPrefixMode : public ModeHandler
                        }
                }
 
-               ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-               {
-                       User* x = ServerInstance->FindNick(parameter);
-                       Membership* m = channel->GetUser(x);
-                       if (x)
-                       {
-                               if (!m)
-                               {
-                                       return std::make_pair(false, parameter);
-                               }
-                               else
-                               {
-                                       if (m->hasMode('y'))
-                                               return std::make_pair(true, x->nick);
-                                       else
-                                                       return std::make_pair(false, parameter);
-                               }
-                       }
-                       return std::make_pair(false, parameter);
-               }
-
                bool NeedsOper() { return true; }
 };
 
index 9a138b7fc7ae3bff4899ab9307cff74cdfabf005..50d2e929fdff37722c4e159cfbb5987e9d37c73d 100644 (file)
@@ -22,14 +22,6 @@ class Redirect : public ModeHandler
  public:
        Redirect(Module* Creator) : ModeHandler(Creator, "redirect", 'L', PARAM_SETONLY, MODETYPE_CHANNEL) { }
 
-       ModePair ModeSet(User* source, User* dest, Channel* channel, const std::string &parameter)
-       {
-               if (channel->IsModeSet('L'))
-                       return std::make_pair(true, channel->GetModeParameter('L'));
-               else
-                       return std::make_pair(false, parameter);
-       }
-
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
        {
                if (adding)
index 7fd867e9b1c4657a1371b726db487e16078addf6..dcb0cd7d5074dfa4e2c30a5a4ab940d128489e2b 100644 (file)
@@ -79,11 +79,12 @@ class ModuleServProtectMode : public Module
                        User *u = ServerInstance->FindNick(param);
                        if (u)
                        {
+                               Membership* memb = chan->GetUser(u);
                                /* The target user has +k set on themselves, and you are trying to remove a privilege mode the user has set on themselves.
                                 * This includes any prefix permission mode, even those registered in other modules, e.g. +qaohv. Using ::ModeString()
                                 * here means that the number of modes is restricted to only modes the user has, limiting it to as short a loop as possible.
                                 */
-                               if (u->IsModeSet('k') && ServerInstance->Modes->ModeString(u, chan, false).find(mode) != std::string::npos)
+                               if (u->IsModeSet('k') && memb && memb->modes.find(mode) != std::string::npos)
                                {
                                        /* BZZZT, Denied! */
                                        user->WriteNumeric(482, "%s %s :You are not permitted to remove privileges from %s services", user->nick.c_str(), chan->name.c_str(), ServerInstance->Config->Network.c_str());
index 82b6c2b685e1268f83ce68af8c09ee8f727a882c..981c903a17d52d301b5ff08263225239d27a6f25 100644 (file)
@@ -103,7 +103,7 @@ void TreeSocket::SendFJoins(TreeServer* Current, Channel* c)
        for (UserMembCIter i = ulist->begin(); i != ulist->end(); i++)
        {
                size_t ptrlen = 0;
-               std::string modestr = ServerInstance->Modes->ModeString(i->first, c, false);
+               std::string modestr = i->second->modes;
 
                if ((curlen + modestr.length() + i->first->uuid.length() + 4) > 480)
                {
index 36b41fb189d2b711ab8dec822a6533f502560197..424484b8c0dd6daf4d804738f5d162418d3d3112 100644 (file)
@@ -1376,9 +1376,12 @@ void User::DoHostCycle(const std::string &quitline)
                Channel* c = *v;
                snprintf(buffer, MAXBUF, ":%s JOIN %s", GetFullHost().c_str(), c->name.c_str());
                std::string joinline(buffer);
-               std::string modeline = ServerInstance->Modes->ModeString(this, c);
+               Membership* memb = c->GetUser(this);
+               std::string modeline = memb->modes;
                if (modeline.length() > 0)
                {
+                       for(unsigned int i=0; i < memb->modes.length(); i++)
+                               modeline.append(" ").append(nick);
                        snprintf(buffer, MAXBUF, ":%s MODE %s +%s", GetFullHost().c_str(), c->name.c_str(), modeline.c_str());
                        modeline = buffer;
                }