summaryrefslogtreecommitdiff
path: root/src/modes.cpp
diff options
context:
space:
mode:
authorAdam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864>2010-02-12 19:51:16 +0000
committerAdam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864>2010-02-12 19:51:16 +0000
commit84ecd1866c69d63067804c2baac564118dfdf306 (patch)
treec3aab21b9ed987c7e39d4865708e650e715d9741 /src/modes.cpp
parent2eb2cb7650e78612d8096b13f7cf075b1ec82a07 (diff)
Added generic support for unknown modes told to Anope at runtime by the IRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2790 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src/modes.cpp')
-rw-r--r--src/modes.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/modes.cpp b/src/modes.cpp
index fa3a3fc1b..b1cf23ed2 100644
--- a/src/modes.cpp
+++ b/src/modes.cpp
@@ -28,6 +28,8 @@ std::map<ChannelModeName, ChannelMode *> ModeManager::ChannelModesByName;
/* List of all modes Anope knows about */
std::list<Mode *> ModeManager::Modes;
+/* Number of generic modes we support */
+unsigned GenericChannelModes = 0, GenericUserModes = 0;
/* Default mlocked modes on */
std::bitset<128> DefMLockOn;
/* Default mlocked modes off */
@@ -617,6 +619,11 @@ bool ModeManager::AddUserMode(UserMode *um)
{
if (ModeManager::UserModesByChar.insert(std::make_pair(um->ModeChar, um)).second)
{
+ if (um->Name == UMODE_END)
+ {
+ um->Name = static_cast<UserModeName>(UMODE_END + ++GenericUserModes);
+ Alog() << "ModeManager: Added generic support for user mode " << um->ModeChar;
+ }
ModeManager::UserModesByName.insert(std::make_pair(um->Name, um)).second;
ModeManager::Modes.push_back(um);
@@ -636,6 +643,11 @@ bool ModeManager::AddChannelMode(ChannelMode *cm)
{
if (ModeManager::ChannelModesByChar.insert(std::make_pair(cm->ModeChar, cm)).second)
{
+ if (cm->Name == CMODE_END)
+ {
+ cm->Name = static_cast<ChannelModeName>(CMODE_END + ++GenericChannelModes);
+ Alog() << "ModeManager: Added generic support for channel mode " << cm->ModeChar;
+ }
ModeManager::ChannelModesByName.insert(std::make_pair(cm->Name, cm)).second;
ModeManager::Modes.push_back(cm);