]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Replace hardcoded mode letters passed to IsModeSet() and GetModeParameter() with...
authorattilamolnar <attilamolnar@hush.com>
Thu, 11 Apr 2013 21:47:45 +0000 (23:47 +0200)
committerattilamolnar <attilamolnar@hush.com>
Mon, 1 Jul 2013 17:21:08 +0000 (19:21 +0200)
38 files changed:
include/channels.h
include/users.h
src/channels.cpp
src/mode.cpp
src/modes/cmode_k.cpp
src/modes/umode_s.cpp
src/modules/m_allowinvite.cpp
src/modules/m_blockcaps.cpp
src/modules/m_blockcolor.cpp
src/modules/m_botmode.cpp
src/modules/m_callerid.cpp
src/modules/m_censor.cpp
src/modules/m_chanhistory.cpp
src/modules/m_cloaking.cpp
src/modules/m_commonchans.cpp
src/modules/m_deaf.cpp
src/modules/m_delayjoin.cpp
src/modules/m_delaymsg.cpp
src/modules/m_helpop.cpp
src/modules/m_hidechans.cpp
src/modules/m_hideoper.cpp
src/modules/m_messageflood.cpp
src/modules/m_namedmodes.cpp
src/modules/m_nickflood.cpp
src/modules/m_noctcp.cpp
src/modules/m_nokicks.cpp
src/modules/m_nonicks.cpp
src/modules/m_nonotice.cpp
src/modules/m_operchans.cpp
src/modules/m_permchannels.cpp
src/modules/m_redirect.cpp
src/modules/m_rmode.cpp
src/modules/m_services_account.cpp
src/modules/m_servprotect.cpp
src/modules/m_showwhois.cpp
src/modules/m_spanningtree/uid.cpp
src/modules/m_sslmodes.cpp
src/modules/m_stripcolor.cpp

index b4977eef170426f7e2ce64c38c4de8bf7cf86cff..4fb3e48dc8117149b493050263bb991016364a53 100644 (file)
@@ -110,7 +110,6 @@ class CoreExport Channel : public Extensible, public InviteBase
         * @param value True if you want to set the mode or false if you want to remove it
         */
        void SetMode(ModeHandler* mode, bool value);
-       void SetMode(char mode,bool mode_on);
 
        /** Sets or unsets a custom mode in the channels info
         * @param mode The mode character to set or unset
@@ -126,7 +125,7 @@ class CoreExport Channel : public Extensible, public InviteBase
          */
        inline bool IsModeSet(char mode) { return modes[mode-'A']; }
        inline bool IsModeSet(ModeHandler* mode) { return modes[mode->GetModeChar()-'A']; }
-
+       bool IsModeSet(ModeHandler& mode) { return IsModeSet(&mode); }
 
        /** Returns the parameter for a custom mode on a channel.
          * @param mode The mode character you wish to query
index 218ec4ae0a3005971556c86835efe45f9e73b549..73ecba0ab51d47c7166fefc9bcccd3ef123aa161 100644 (file)
@@ -447,12 +447,16 @@ class CoreExport User : public Extensible
         * @return True if the mode is set
         */
        bool IsModeSet(unsigned char m);
+       bool IsModeSet(ModeHandler* mh);
+       bool IsModeSet(ModeHandler& mh) { return IsModeSet(&mh); }
 
        /** Set a specific usermode to on or off
         * @param m The user mode
         * @param value On or off setting of the mode
         */
        void SetMode(unsigned char m, bool value);
+       void SetMode(ModeHandler* mh, bool value);
+       void SetMode(ModeHandler& mh, bool value) { SetMode(&mh, value); }
 
        /** Returns true or false for if a user can execute a privilaged oper command.
         * This is done by looking up their oper type from User::oper, then referencing
@@ -901,3 +905,14 @@ inline FakeUser* IS_SERVER(User* u)
        return u->usertype == USERTYPE_SERVER ? static_cast<FakeUser*>(u) : NULL;
 }
 
+inline bool User::IsModeSet(ModeHandler* mh)
+{
+       char m = mh->GetModeChar();
+       return (modes[m-65]);
+}
+
+inline void User::SetMode(ModeHandler* mh, bool value)
+{
+       char m = mh->GetModeChar();
+       modes[m-65] = value;
+}
index 8a4ed3f49badde77a33c58d54ae8b87bcf383114..8c59e68939d68a1c20f8727bf86b8e5959f78515 100644 (file)
@@ -44,11 +44,6 @@ Channel::Channel(const std::string &cname, time_t ts)
        modes.reset();
 }
 
-void Channel::SetMode(char mode,bool mode_on)
-{
-       modes[mode-65] = mode_on;
-}
-
 void Channel::SetMode(ModeHandler* mh, bool on)
 {
        modes[mh->GetModeChar() - 65] = on;
index a096c9c6ae9461a463e4a8521da887cd2642451f..303d292d9a4ef45fe6550ef666ec5c0d43c9c7b4 100644 (file)
@@ -94,7 +94,7 @@ ModeAction SimpleUserModeHandler::OnModeChange(User* source, User* dest, Channel
 {
        /* We're either trying to add a mode we already have or
                remove a mode we don't have, deny. */
-       if (dest->IsModeSet(this->GetModeChar()) == adding)
+       if (dest->IsModeSet(this) == adding)
                return MODEACTION_DENY;
 
        /* adding will be either true or false, depending on if we
@@ -103,7 +103,7 @@ ModeAction SimpleUserModeHandler::OnModeChange(User* source, User* dest, Channel
                aren't removing a mode we don't have, we don't have to do any
                other checks here to see if it's true or false, just add or
                remove the mode */
-       dest->SetMode(this->GetModeChar(), adding);
+       dest->SetMode(this, adding);
 
        return MODEACTION_ALLOW;
 }
@@ -113,7 +113,7 @@ ModeAction SimpleChannelModeHandler::OnModeChange(User* source, User* dest, Chan
 {
        /* We're either trying to add a mode we already have or
                remove a mode we don't have, deny. */
-       if (channel->IsModeSet(this->GetModeChar()) == adding)
+       if (channel->IsModeSet(this) == adding)
                return MODEACTION_DENY;
 
        /* adding will be either true or false, depending on if we
@@ -122,7 +122,7 @@ ModeAction SimpleChannelModeHandler::OnModeChange(User* source, User* dest, Chan
                aren't removing a mode we don't have, we don't have to do any
                other checks here to see if it's true or false, just add or
                remove the mode */
-       channel->SetMode(this->GetModeChar(), adding);
+       channel->SetMode(this, adding);
 
        return MODEACTION_ALLOW;
 }
@@ -410,9 +410,9 @@ void ModeParser::Process(const std::vector<std::string>& parameters, User* user,
                        /* Make sure the user isn't trying to slip in an invalid parameter */
                        if ((parameter.find(':') == 0) || (parameter.rfind(' ') != std::string::npos))
                                continue;
-                       if ((flags & MODE_MERGE) && targetchannel && targetchannel->IsModeSet(modechar) && !mh->IsListMode())
+                       if ((flags & MODE_MERGE) && targetchannel && targetchannel->IsModeSet(mh) && !mh->IsListMode())
                        {
-                               std::string ours = targetchannel->GetModeParameter(modechar);
+                               std::string ours = targetchannel->GetModeParameter(mh);
                                if (!mh->ResolveModeConflict(parameter, ours, targetchannel))
                                        /* we won the mode merge, don't apply this mode */
                                        continue;
@@ -828,11 +828,11 @@ void ModeHandler::RemoveMode(Channel* channel, irc::modestacker& stack)
        {
                RemovePrefixMode(channel, stack);
        }
-       else if (channel->IsModeSet(this->GetModeChar()))
+       else if (channel->IsModeSet(this))
        {
                if (this->GetNumParams(false))
                        // Removing this mode requires a parameter
-                       stack.Push(this->GetModeChar(), channel->GetModeParameter(this->GetModeChar()));
+                       stack.Push(this->GetModeChar(), channel->GetModeParameter(this));
                else
                        stack.Push(this->GetModeChar());
        }
index f07d471729547de69a895585c795552a69cf98bb..e56b26ff132b4975e8355eb38a46fef303f30e80 100644 (file)
@@ -32,18 +32,18 @@ ModeChannelKey::ModeChannelKey() : ModeHandler(NULL, "key", 'k', PARAM_ALWAYS, M
 
 ModeAction ModeChannelKey::OnModeChange(User* source, User*, Channel* channel, std::string &parameter, bool adding)
 {
-       bool exists = channel->IsModeSet('k');
+       bool exists = channel->IsModeSet(this);
        if (IS_LOCAL(source))
        {
                if (exists == adding)
                        return MODEACTION_DENY;
-               if (exists && (parameter != channel->GetModeParameter('k')))
+               if (exists && (parameter != channel->GetModeParameter(this)))
                {
                        /* Key is currently set and the correct key wasnt given */
                        return MODEACTION_DENY;
                }
        } else {
-               if (exists && adding && parameter == channel->GetModeParameter('k'))
+               if (exists && adding && parameter == channel->GetModeParameter(this))
                {
                        /* no-op, don't show */
                        return MODEACTION_DENY;
index 9473d760eace65c8b0dc48d841aa404a1747bb34..f5631c6950561e8317811f64549fac6a85b1dec8 100644 (file)
@@ -36,18 +36,18 @@ ModeAction ModeUserServerNoticeMask::OnModeChange(User* source, User* dest, Chan
        if (adding)
        {
                /* Fix for bug #310 reported by Smartys */
-               if (!dest->modes[UM_SNOMASK])
+               if (!dest->IsModeSet(this))
                        dest->snomasks.reset();
 
-               dest->modes[UM_SNOMASK] = true;
+               dest->SetMode(this, true);
                parameter = dest->ProcessNoticeMasks(parameter.c_str());
                return MODEACTION_ALLOW;
        }
        else
        {
-               if (dest->modes[UM_SNOMASK] != false)
+               if (dest->IsModeSet(this))
                {
-                       dest->modes[UM_SNOMASK] = false;
+                       dest->SetMode(this, false);
                        return MODEACTION_ALLOW;
                }
        }
index dc6d6da89c8d4a10a1963a2a3b966ec3bd0586ea..eb0eea76006da6925f10434b96a38b11a9fea9d4 100644 (file)
@@ -59,7 +59,7 @@ class ModuleAllowInvite : public Module
                                user->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :You are banned from using INVITE", user->nick.c_str(), channel->name.c_str());
                                return res;
                        }
-                       if (channel->IsModeSet('A') || res == MOD_RES_ALLOW)
+                       if (channel->IsModeSet(ni) || res == MOD_RES_ALLOW)
                        {
                                // Explicitly allow /invite
                                return MOD_RES_ALLOW;
index c13549db87c6d2632821c2b08e42b9f6eff4e364..a23d87a129fccfa6007d5b8d72cd6660f0dab623 100644 (file)
@@ -76,7 +76,7 @@ public:
                        if (res == MOD_RES_ALLOW)
                                return MOD_RES_PASSTHRU;
 
-                       if (!c->GetExtBanStatus(user, 'B').check(!c->IsModeSet('B')))
+                       if (!c->GetExtBanStatus(user, 'B').check(!c->IsModeSet(bc)))
                        {
                                int caps = 0;
                                const char* actstr = "\1ACTION ";
index 2c7207698cbaab65c0d8f80bc54c15bb0fc7f30a..6d1111a1dceeff8ee3e36ab077a94c58bf42fb6b 100644 (file)
@@ -64,7 +64,7 @@ class ModuleBlockColor : public Module
                        if (res == MOD_RES_ALLOW)
                                return MOD_RES_PASSTHRU;
 
-                       if (!c->GetExtBanStatus(user, 'c').check(!c->IsModeSet('c')))
+                       if (!c->GetExtBanStatus(user, 'c').check(!c->IsModeSet(bc)))
                        {
                                for (std::string::iterator i = text.begin(); i != text.end(); i++)
                                {
index ca1a9d5c82a2cb0a346502c756aead935b87d00a..7afb7a999f4b8d2d0cea3ed69494d3f613f66654 100644 (file)
@@ -54,7 +54,7 @@ class ModuleBotMode : public Module
 
        void OnWhois(User* src, User* dst) CXX11_OVERRIDE
        {
-               if (dst->IsModeSet('B'))
+               if (dst->IsModeSet(bm))
                {
                        ServerInstance->SendWhoisLine(src, dst, 335, src->nick+" "+dst->nick+" :is a bot on "+ServerInstance->Config->Network);
                }
index 1f9766883e853fa0024918914ab854426ca24b6a..533e70eacfd9d5c96cab5b75664cc7072f98b38c 100644 (file)
@@ -387,7 +387,7 @@ public:
 
        ModResult PreText(User* user, User* dest, std::string& text)
        {
-               if (!dest->IsModeSet('g') || (user == dest))
+               if (!dest->IsModeSet(myumode) || (user == dest))
                        return MOD_RES_PASSTHRU;
 
                if (operoverride && user->IsOper())
index 03b99c77c88fb671470fc25836757ab931a1a4f0..4148c59b4f2b7f870a320b0da6b7148a2b4f4d5f 100644 (file)
@@ -75,11 +75,11 @@ class ModuleCensor : public Module
                bool active = false;
 
                if (target_type == TYPE_USER)
-                       active = ((User*)dest)->IsModeSet('G');
+                       active = ((User*)dest)->IsModeSet(cu);
                else if (target_type == TYPE_CHANNEL)
                {
-                       active = ((Channel*)dest)->IsModeSet('G');
                        Channel* c = (Channel*)dest;
+                       active = c->IsModeSet(cc);
                        ModResult res = ServerInstance->OnCheckExemption(user,c,"censor");
 
                        if (res == MOD_RES_ALLOW)
index 9c4f644d7df5b079a0153174d9577d760b8123d7..ad10a25242463be7c7fa4eeee79153750a544eea 100644 (file)
@@ -97,7 +97,7 @@ class HistoryMode : public ModeHandler
                }
                else
                {
-                       if (!channel->IsModeSet('H'))
+                       if (!channel->IsModeSet(this))
                                return MODEACTION_DENY;
                        ext.unset(channel);
                }
index ccc98e557e7ca96e99ff5b26c0c4b8c6c55ca25e..5613a137f9ef3f7dc1f39063a3f05b573b4837ac 100644 (file)
@@ -65,7 +65,7 @@ class CloakUser : public ModeHandler
                 */
                if (!user)
                {
-                       dest->SetMode('x',adding);
+                       dest->SetMode(this, adding);
                        return MODEACTION_ALLOW;
                }
 
@@ -82,7 +82,7 @@ class CloakUser : public ModeHandler
                        debounce_ts = ServerInstance->Time();
                }
 
-               if (adding == user->IsModeSet('x'))
+               if (adding == user->IsModeSet(this))
                        return MODEACTION_DENY;
 
                /* don't allow this user to spam modechanges */
@@ -102,7 +102,7 @@ class CloakUser : public ModeHandler
                        if (cloak)
                        {
                                user->ChangeDisplayedHost(cloak->c_str());
-                               user->SetMode('x',true);
+                               user->SetMode(this, true);
                                return MODEACTION_ALLOW;
                        }
                        else
@@ -113,7 +113,7 @@ class CloakUser : public ModeHandler
                        /* User is removing the mode, so restore their real host
                         * and make it match the displayed one.
                         */
-                       user->SetMode('x',false);
+                       user->SetMode(this, false);
                        user->ChangeDisplayedHost(user->host.c_str());
                        return MODEACTION_ALLOW;
                }
@@ -312,10 +312,10 @@ class ModuleCloaking : public Module
        // mode change, we will call SetMode back to true AFTER the host change is done.
        void OnChangeHost(User* u, const std::string& host) CXX11_OVERRIDE
        {
-               if(u->IsModeSet('x'))
+               if (u->IsModeSet(cu))
                {
-                       u->SetMode('x', false);
-                       u->WriteServ("MODE %s -x", u->nick.c_str());
+                       u->SetMode(cu, false);
+                       u->WriteServ("MODE %s -%c", u->nick.c_str(), cu.GetModeChar());
                }
        }
 
index d9ab030539e32c9fe3ca965acfd86e84d5a733b5..9401bcd5c4adbffe1552e593aeb5aca1338683d6 100644 (file)
@@ -53,7 +53,7 @@ class ModulePrivacyMode : public Module
                if (target_type == TYPE_USER)
                {
                        User* t = (User*)dest;
-                       if (!user->IsOper() && (t->IsModeSet('c')) && (!ServerInstance->ULine(user->server)) && !user->SharesChannelWith(t))
+                       if (!user->IsOper() && (t->IsModeSet(pm)) && (!ServerInstance->ULine(user->server)) && !user->SharesChannelWith(t))
                        {
                                user->WriteNumeric(ERR_CANTSENDTOUSER, "%s %s :You are not permitted to send private messages to this user (+c set)", user->nick.c_str(), t->nick.c_str());
                                return MOD_RES_DENY;
index 65591f07081309938890a594381ae41d005fa567..a76f96b610de05cbe427cf02cf98b3ef07b2c179 100644 (file)
@@ -32,24 +32,14 @@ class User_d : public ModeHandler
 
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
        {
+               if (adding == dest->IsModeSet(this))
+                       return MODEACTION_DENY;
+
                if (adding)
-               {
-                       if (!dest->IsModeSet('d'))
-                       {
-                               dest->WriteNotice("*** You have enabled usermode +d, deaf mode. This mode means you WILL NOT receive any messages from any channels you are in. If you did NOT mean to do this, use /mode " + dest->nick + " -d.");
-                               dest->SetMode('d',true);
-                               return MODEACTION_ALLOW;
-                       }
-               }
-               else
-               {
-                       if (dest->IsModeSet('d'))
-                       {
-                               dest->SetMode('d',false);
-                               return MODEACTION_ALLOW;
-                       }
-               }
-               return MODEACTION_DENY;
+                       dest->WriteNotice("*** You have enabled usermode +d, deaf mode. This mode means you WILL NOT receive any messages from any channels you are in. If you did NOT mean to do this, use /mode " + dest->nick + " -d.");
+
+               dest->SetMode(this, adding);
+               return MODEACTION_ALLOW;
        }
 };
 
@@ -124,7 +114,7 @@ class ModuleDeaf : public Module
                for (UserMembCIter i = ulist->begin(); i != ulist->end(); i++)
                {
                        /* not +d ? */
-                       if (!i->first->IsModeSet('d'))
+                       if (!i->first->IsModeSet(m1))
                                continue; /* deliver message */
                        /* matched both U-line only and regular bypasses */
                        if (is_bypasschar && is_bypasschar_uline)
index 1216922ba2ac2852be3df107ca422955af1660a7..a1a1479f30f74545c184350525f2b0609c1107ea 100644 (file)
@@ -67,7 +67,7 @@ class ModuleDelayJoin : public Module
 ModeAction DelayJoinMode::OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
 {
        /* no change */
-       if (channel->IsModeSet('D') == adding)
+       if (channel->IsModeSet(this) == adding)
                return MODEACTION_DENY;
 
        if (!adding)
@@ -80,7 +80,7 @@ ModeAction DelayJoinMode::OnModeChange(User* source, User* dest, Channel* channe
                for (UserMembCIter n = names->begin(); n != names->end(); ++n)
                        creator->OnText(n->first, channel, TYPE_CHANNEL, "", 0, empty);
        }
-       channel->SetMode('D', adding);
+       channel->SetMode(this, adding);
        return MODEACTION_ALLOW;
 }
 
@@ -113,7 +113,7 @@ static void populate(CUList& except, Membership* memb)
 
 void ModuleDelayJoin::OnUserJoin(Membership* memb, bool sync, bool created, CUList& except)
 {
-       if (memb->chan->IsModeSet('D'))
+       if (memb->chan->IsModeSet(djm))
        {
                unjoined.set(memb, 1);
                populate(except, memb);
index aeb4e4932057238de251df0d259d19a72b4ff7fe..15e997301aab76741a9c7079ff2bca17813f982d 100644 (file)
@@ -63,7 +63,7 @@ ModeAction DelayMsgMode::OnModeChange(User* source, User* dest, Channel* channel
 {
        if (adding)
        {
-               if ((channel->IsModeSet('d')) && (channel->GetModeParameter('d') == parameter))
+               if ((channel->IsModeSet(this)) && (channel->GetModeParameter(this) == parameter))
                        return MODEACTION_DENY;
 
                /* Setting a new limit, sanity check */
@@ -77,7 +77,7 @@ ModeAction DelayMsgMode::OnModeChange(User* source, User* dest, Channel* channel
        }
        else
        {
-               if (!channel->IsModeSet('d'))
+               if (!channel->IsModeSet(this))
                        return MODEACTION_DENY;
 
                /*
@@ -97,7 +97,7 @@ Version ModuleDelayMsg::GetVersion()
 
 void ModuleDelayMsg::OnUserJoin(Membership* memb, bool sync, bool created, CUList&)
 {
-       if ((IS_LOCAL(memb->user)) && (memb->chan->IsModeSet('d')))
+       if ((IS_LOCAL(memb->user)) && (memb->chan->IsModeSet(djm)))
        {
                djm.jointime.set(memb, ServerInstance->Time());
        }
@@ -123,7 +123,7 @@ ModResult ModuleDelayMsg::OnUserPreMessage(User* user, void* dest, int target_ty
        if (ts == 0)
                return MOD_RES_PASSTHRU;
 
-       std::string len = channel->GetModeParameter('d');
+       std::string len = channel->GetModeParameter(&djm);
 
        if (ts + atoi(len.c_str()) > ServerInstance->Time())
        {
index 1733d0455d6ce56ea1fb0b436e05c511958ef039..ba0bc62fb73ce2e64d802c355e49c3bd67b5d49c 100644 (file)
@@ -157,7 +157,7 @@ class ModuleHelpop : public Module
 
                void OnWhois(User* src, User* dst) CXX11_OVERRIDE
                {
-                       if (dst->IsModeSet('h'))
+                       if (dst->IsModeSet(ho))
                        {
                                ServerInstance->SendWhoisLine(src, dst, 310, src->nick+" "+dst->nick+" :is available for help.");
                        }
index 3e2b271816cdddc4b35377fa5494aadd81ed0612..a53543f070aa5ecbca96dd0b703409a5468e7197 100644 (file)
@@ -68,7 +68,7 @@ class ModuleHideChans : public Module
                        return MOD_RES_PASSTHRU;
 
                /* don't touch if -I */
-               if (!dest->IsModeSet('I'))
+               if (!dest->IsModeSet(hm))
                        return MOD_RES_PASSTHRU;
 
                /* if it affects opers, we don't care if they are opered */
index 8c0757fe8b717585567ed36b81a30332ae67868f..832e5613ad877c48f41db6405961b4996b72d36f 100644 (file)
@@ -63,7 +63,7 @@ class ModuleHideOper : public Module
                if (numeric != 313)
                        return MOD_RES_PASSTHRU;
 
-               if (!dest->IsModeSet('H'))
+               if (!dest->IsModeSet(hm))
                        return MOD_RES_PASSTHRU;
 
                if (!user->HasPrivPermission("users/auspex"))
@@ -74,7 +74,7 @@ class ModuleHideOper : public Module
 
        void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, std::string& line) CXX11_OVERRIDE
        {
-               if (user->IsModeSet('H') && !source->HasPrivPermission("users/auspex"))
+               if (user->IsModeSet(hm) && !source->HasPrivPermission("users/auspex"))
                {
                        // hide the "*" that marks the user as an oper from the /WHO line
                        std::string::size_type pos = line.find("*");
index 2e91cdf062111fd6ae5e1ca61979f33abdf076a7..a898fd5d1ba037ebac81d23f2de73d23052c1d4f 100644 (file)
@@ -106,7 +106,7 @@ class MsgFlood : public ModeHandler
                }
                else
                {
-                       if (!channel->IsModeSet('f'))
+                       if (!channel->IsModeSet(this))
                                return MODEACTION_DENY;
 
                        ext.unset(channel);
@@ -135,7 +135,7 @@ class ModuleMsgFlood : public Module
 
        ModResult ProcessMessages(User* user,Channel* dest, const std::string &text)
        {
-               if ((!IS_LOCAL(user)) || !dest->IsModeSet('f'))
+               if ((!IS_LOCAL(user)) || !dest->IsModeSet(mf))
                        return MOD_RES_PASSTHRU;
 
                if (ServerInstance->OnCheckExemption(user,dest,"flood") == MOD_RES_ALLOW)
index 26b6339a3aa1415d9c98c0137dcc361438b5da0c..9d92b8a44137c713d30439fdf7f2e555de14e1e3 100644 (file)
@@ -29,11 +29,11 @@ static void DisplayList(User* user, Channel* channel)
                ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_CHANNEL);
                if (!mh || mh->IsListMode())
                        continue;
-               if (!channel->IsModeSet(letter))
+               if (!channel->IsModeSet(mh))
                        continue;
                items << " +" << mh->name;
                if (mh->GetNumParams(true))
-                       items << " " << channel->GetModeParameter(letter);
+                       items << " " << channel->GetModeParameter(mh);
        }
        const std::string line = ":" + ServerInstance->Config->ServerName + " 961 " + user->nick + " " + channel->name;
        user->SendText(line, items);
index 61347ded0d2b5c5b3e00b04d3c758cc095b0c4eb..6de6b235cf1bbf6076c0b4dd39468bf94ffc8cc1 100644 (file)
@@ -119,7 +119,7 @@ class NickFlood : public ModeHandler
                }
                else
                {
-                       if (!channel->IsModeSet('F'))
+                       if (!channel->IsModeSet(this))
                                return MODEACTION_DENY;
 
                        ext.unset(channel);
index 29b548e1c65a399ede9f2ff23eaede3b83c43823..e769ba4203e3626e5486b9c521457ab12389858f 100644 (file)
@@ -63,7 +63,7 @@ class ModuleNoCTCP : public Module
                        if (res == MOD_RES_ALLOW)
                                return MOD_RES_PASSTHRU;
 
-                       if (!c->GetExtBanStatus(user, 'C').check(!c->IsModeSet('C')))
+                       if (!c->GetExtBanStatus(user, 'C').check(!c->IsModeSet(nc)))
                        {
                                user->WriteNumeric(ERR_NOCTCPALLOWED, "%s %s :Can't send CTCP to channel (+C set)",user->nick.c_str(), c->name.c_str());
                                return MOD_RES_DENY;
index 2b301f6c5af06e1fe8dd8f19f4e9b051074af2a8..bb78b60d12717e5e5387431ec31f4e3996fba608 100644 (file)
@@ -54,7 +54,7 @@ class ModuleNoKicks : public Module
 
        ModResult OnUserPreKick(User* source, Membership* memb, const std::string &reason) CXX11_OVERRIDE
        {
-               if (!memb->chan->GetExtBanStatus(source, 'Q').check(!memb->chan->IsModeSet('Q')))
+               if (!memb->chan->GetExtBanStatus(source, 'Q').check(!memb->chan->IsModeSet(nk)))
                {
                        // Can't kick with Q in place, not even opers with override, and founders
                        source->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :Can't kick user %s from channel (+Q set)",source->nick.c_str(), memb->chan->name.c_str(), memb->user->nick.c_str());
index 8981097beacd3747033ac5c3026c2e15bbf98c19..c9a9116e2d8311982b8a7f54f1e36f05df5f9728 100644 (file)
@@ -73,7 +73,7 @@ class ModuleNoNickChange : public Module
                        if (override && user->IsOper())
                                continue;
 
-                       if (!curr->GetExtBanStatus(user, 'N').check(!curr->IsModeSet('N')))
+                       if (!curr->GetExtBanStatus(user, 'N').check(!curr->IsModeSet(nn)))
                        {
                                user->WriteNumeric(ERR_CANTCHANGENICK, "%s :Can't change nickname while on %s (+N is set)",
                                        user->nick.c_str(), curr->name.c_str());
index 2063628451fb227def141a51e988cc09bf860caa..c7537295346e1448dfe8f4c22a80c0443f1405c5 100644 (file)
@@ -57,7 +57,7 @@ class ModuleNoNotice : public Module
                if ((msgtype == MSG_NOTICE) && (target_type == TYPE_CHANNEL) && (IS_LOCAL(user)))
                {
                        Channel* c = (Channel*)dest;
-                       if (!c->GetExtBanStatus(user, 'T').check(!c->IsModeSet('T')))
+                       if (!c->GetExtBanStatus(user, 'T').check(!c->IsModeSet(nt)))
                        {
                                res = ServerInstance->OnCheckExemption(user,c,"nonotice");
                                if (res == MOD_RES_ALLOW)
index b3fc91e906906131e7c67a451fd3491401ba699e..8e46f923f800178f15f81e5fab524c1c2229db7c 100644 (file)
@@ -51,7 +51,7 @@ class ModuleOperChans : public Module
 
        ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE
        {
-               if (chan && chan->IsModeSet('O') && !user->IsOper())
+               if (chan && chan->IsModeSet(oc) && !user->IsOper())
                {
                        user->WriteNumeric(ERR_CANTJOINOPERSONLY, "%s %s :Only IRC operators may join %s (+O is set)",
                                user->nick.c_str(), chan->name.c_str(), chan->name.c_str());
index 0b4d96c0f421b6b4b938513cb6746fa0bdbe0bbe..cfb4fef275d45586abb0bce326f4cf5ec22f2396 100644 (file)
 
 /* $ModDesc: Provides support for channel mode +P to provide permanent channels */
 
+
+/** Handles the +P channel mode
+ */
+class PermChannel : public ModeHandler
+{
+ public:
+       PermChannel(Module* Creator)
+               : ModeHandler(Creator, "permanent", 'P', PARAM_NONE, MODETYPE_CHANNEL)
+       {
+               oper = true;
+       }
+
+       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& parameter, bool adding)
+       {
+               if (adding == channel->IsModeSet(this))
+                       return MODEACTION_DENY;
+
+               channel->SetMode(this, adding);
+               if (!adding)
+                       channel->CheckDestroy();
+
+               return MODEACTION_ALLOW;
+       }
+};
+
 // Not in a class due to circular dependancy hell.
 static std::string permchannelsconf;
-static bool WriteDatabase()
+static bool WriteDatabase(PermChannel& permchanmode)
 {
        /*
         * We need to perform an atomic write so as not to fuck things up.
@@ -52,7 +77,7 @@ static bool WriteDatabase()
        for (chan_hash::const_iterator i = ServerInstance->chanlist->begin(); i != ServerInstance->chanlist->end(); i++)
        {
                Channel* chan = i->second;
-               if (!chan->IsModeSet('P'))
+               if (!chan->IsModeSet(permchanmode))
                        continue;
 
                stream << "<permchannels channel=\"" << ServerConfig::Escape(chan->name)
@@ -88,38 +113,6 @@ static bool WriteDatabase()
        return true;
 }
 
-
-/** Handles the +P channel mode
- */
-class PermChannel : public ModeHandler
-{
- public:
-       PermChannel(Module* Creator) : ModeHandler(Creator, "permanent", 'P', PARAM_NONE, MODETYPE_CHANNEL) { oper = true; }
-
-       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
-       {
-               if (adding)
-               {
-                       if (!channel->IsModeSet('P'))
-                       {
-                               channel->SetMode('P',true);
-                               return MODEACTION_ALLOW;
-                       }
-               }
-               else
-               {
-                       if (channel->IsModeSet('P'))
-                       {
-                               channel->SetMode(this,false);
-                               channel->CheckDestroy();
-                               return MODEACTION_ALLOW;
-                       }
-               }
-
-               return MODEACTION_DENY;
-       }
-};
-
 class ModulePermanentChannels : public Module
 {
        PermChannel p;
@@ -238,7 +231,7 @@ public:
 
        ModResult OnRawMode(User* user, Channel* chan, const char mode, const std::string &param, bool adding, int pcnt) CXX11_OVERRIDE
        {
-               if (chan && (chan->IsModeSet('P') || mode == 'P'))
+               if (chan && (chan->IsModeSet(p) || mode == p.GetModeChar()))
                        dirty = true;
 
                return MOD_RES_PASSTHRU;
@@ -246,14 +239,14 @@ public:
 
        void OnPostTopicChange(User*, Channel *c, const std::string&) CXX11_OVERRIDE
        {
-               if (c->IsModeSet('P'))
+               if (c->IsModeSet(p))
                        dirty = true;
        }
 
        void OnBackgroundTimer(time_t) CXX11_OVERRIDE
        {
                if (dirty)
-                       WriteDatabase();
+                       WriteDatabase(p);
                dirty = false;
        }
 
@@ -296,7 +289,7 @@ public:
 
        ModResult OnChannelPreDelete(Channel *c) CXX11_OVERRIDE
        {
-               if (c->IsModeSet('P'))
+               if (c->IsModeSet(p))
                        return MOD_RES_DENY;
 
                return MOD_RES_PASSTHRU;
index e40339fa6218b4a63665a1068712ebf45ac1503d..5e78ccef2f405f47233290c76e170fc9845d9d7c 100644 (file)
@@ -64,7 +64,7 @@ class Redirect : public ModeHandler
                                }
                        }
 
-                       if (channel->GetModeParameter('L') == parameter)
+                       if (channel->GetModeParameter(this) == parameter)
                                return MODEACTION_DENY;
                        /*
                         * We used to do some checking for circular +L here, but there is no real need for this any more especially as we
@@ -74,7 +74,7 @@ class Redirect : public ModeHandler
                }
                else
                {
-                       if (channel->IsModeSet('L'))
+                       if (channel->IsModeSet(this))
                        {
                                return MODEACTION_ALLOW;
                        }
@@ -95,15 +95,14 @@ class AntiRedirect : public SimpleUserModeHandler
 
 class ModuleRedirect : public Module
 {
-
        Redirect re;
        AntiRedirect re_u;
        bool UseUsermode;
 
  public:
-
        ModuleRedirect()
-               : re(this), re_u(this)
+               : re(this)
+               , re_u(this)
        {
        }
 
@@ -133,22 +132,22 @@ class ModuleRedirect : public Module
        {
                if (chan)
                {
-                       if (chan->IsModeSet('L') && chan->IsModeSet('l'))
+                       if (chan->IsModeSet(re) && chan->IsModeSet('l'))
                        {
                                if (chan->GetUserCounter() >= ConvToInt(chan->GetModeParameter('l')))
                                {
-                                       std::string channel = chan->GetModeParameter('L');
+                                       std::string channel = chan->GetModeParameter(&re);
 
                                        /* sometimes broken ulines can make circular or chained +L, avoid this */
                                        Channel* destchan = ServerInstance->FindChan(channel);
-                                       if (destchan && destchan->IsModeSet('L'))
+                                       if (destchan && destchan->IsModeSet(re))
                                        {
                                                user->WriteNumeric(470, "%s %s * :You may not join this channel. A redirect is set, but you may not be redirected as it is a circular loop.", user->nick.c_str(), cname.c_str());
                                                return MOD_RES_DENY;
                                        }
                                        /* We check the bool value here to make sure we have it enabled, if we don't then
                                                usermode +L might be assigned to something else. */
-                                       if (UseUsermode && user->IsModeSet('L'))
+                                       if (UseUsermode && user->IsModeSet(re_u))
                                        {
                                                user->WriteNumeric(470, "%s %s %s :Force redirection stopped.", user->nick.c_str(), cname.c_str(), channel.c_str());
                                                return MOD_RES_DENY;
index f5e6433bfb02043d781bad3dea37e083f8d0bac0..e4345535e656c30b1292cc61738651646c13dd8f 100644 (file)
@@ -67,7 +67,7 @@ class CommandRMode : public Command
 
                if (!mh->IsListMode())
                {
-                       if (chan->IsModeSet(modeletter))
+                       if (chan->IsModeSet(mh))
                                modestack.Push(modeletter);
                }
                else if (((prefixrank = mh->GetPrefixRank()) && (prefixchar = mh->GetPrefix())))
index 123132ca988e23663bdd4f20957dce697f5c935b..cbd9e536cbb53ab8d327f03cf6396173eb9032f3 100644 (file)
@@ -40,9 +40,9 @@ class Channel_r : public ModeHandler
                if (!IS_LOCAL(source))
                {
                        // Only change the mode if it's not redundant
-                       if ((adding != channel->IsModeSet('r')))
+                       if ((adding != channel->IsModeSet(this)))
                        {
-                               channel->SetMode('r',adding);
+                               channel->SetMode(this, adding);
                                return MODEACTION_ALLOW;
                        }
                }
@@ -66,9 +66,9 @@ class User_r : public ModeHandler
        {
                if (!IS_LOCAL(source))
                {
-                       if ((adding != dest->IsModeSet('r')))
+                       if ((adding != dest->IsModeSet(this)))
                        {
-                               dest->SetMode('r',adding);
+                               dest->SetMode(this, adding);
                                return MODEACTION_ALLOW;
                        }
                }
@@ -144,7 +144,7 @@ class ModuleServicesAccount : public Module
                        ServerInstance->SendWhoisLine(source, dest, 330, "%s %s %s :is logged in as", source->nick.c_str(), dest->nick.c_str(), account->c_str());
                }
 
-               if (dest->IsModeSet('r'))
+               if (dest->IsModeSet(m5))
                {
                        /* user is registered */
                        ServerInstance->SendWhoisLine(source, dest, 307, "%s %s :is a registered nick", source->nick.c_str(), dest->nick.c_str());
@@ -154,7 +154,7 @@ class ModuleServicesAccount : public Module
        void OnUserPostNick(User* user, const std::string &oldnick) CXX11_OVERRIDE
        {
                /* On nickchange, if they have +r, remove it */
-               if (user->IsModeSet('r') && assign(user->nick) != oldnick)
+               if (user->IsModeSet(m5) && assign(user->nick) != oldnick)
                {
                        std::vector<std::string> modechange;
                        modechange.push_back(user->nick);
@@ -176,7 +176,7 @@ class ModuleServicesAccount : public Module
                        Channel* c = (Channel*)dest;
                        ModResult res = ServerInstance->OnCheckExemption(user,c,"regmoderated");
 
-                       if (c->IsModeSet('M') && !is_registered && res != MOD_RES_ALLOW)
+                       if (c->IsModeSet(m2) && !is_registered && res != MOD_RES_ALLOW)
                        {
                                // user messaging a +M channel and is not registered
                                user->WriteNumeric(477, user->nick+" "+c->name+" :You need to be identified to a registered account to message this channel");
@@ -187,7 +187,7 @@ class ModuleServicesAccount : public Module
                {
                        User* u = (User*)dest;
 
-                       if (u->IsModeSet('R') && !is_registered)
+                       if (u->IsModeSet(m3) && !is_registered)
                        {
                                // user messaging a +R user and is not registered
                                user->WriteNumeric(477, ""+ user->nick +" "+ u->nick +" :You need to be identified to a registered account to message this user");
@@ -241,7 +241,7 @@ class ModuleServicesAccount : public Module
 
                if (chan)
                {
-                       if (chan->IsModeSet('R'))
+                       if (chan->IsModeSet(m1))
                        {
                                if (!is_registered)
                                {
index 82ad0920bb143a61cd95a23e9f8554c38c93a3c1..32dcc21c0bb56b5427e16b77d722d6d5b7488079 100644 (file)
@@ -67,7 +67,7 @@ class ModuleServProtectMode : public Module
 
        void OnWhois(User* user, User* dest) CXX11_OVERRIDE
        {
-               if (dest->IsModeSet('k'))
+               if (dest->IsModeSet(bm))
                {
                        ServerInstance->SendWhoisLine(user, dest, 310, user->nick+" "+dest->nick+" :is a Network Service on "+ServerInstance->Config->Network);
                }
@@ -90,7 +90,7 @@ class ModuleServProtectMode : public Module
                                 * 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') && memb && memb->modes.find(mode) != std::string::npos)
+                               if (u->IsModeSet(bm) && 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());
@@ -107,7 +107,7 @@ class ModuleServProtectMode : public Module
                if (src == NULL)
                        return MOD_RES_PASSTHRU;
 
-               if (dst->IsModeSet('k'))
+               if (dst->IsModeSet(bm))
                {
                        src->WriteNumeric(485, "%s :You are not permitted to kill %s services!", src->nick.c_str(), ServerInstance->Config->Network.c_str());
                        ServerInstance->SNO->WriteGlobalSno('a', src->nick+" tried to kill service "+dst->nick+" ("+reason+")");
@@ -118,7 +118,7 @@ class ModuleServProtectMode : public Module
 
        ModResult OnUserPreKick(User *src, Membership* memb, const std::string &reason) CXX11_OVERRIDE
        {
-               if (memb->user->IsModeSet('k'))
+               if (memb->user->IsModeSet(bm))
                {
                        src->WriteNumeric(484, "%s %s :You are not permitted to kick services",
                                src->nick.c_str(), memb->chan->name.c_str());
@@ -130,7 +130,7 @@ class ModuleServProtectMode : public Module
 
        ModResult OnWhoisLine(User* src, User* dst, int &numeric, std::string &text) CXX11_OVERRIDE
        {
-               return ((src != dst) && (numeric == 319) && dst->IsModeSet('k')) ? MOD_RES_DENY : MOD_RES_PASSTHRU;
+               return ((src != dst) && (numeric == 319) && dst->IsModeSet(bm)) ? MOD_RES_DENY : MOD_RES_PASSTHRU;
        }
 };
 
index 57d496f1f363651990a6c0d919de4310e32dd8e7..29de4ee1ce5ada9d44d4a01aa8154750968ed552 100644 (file)
@@ -105,7 +105,7 @@ class ModuleShowwhois : public Module
 
        void OnWhois(User* source, User* dest) CXX11_OVERRIDE
        {
-               if (!dest->IsModeSet('W') || source == dest)
+               if (!dest->IsModeSet(*sw) || source == dest)
                        return;
 
                if (!ShowWhoisFromOpers && source->IsOper())
index 4bcc2d9b2bae7690faa783032c747ef0e5bcac47..2eb7f90e4cfeacaafa61c2b513c42c55a6679b0a 100644 (file)
@@ -132,7 +132,7 @@ CmdResult CommandUID::Handle(const parameterlist &params, User* serversrc)
                }
                else
                        mh->OnModeChange(_new, _new, NULL, empty, true);
-               _new->SetMode(*v, true);
+               _new->SetMode(mh, true);
        }
 
        _new->SetClientIP(params[6].c_str());
index 65933cc141126a265f21a2c1bbcbfa987669fe5b..40398b3acc75879f3f8b9c8c348559c9a9b850f6 100644 (file)
@@ -43,7 +43,7 @@ class SSLMode : public ModeHandler
        {
                if (adding)
                {
-                       if (!channel->IsModeSet('z'))
+                       if (!channel->IsModeSet(this))
                        {
                                if (IS_LOCAL(source))
                                {
@@ -61,7 +61,7 @@ class SSLMode : public ModeHandler
                                                }
                                        }
                                }
-                               channel->SetMode('z',true);
+                               channel->SetMode(this, true);
                                return MODEACTION_ALLOW;
                        }
                        else
@@ -71,9 +71,9 @@ class SSLMode : public ModeHandler
                }
                else
                {
-                       if (channel->IsModeSet('z'))
+                       if (channel->IsModeSet(this))
                        {
-                               channel->SetMode('z',false);
+                               channel->SetMode(this, false);
                                return MODEACTION_ALLOW;
                        }
 
@@ -102,7 +102,7 @@ class ModuleSSLModes : public Module
 
        ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE
        {
-               if(chan && chan->IsModeSet('z'))
+               if(chan && chan->IsModeSet(sslm))
                {
                        if (!sslm.API)
                                return MOD_RES_DENY;
index b7e26afd5bbf3d97119786062f5193cad7f2ec69..d216d73b24d9209a2eb091de08af8752b2650332 100644 (file)
@@ -72,7 +72,7 @@ class ModuleStripColor : public Module
                if (target_type == TYPE_USER)
                {
                        User* t = (User*)dest;
-                       active = t->IsModeSet('S');
+                       active = t->IsModeSet(usc);
                }
                else if (target_type == TYPE_CHANNEL)
                {
@@ -82,7 +82,7 @@ class ModuleStripColor : public Module
                        if (res == MOD_RES_ALLOW)
                                return MOD_RES_PASSTHRU;
 
-                       active = !t->GetExtBanStatus(user, 'S').check(!t->IsModeSet('S'));
+                       active = !t->GetExtBanStatus(user, 'S').check(!t->IsModeSet(csc));
                }
 
                if (active)