aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Peter Powell2018-09-11 09:03:47 +0100
committerGravatar Peter Powell2018-09-11 09:03:47 +0100
commit7e9ec8e49060024033efe55342c933b86288e31c (patch)
treeaa39a4fb8319382ac492e168525a18bebae2f732
parentAdd a module for hiding mode changes from unprivileged users. (diff)
Amend OnPostCommand to specify whether the command is loopcalled.
This restores previous behaviour which was lost when the original line parameter was removed.
-rw-r--r--include/modules.h3
-rw-r--r--src/command_parse.cpp8
-rw-r--r--src/modules.cpp2
-rw-r--r--src/modules/m_spanningtree/main.h2
-rw-r--r--src/modules/m_spanningtree/postcommand.cpp2
5 files changed, 9 insertions, 8 deletions
diff --git a/include/modules.h b/include/modules.h
index 3cd0179d2..db0bc341e 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -717,8 +717,9 @@ class CoreExport Module : public classbase, public usecountbase
* @param parameters An array of array of characters containing the parameters for the command
* @param user the user issuing the command
* @param result The return code given by the command handler, one of CMD_SUCCESS or CMD_FAILURE
+ * @param loop Whether the command is being called from LoopCall or directly.
*/
- virtual void OnPostCommand(Command* command, const CommandBase::Params& parameters, LocalUser* user, CmdResult result);
+ virtual void OnPostCommand(Command* command, const CommandBase::Params& parameters, LocalUser* user, CmdResult result, bool loop);
/** Called when a user is first connecting, prior to starting DNS lookups, checking initial
* connect class, or accepting any commands.
diff --git a/src/command_parse.cpp b/src/command_parse.cpp
index 503630d53..d4dd7da21 100644
--- a/src/command_parse.cpp
+++ b/src/command_parse.cpp
@@ -97,10 +97,10 @@ bool CommandParser::LoopCall(User* user, Command* handler, const CommandBase::Pa
CmdResult result = handler->Handle(user, params);
if (localuser)
{
- // Run the OnPostCommand hook with the last parameter (original line) being empty
- // to indicate that the command had more targets in its original form.
+ // Run the OnPostCommand hook with the last parameter being true to indicate
+ // that the event is being called in a loop.
item.clear();
- FOREACH_MOD(OnPostCommand, (handler, new_parameters, localuser, result));
+ FOREACH_MOD(OnPostCommand, (handler, new_parameters, localuser, result, true));
}
}
}
@@ -316,7 +316,7 @@ void CommandParser::ProcessCommand(LocalUser* user, std::string& command, Comman
*/
CmdResult result = handler->Handle(user, command_p);
- FOREACH_MOD(OnPostCommand, (handler, command_p, user, result));
+ FOREACH_MOD(OnPostCommand, (handler, command_p, user, result, false));
}
}
diff --git a/src/modules.cpp b/src/modules.cpp
index 3a574fdda..3062aad43 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -94,7 +94,7 @@ void Module::OnLoadModule(Module*) { DetachEvent(I_OnLoadModule); }
void Module::OnUnloadModule(Module*) { DetachEvent(I_OnUnloadModule); }
void Module::OnBackgroundTimer(time_t) { DetachEvent(I_OnBackgroundTimer); }
ModResult Module::OnPreCommand(std::string&, CommandBase::Params&, LocalUser*, bool) { DetachEvent(I_OnPreCommand); return MOD_RES_PASSTHRU; }
-void Module::OnPostCommand(Command*, const CommandBase::Params&, LocalUser*, CmdResult) { DetachEvent(I_OnPostCommand); }
+void Module::OnPostCommand(Command*, const CommandBase::Params&, LocalUser*, CmdResult, bool) { DetachEvent(I_OnPostCommand); }
void Module::OnUserInit(LocalUser*) { DetachEvent(I_OnUserInit); }
ModResult Module::OnCheckReady(LocalUser*) { DetachEvent(I_OnCheckReady); return MOD_RES_PASSTHRU; }
ModResult Module::OnUserRegister(LocalUser*) { DetachEvent(I_OnUserRegister); return MOD_RES_PASSTHRU; }
diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h
index 60f819e9c..d619c43bc 100644
--- a/src/modules/m_spanningtree/main.h
+++ b/src/modules/m_spanningtree/main.h
@@ -146,7 +146,7 @@ class ModuleSpanningTree
**/
ModResult OnPreCommand(std::string& command, CommandBase::Params& parameters, LocalUser* user, bool validated) CXX11_OVERRIDE;
- void OnPostCommand(Command*, const CommandBase::Params& parameters, LocalUser* user, CmdResult result) CXX11_OVERRIDE;
+ void OnPostCommand(Command*, const CommandBase::Params& parameters, LocalUser* user, CmdResult result, bool loop) CXX11_OVERRIDE;
void OnUserConnect(LocalUser* source) CXX11_OVERRIDE;
void OnUserInvite(User* source, User* dest, Channel* channel, time_t timeout, unsigned int notifyrank, CUList& notifyexcepts) CXX11_OVERRIDE;
ModResult OnPreTopicChange(User* user, Channel* chan, const std::string& topic) CXX11_OVERRIDE;
diff --git a/src/modules/m_spanningtree/postcommand.cpp b/src/modules/m_spanningtree/postcommand.cpp
index c6bc04fc2..c7b4707b3 100644
--- a/src/modules/m_spanningtree/postcommand.cpp
+++ b/src/modules/m_spanningtree/postcommand.cpp
@@ -24,7 +24,7 @@
#include "treeserver.h"
#include "commandbuilder.h"
-void ModuleSpanningTree::OnPostCommand(Command* command, const CommandBase::Params& parameters, LocalUser* user, CmdResult result)
+void ModuleSpanningTree::OnPostCommand(Command* command, const CommandBase::Params& parameters, LocalUser* user, CmdResult result, bool loop)
{
if (result == CMD_SUCCESS)
Utils->RouteCommand(NULL, command, parameters, user);