summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-03-06 19:36:52 -0500
committerAdam <Adam@anope.org>2011-03-06 19:36:52 -0500
commit093b3d258e7b14d2aa057ca6113de034b5063efe (patch)
tree3c169ecf5f2a8b299df32072834e040cf1d0966b
parent48e6221cf0f2592b85ef220876435b966b6a49ed (diff)
Change the mode name code to use Flags names in preparation for extban support
-rw-r--r--include/modes.h90
-rw-r--r--modules/core/cs_mode.cpp9
-rw-r--r--modules/core/db_plain.cpp6
-rw-r--r--modules/extra/db_mysql.cpp4
-rw-r--r--modules/protocol/bahamut.cpp48
-rw-r--r--modules/protocol/inspircd-ts6.h6
-rw-r--r--modules/protocol/inspircd11.cpp78
-rw-r--r--modules/protocol/inspircd12.cpp114
-rw-r--r--modules/protocol/inspircd20.cpp118
-rw-r--r--modules/protocol/ngircd.cpp40
-rw-r--r--modules/protocol/plexus.cpp76
-rw-r--r--modules/protocol/ratbox.cpp28
-rw-r--r--modules/protocol/unreal32.cpp118
-rw-r--r--src/channels.cpp6
-rw-r--r--src/modes.cpp219
-rw-r--r--src/regchannel.cpp53
16 files changed, 505 insertions, 508 deletions
diff --git a/include/modes.h b/include/modes.h
index 868feab81..e423b370e 100644
--- a/include/modes.h
+++ b/include/modes.h
@@ -31,7 +31,7 @@ const Anope::string UserModeNameStrings[] = {
"UMODE_REGPRIV", "UMODE_PROTECTED", "UMODE_NO_CTCP", "UMODE_WEBTV", "UMODE_WEBIRC", "UMODE_WHOIS", "UMODE_ADMIN", "UMODE_DEAF",
"UMODE_GLOBOPS", "UMODE_HELPOP", "UMODE_INVIS", "UMODE_OPER", "UMODE_PRIV", "UMODE_GOD", "UMODE_REGISTERED",
"UMODE_SNOMASK", "UMODE_VHOST", "UMODE_WALLOPS", "UMODE_CLOAK", "UMODE_SSL", "UMODE_SOFTCALLERID", "UMODE_CALLERID",
- "UMODE_COMMONCHANS", "UMODE_HIDDEN", "UMODE_STRIPCOLOR", "UMODE_INVISIBLE_OPER",
+ "UMODE_COMMONCHANS", "UMODE_HIDDEN", "UMODE_STRIPCOLOR", "UMODE_INVISIBLE_OPER", "UMODE_RESTRICTED"
""
};
@@ -65,20 +65,20 @@ const Anope::string ChannelModeNameStrings[] = {
"CMODE_BEGIN",
/* Channel modes */
- "CMODE_BLOCKCOLOR", " CMODE_FLOOD", " CMODE_INVITE", " CMODE_KEY", " CMODE_LIMIT", " CMODE_MODERATED", " CMODE_NOEXTERNAL",
- "CMODE_PRIVATE", " CMODE_REGISTERED", " CMODE_SECRET", " CMODE_TOPIC", " CMODE_AUDITORIUM", " CMODE_SSL", " CMODE_ADMINONLY",
- "CMODE_NOCTCP", " CMODE_FILTER", " CMODE_NOKNOCK", " CMODE_REDIRECT", " CMODE_REGMODERATED", " CMODE_NONICK", " CMODE_OPERONLY",
- "CMODE_NOKICK", " CMODE_REGISTEREDONLY", " CMODE_STRIPCOLOR", " CMODE_NONOTICE", " CMODE_NOINVITE", " CMODE_ALLINVITE",
- "CMODE_BLOCKCAPS", " CMODE_PERM", " CMODE_NICKFLOOD", " CMODE_JOINFLOOD", " CMODE_DELAYEDJOIN", " CMODE_NOREJOIN",
+ "CMODE_BLOCKCOLOR", "CMODE_FLOOD", "CMODE_INVITE", "CMODE_KEY", "CMODE_LIMIT", "CMODE_MODERATED", "CMODE_NOEXTERNAL",
+ "CMODE_PRIVATE", "CMODE_REGISTERED", "CMODE_SECRET", "CMODE_TOPIC", "CMODE_AUDITORIUM", "CMODE_SSL", "CMODE_ADMINONLY",
+ "CMODE_NOCTCP", "CMODE_FILTER", "CMODE_NOKNOCK", "CMODE_REDIRECT", "CMODE_REGMODERATED", "CMODE_NONICK", "CMODE_OPERONLY",
+ "CMODE_NOKICK", "CMODE_REGISTEREDONLY", "CMODE_STRIPCOLOR", "CMODE_NONOTICE", "CMODE_NOINVITE", "CMODE_ALLINVITE",
+ "CMODE_BLOCKCAPS", "CMODE_PERM", "CMODE_NICKFLOOD", "CMODE_JOINFLOOD", "CMODE_DELAYEDJOIN", "CMODE_NOREJOIN",
"CMODE_BANDWIDTH",
/* b/e/I */
- "CMODE_BAN", " CMODE_EXCEPT",
+ "CMODE_BAN", "CMODE_EXCEPT",
"CMODE_INVITEOVERRIDE",
/* v/h/o/a/q */
- "CMODE_VOICE", " CMODE_HALFOP", " CMODE_OP",
- "CMODE_PROTECT", " CMODE_OWNER",
+ "CMODE_VOICE", "CMODE_HALFOP", "CMODE_OP",
+ "CMODE_PROTECT", "CMODE_OWNER",
""
};
@@ -115,8 +115,6 @@ class CoreExport Mode : public Base
public:
/* Class of mode this is */
ModeClass Class;
- /* The mode name, as a string */
- Anope::string NameAsString;
/* Mode char for this */
char ModeChar;
/* Type of mode this is */
@@ -124,11 +122,10 @@ class CoreExport Mode : public Base
/** Default constructor
* @param mClass The type of mode this is
- * @param mNameAsString The mode name as a string
* @param modeChar The mode char
* @param type The mode type
*/
- Mode(ModeClass mClass, const Anope::string &mNameAsString, char modeChar, ModeType type);
+ Mode(ModeClass mClass, char modeChar, ModeType type);
/** Default destructor
*/
@@ -145,14 +142,17 @@ class CoreExport UserMode : public Mode
/** Default constructor
* @param nName The mode name
- * @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
- UserMode(UserModeName mName, const Anope::string &mNameAsString, char modeChar);
+ UserMode(UserModeName mName, char modeChar);
/** Default destructor
*/
virtual ~UserMode();
+
+ /** Returns the mode name as a string
+ */
+ const Anope::string NameAsString();
};
class CoreExport UserModeParam : public UserMode
@@ -160,10 +160,9 @@ class CoreExport UserModeParam : public UserMode
public:
/** Default constructor
* @param mName The mode name
- * @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
- UserModeParam(UserModeName mName, const Anope::string &mNameAsString, char modeChar);
+ UserModeParam(UserModeName mName, char modeChar);
/** Check if the param is valid
* @param value The param
@@ -182,10 +181,9 @@ class CoreExport ChannelMode : public Mode
/** Default constructor
* @param mName The mode name
- * @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
- ChannelMode(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
+ ChannelMode(ChannelModeName mName, char modeChar);
/** Default destructor
*/
@@ -196,6 +194,10 @@ class CoreExport ChannelMode : public Mode
* @param u The user, or NULL
*/
bool CanSet(User *u) const;
+
+ /** Returns the mode name as a string
+ */
+ const Anope::string NameAsString();
};
@@ -206,10 +208,9 @@ class CoreExport ChannelModeList : public ChannelMode
public:
/** Default constructor
* @param mName The mode name
- * @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
- ChannelModeList(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
+ ChannelModeList(ChannelModeName mName, char modeChar);
/** Default destructor
*/
@@ -242,11 +243,10 @@ class CoreExport ChannelModeParam : public ChannelMode
public:
/** Default constructor
* @param mName The mode name
- * @param mNameAsString The mode name as a string
* @param modeChar The mode char
* @param MinusArg true if this mode sends no arg when unsetting
*/
- ChannelModeParam(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, bool MinusArg = false);
+ ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false);
/** Default destructor
*/
@@ -272,11 +272,10 @@ class CoreExport ChannelModeStatus : public ChannelMode
/** Default constructor
* @param mName The mode name
- * @param mNameAsString The mode name as a string
* @param modeChar The mode char
* @param mSymbol The symbol for the mode, eg @ % +
*/
- ChannelModeStatus(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, char mSymbol);
+ ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol);
/** Default destructor
*/
@@ -288,7 +287,7 @@ class CoreExport ChannelModeStatus : public ChannelMode
class CoreExport ChannelModeBan : public ChannelModeList
{
public:
- ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, "CMODE_BAN", modeChar) { }
+ ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, modeChar) { }
void OnAdd(Channel *chan, const Anope::string &mask);
@@ -300,7 +299,7 @@ class CoreExport ChannelModeBan : public ChannelModeList
class CoreExport ChannelModeExcept : public ChannelModeList
{
public:
- ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, "CMODE_EXCEPT", modeChar) { }
+ ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, modeChar) { }
void OnAdd(Channel *chan, const Anope::string &mask);
@@ -312,7 +311,7 @@ class CoreExport ChannelModeExcept : public ChannelModeList
class CoreExport ChannelModeInvex : public ChannelModeList
{
public:
- ChannelModeInvex(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, "CMODE_INVITEOVERRIDE", modeChar) { }
+ ChannelModeInvex(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, modeChar) { }
void OnAdd(Channel *chan, const Anope::string &mask);
@@ -325,7 +324,7 @@ class CoreExport ChannelModeInvex : public ChannelModeList
class CoreExport ChannelModeKey : public ChannelModeParam
{
public:
- ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, "CMODE_KEY", modeChar) { }
+ ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { }
bool IsValid(const Anope::string &value) const;
};
@@ -335,7 +334,7 @@ class CoreExport ChannelModeKey : public ChannelModeParam
class ChannelModeFlood : public ChannelModeParam
{
public:
- ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, "CMODE_FLOOD", modeChar, minusNoArg) { }
+ ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, modeChar, minusNoArg) { }
bool IsValid(const Anope::string &value) const;
};
@@ -346,7 +345,7 @@ class ChannelModeFlood : public ChannelModeParam
class CoreExport ChannelModeAdmin : public ChannelMode
{
public:
- ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, "CMODE_ADMINONLY", modeChar) { }
+ ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
@@ -358,7 +357,7 @@ class CoreExport ChannelModeAdmin : public ChannelMode
class CoreExport ChannelModeOper : public ChannelMode
{
public:
- ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, "CMODE_OPERONLY", modeChar) { }
+ ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
@@ -370,7 +369,7 @@ class CoreExport ChannelModeOper : public ChannelMode
class CoreExport ChannelModeRegistered : public ChannelMode
{
public:
- ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, "CMODE_REGISTERED", modeChar) { }
+ ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { }
/* No one mlocks +r */
bool CanSet(User *u) const;
@@ -437,18 +436,9 @@ class CoreExport ModeManager
static void StackerAddInternal(BotInfo *bi, Base *Object, Mode *mode, bool Set, const Anope::string &Param, StackerType Type);
public:
- /* List of all modes Anope knows about */
- static std::map<Anope::string, Mode *> Modes;
-
- /* User modes */
- static std::map<char, UserMode *> UserModesByChar;
- static std::map<UserModeName, UserMode *> UserModesByName;
- /* Channel modes */
- static std::map<char, ChannelMode *> ChannelModesByChar;
- static std::map<ChannelModeName, ChannelMode *> ChannelModesByName;
- /* Although there are two different maps for UserModes and ChannelModes
- * the pointers in each are the same. This is used to increase efficiency.
- */
+ /* List of all modes Anope knows about */
+ static std::vector<ChannelMode *> ChannelModes;
+ static std::vector<UserMode *> UserModes;
/** Add a user mode to Anope
* @param um A UserMode or UserMode derived class
@@ -486,11 +476,17 @@ class CoreExport ModeManager
*/
static UserMode *FindUserModeByName(UserModeName Name);
- /** Find a mode by name
+ /** Find channel mode by string
+ * @param name The mode name
+ * @return The mode
+ */
+ static ChannelMode *FindChannelModeByString(const Anope::string &name);
+
+ /** Find user mode by string
* @param name The mode name
* @return The mode
*/
- static Mode *FindModeByName(const Anope::string &name);
+ static UserMode *FindUserModeByString(const Anope::string &name);
/** Gets the channel mode char for a symbol (eg + returns v)
* @param Value The symbol
diff --git a/modules/core/cs_mode.cpp b/modules/core/cs_mode.cpp
index 6399bdc35..4d3705845 100644
--- a/modules/core/cs_mode.cpp
+++ b/modules/core/cs_mode.cpp
@@ -164,16 +164,13 @@ class CommandCSMode : public Command
case '*':
if (adding == -1)
break;
- for (std::map<Anope::string, Mode *>::const_iterator it = ModeManager::Modes.begin(), it_end = ModeManager::Modes.end(); it != it_end; ++it)
+ for (unsigned j = 0; j < ModeManager::ChannelModes.size(); ++j)
{
- Mode *m = it->second;
- if (m->Class == MC_CHANNEL)
+ ChannelMode *cm = ModeManager::ChannelModes[j];
+ if (cm->CanSet(u))
{
- ChannelMode *cm = debug_cast<ChannelMode *>(m);
if (cm->Type == MODE_REGULAR || (!adding && cm->Type == MODE_PARAM))
{
- if (!cm->CanSet(u))
- continue;
if (adding)
ci->c->SetMode(NULL, cm);
else
diff --git a/modules/core/db_plain.cpp b/modules/core/db_plain.cpp
index 4dbf864de..44b5cbefa 100644
--- a/modules/core/db_plain.cpp
+++ b/modules/core/db_plain.cpp
@@ -848,7 +848,7 @@ class DBPlain : public Module
ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name);
if (!cm || cm->Type != MODE_REGULAR)
continue;
- db_buffer << " " << cm->NameAsString;
+ db_buffer << " " << cm->NameAsString();
}
}
}
@@ -870,7 +870,7 @@ class DBPlain : public Module
ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name);
if (!cm || cm->Type != MODE_REGULAR)
continue;
- db_buffer << " " << cm->NameAsString;
+ db_buffer << " " << cm->NameAsString();
}
}
}
@@ -895,7 +895,7 @@ class DBPlain : public Module
continue;
if (!ml.param.empty())
- db_buffer << "MD MLP" << (ml.set ? " " : "_OFF ") << cm->NameAsString << " " << ml.param << endl;
+ db_buffer << "MD MLP" << (ml.set ? " " : "_OFF ") << cm->NameAsString() << " " << ml.param << endl;
}
}
}
diff --git a/modules/extra/db_mysql.cpp b/modules/extra/db_mysql.cpp
index f6dce95d2..c328bbb9d 100644
--- a/modules/extra/db_mysql.cpp
+++ b/modules/extra/db_mysql.cpp
@@ -53,7 +53,7 @@ static Anope::string MakeMLock(ChannelInfo *ci, bool status)
ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name);
if (!cm || cm->Type != MODE_REGULAR)
continue;
- ret += " " + cm->NameAsString;
+ ret += " " + cm->NameAsString();
}
}
@@ -96,7 +96,7 @@ static Anope::string GetMLockParams(ChannelInfo *ci, bool onoff)
{
ChannelMode *cm = ModeManager::FindChannelModeByName(ml.name);
if (cm)
- ret += " " + cm->NameAsString + " " + ml.param;
+ ret += " " + cm->NameAsString() + " " + ml.param;
}
}
}
diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp
index 285fd316c..aabe2c904 100644
--- a/modules/protocol/bahamut.cpp
+++ b/modules/protocol/bahamut.cpp
@@ -163,9 +163,9 @@ class BahamutIRCdProto : public IRCDProto
{
send_cmd(user->nick, "SJOIN %ld %s", static_cast<long>(c->creation_time), c->name.c_str());
if (status)
- for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i)
- if (status->HasFlag(static_cast<ChannelModeName>(i)))
- c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false);
+ for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
+ if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
+ c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false);
}
void SendAkill(User *, const XLine *x)
@@ -551,38 +551,38 @@ class ProtoBahamut : public Module
void AddModes()
{
/* Add user modes */
- ModeManager::AddUserMode(new UserMode(UMODE_SERV_ADMIN, "UMODE_SERV_ADMIN", 'A'));
- ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, "UMODE_REGPRIV", 'R'));
- ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, "UMODE_ADMIN", 'a'));
- ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i'));
- ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o'));
- ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", 'r'));
- ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, "UMODE_SNOMASK", 's'));
- ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w'));
- ModeManager::AddUserMode(new UserMode(UMODE_DEAF, "UMODE_DEAF", 'd'));
+ ModeManager::AddUserMode(new UserMode(UMODE_SERV_ADMIN, 'A'));
+ ModeManager::AddUserMode(new UserMode(UMODE_REGPRIV, 'R'));
+ ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, 'a'));
+ ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i'));
+ ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o'));
+ ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'r'));
+ ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's'));
+ ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w'));
+ ModeManager::AddUserMode(new UserMode(UMODE_DEAF, 'd'));
/* b/e/I */
ModeManager::AddChannelMode(new ChannelModeBan('b'));
/* v/h/o/a/q */
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+'));
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@'));
/* Add channel modes */
- ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i'));
ModeManager::AddChannelMode(new ChannelModeFlood('f'));
ModeManager::AddChannelMode(new ChannelModeKey('k'));
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p'));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p'));
ModeManager::AddChannelMode(new ChannelModeRegistered('r'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, "CMODE_REGMODERATED", 'M'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, 'M'));
ModeManager::AddChannelMode(new ChannelModeOper('O'));
- ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R'));
}
public:
diff --git a/modules/protocol/inspircd-ts6.h b/modules/protocol/inspircd-ts6.h
index 427233738..952268184 100644
--- a/modules/protocol/inspircd-ts6.h
+++ b/modules/protocol/inspircd-ts6.h
@@ -113,9 +113,9 @@ class InspIRCdTS6Proto : public IRCDProto
* merge these modes with +nrt and other mlocked modes
*/
if (status)
- for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i)
- if (status->HasFlag(static_cast<ChannelModeName>(i)))
- c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false);
+ for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
+ if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
+ c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false);
}
/* UNSQLINE */
diff --git a/modules/protocol/inspircd11.cpp b/modules/protocol/inspircd11.cpp
index e4ccd90b6..9d72eef6c 100644
--- a/modules/protocol/inspircd11.cpp
+++ b/modules/protocol/inspircd11.cpp
@@ -158,9 +158,9 @@ class InspIRCdProto : public IRCDProto
{
send_cmd(user->nick, "JOIN %s %ld", c->name.c_str(), static_cast<long>(c->creation_time));
if (status)
- for (size_t i = CMODE_BEGIN + 1; i != CMODE_END; ++i)
- if (status->HasFlag(static_cast<ChannelModeName>(i)))
- c->SetMode(user, static_cast<ChannelModeName>(i), user->nick, false);
+ for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
+ if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
+ c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false);
}
/* UNSQLINE */
@@ -383,7 +383,7 @@ class InspircdIRCdMessage : public IRCdMessage
ModeManager::AddChannelMode(new ChannelModeInvex('I'));
continue;
default:
- ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t], modebuf[t]));
+ ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t]));
}
}
@@ -396,7 +396,7 @@ class InspircdIRCdMessage : public IRCdMessage
ModeManager::AddChannelMode(new ChannelModeKey('k'));
continue;
default:
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t]));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t]));
}
}
@@ -409,13 +409,13 @@ class InspircdIRCdMessage : public IRCdMessage
ModeManager::AddChannelMode(new ChannelModeFlood('f'));
continue;
case 'l':
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l', true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l', true));
continue;
case 'L':
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, "CMODE_REDIRECT", 'L', true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, 'L', true));
continue;
default:
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t], true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], true));
}
}
@@ -425,67 +425,67 @@ class InspircdIRCdMessage : public IRCdMessage
switch (modebuf[t])
{
case 'i':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i'));
continue;
case 'm':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm'));
continue;
case 'n':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, "CMODE_NOEXTERNAL", 'n'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n'));
continue;
case 'p':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, "CMODE_PRIVATE", 'p'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_PRIVATE, 'p'));
continue;
case 's':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, "CMODE_SECRET", 's'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's'));
continue;
case 't':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", 't'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't'));
continue;
case 'r':
ModeManager::AddChannelMode(new ChannelModeRegistered('r'));
continue;
case 'c':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c'));
continue;
case 'u':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, "CMODE_AUDITORIUM", 'u'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_AUDITORIUM, 'u'));
continue;
case 'z':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, "CMODE_SSL", 'z'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z'));
continue;
case 'A':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, "CMODE_ALLINVITE", 'A'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, 'A'));
continue;
case 'C':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, "CMODE_NOCTCP", 'C'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, 'C'));
continue;
case 'G':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, "CMODE_FILTER", 'G'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, 'G'));
continue;
case 'K':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, "CMODE_NOKNOCK", 'K'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, 'K'));
continue;
case 'N':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, "CMODE_NONICK", 'N'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, 'N'));
continue;
case 'O':
ModeManager::AddChannelMode(new ChannelModeOper('O'));
continue;
case 'Q':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, "CMODE_NOKICK", 'Q'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, 'Q'));
continue;
case 'R':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R'));
continue;
case 'S':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, "CMODE_STRIPCOLOR", 'S'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, 'S'));
continue;
case 'V':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOINVITE, "CMODE_NOINVITE", 'V'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOINVITE, 'V'));
continue;
default:
- ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t], modebuf[t]));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_END, modebuf[t]));
}
}
}
@@ -499,19 +499,19 @@ class InspircdIRCdMessage : public IRCdMessage
switch (modes[t])
{
case 'q':
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", 'q', '~'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '~'));
continue;
case 'a':
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, "CMODE_PROTECT", 'a', '&'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT, 'a', '&'));
continue;
case 'o':
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, "CMODE_OP", 'o', '@'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@'));
continue;
case 'h':
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, "CMODE_HALFOP", 'h', '%'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_HALFOP, 'h', '%'));
continue;
case 'v':
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", 'v', '+'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+'));
continue;
}
}
@@ -868,13 +868,13 @@ class ProtoInspIRCd : public Module
void AddModes()
{
- ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, "UMODE_CALLERID", 'g'));
- ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, "UMODE_HELPOP", 'h'));
- ModeManager::AddUserMode(new UserMode(UMODE_INVIS, "UMODE_INVIS", 'i'));
- ModeManager::AddUserMode(new UserMode(UMODE_OPER, "UMODE_OPER", 'o'));
- ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, "UMODE_REGISTERED", 'r'));
- ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, "UMODE_WALLOPS", 'w'));
- ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, "UMODE_CLOAK", 'x'));
+ ModeManager::AddUserMode(new UserMode(UMODE_CALLERID, 'g'));
+ ModeManager::AddUserMode(new UserMode(UMODE_HELPOP, 'h'));
+ ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i'));
+ ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o'));
+ ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'r'));
+ ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w'));
+ ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
}
public:
diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp
index f89ef2dc9..5bdae4b7b 100644
--- a/modules/protocol/inspircd12.cpp
+++ b/modules/protocol/inspircd12.cpp
@@ -398,13 +398,13 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage
continue;
/* InspIRCd sends q and a here if they have no prefixes */
case 'q':
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, "CMODE_OWNER", 'q', '@'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OWNER, 'q', '@'));
continue;
case 'a':
- ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT , "CMODE_PROTECT", 'a', '@'));
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_PROTECT , 'a', '@'));
continue;
default:
- ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t], modebuf[t]));
+ ModeManager::AddChannelMode(new ChannelModeList(CMODE_END, modebuf[t]));
}
}
@@ -417,7 +417,7 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage
ModeManager::AddChannelMode(new ChannelModeKey('k'));
continue;
default:
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t]));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t]));
}
}
@@ -427,25 +427,25 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage
switch (modebuf[t])
{
case 'F':
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NICKFLOOD, "CMODE_NICKFLOOD", 'F', true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NICKFLOOD, 'F', true));
continue;
case 'J':
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NOREJOIN, "CMODE_NOREJOIN", 'J', true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_NOREJOIN, 'J', true));
continue;
case 'L':
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, "CMODE_REDIRECT", 'L', true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_REDIRECT, 'L', true));
continue;
case 'f':
ModeManager::AddChannelMode(new ChannelModeFlood('f', true));
continue;
case 'j':
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, "CMODE_JOINFLOOD", 'j', true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, 'j', true));
continue;
case 'l':
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, "CMODE_LIMIT", 'l', true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l', true));
continue;
default:
- ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], modebuf[t], true));
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_END, modebuf[t], true));
}
}
@@ -455,79 +455,79 @@ class Inspircd12IRCdMessage : public InspircdIRCdMessage
switch (modebuf[t])
{
case 'A':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, "CMODE_ALLINVITE", 'A'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_ALLINVITE, 'A'));
continue;
case 'B':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCAPS, "CMODE_BLOCKCAPS", 'B'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCAPS, 'B'));
continue;
case 'C':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, "CMODE_NOCTCP", 'C'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOCTCP, 'C'));
continue;
case 'D':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_DELAYEDJOIN, "CMODE_DELAYEDJOIN", 'D'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_DELAYEDJOIN, 'D'));
continue;
case 'G':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, "CMODE_FILTER", 'G'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_FILTER, 'G'));
continue;
case 'K':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, "CMODE_NOKNOCK", 'K'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKNOCK, 'K'));
continue;
case 'M':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, "CMODE_REGMODERATED", 'M'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_REGMODERATED, 'M'));
continue;
case 'N':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, "CMODE_NONICK", 'N'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NONICK, 'N'));
continue;
case 'O':
ModeManager::AddChannelMode(new ChannelModeOper('O'));
continue;
case 'P':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, "CMODE_PERM", 'P'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P'));
continue;
case 'Q':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, "CMODE_NOKICK", 'Q'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOKICK, 'Q'));
continue;
case 'R':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, "CMODE_REGISTEREDONLY", 'R'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R'));
continue;
case 'S':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, "CMODE_STRIPCOLOR", 'S'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_STRIPCOLOR, 'S'));
continue;
case 'T':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, "CMODE_NONOTICE", 'T'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NONOTICE, 'T'));
continue;
case 'c':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c'));
continue;
case 'i':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, "CMODE_INVITE", 'i'));
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i'));
continue;
case 'm':
- ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, "CMODE_MODERATED", 'm'));