summaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/fmode.cpp
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2013-06-13 18:15:34 +0200
committerattilamolnar <attilamolnar@hush.com>2013-06-13 18:15:34 +0200
commit3624c137a6db85eaab0372550c9dca79d6d21e55 (patch)
treecdfd14b2522583e057db26a2104397c05dc56c68 /src/modules/m_spanningtree/fmode.cpp
parentb390ded3f3924cbd16a5dab53a981be279360124 (diff)
Introduce ModeProcessFlags, can be passed to ModeParser::Process() to indicate local only mode changes and mode merges
Change ProtocolInterface::SendMode() to take source and destination parameters, and call it from the mode parser whenever the mode change is global This deprecates the ambiguous InspIRCd::SendMode() and InspIRCd::SendGlobalMode() interface (the latter sent mode changes originating from local users twice, etc.)
Diffstat (limited to 'src/modules/m_spanningtree/fmode.cpp')
-rw-r--r--src/modules/m_spanningtree/fmode.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/modules/m_spanningtree/fmode.cpp b/src/modules/m_spanningtree/fmode.cpp
index 7be904faf..9a72c5f05 100644
--- a/src/modules/m_spanningtree/fmode.cpp
+++ b/src/modules/m_spanningtree/fmode.cpp
@@ -55,23 +55,25 @@ CmdResult CommandFMode::Handle(const std::vector<std::string>& params, User *who
ourTS = user->age;
}
- /* TS is equal or less: Merge the mode changes into ours and pass on.
+ /* If the TS is greater than ours, we drop the mode and don't pass it anywhere.
*/
- if (TS <= ourTS)
- {
- std::vector<std::string> modelist;
- modelist.reserve(params.size()-1);
- /* Insert everything into modelist except the TS (params[1]) */
- modelist.push_back(params[0]);
- modelist.insert(modelist.end(), params.begin()+2, params.end());
+ if (TS > ourTS)
+ return CMD_FAILURE;
- bool merge = (TS == ourTS) && IS_SERVER(who);
- ServerInstance->Modes->Process(modelist, who, merge);
- return CMD_SUCCESS;
- }
- /* If the TS is greater than ours, we drop the mode and dont pass it anywhere.
+ /* TS is equal or less: Merge the mode changes into ours and pass on.
*/
- return CMD_FAILURE;
+ std::vector<std::string> modelist;
+ modelist.reserve(params.size()-1);
+ /* Insert everything into modelist except the TS (params[1]) */
+ modelist.push_back(params[0]);
+ modelist.insert(modelist.end(), params.begin()+2, params.end());
+
+ ModeParser::ModeProcessFlag flags = ModeParser::MODE_LOCALONLY;
+ if ((TS == ourTS) && IS_SERVER(who))
+ flags |= ModeParser::MODE_MERGE;
+
+ ServerInstance->Modes->Process(modelist, who, flags);
+ return CMD_SUCCESS;
}