aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/fmode.cpp
diff options
context:
space:
mode:
authorGravatar danieldg2009-10-23 22:47:39 +0000
committerGravatar danieldg2009-10-23 22:47:39 +0000
commitb16e16ac1bae4ac5494778b4b8a7009febb58137 (patch)
tree62839ed4c9a899302146fd9f8bdae2ed919029bf /src/modules/m_spanningtree/fmode.cpp
parentFix plural on netsplit SNO. [dKingston] (diff)
Make User::uuid and User::server const
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11962 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_spanningtree/fmode.cpp')
-rw-r--r--src/modules/m_spanningtree/fmode.cpp28
1 files changed, 7 insertions, 21 deletions
diff --git a/src/modules/m_spanningtree/fmode.cpp b/src/modules/m_spanningtree/fmode.cpp
index 3bca098d6..4dd05b101 100644
--- a/src/modules/m_spanningtree/fmode.cpp
+++ b/src/modules/m_spanningtree/fmode.cpp
@@ -22,30 +22,17 @@
/** FMODE command - server mode with timestamp checks */
-bool TreeSocket::ForceMode(const std::string &source, parameterlist &params)
+void TreeSocket::ForceMode(User* who, parameterlist &params)
{
/* Chances are this is a 1.0 FMODE without TS */
if (params.size() < 3)
{
/* No modes were in the command, probably a channel with no modes set on it */
- return true;
+ return;
}
- std::string sourceserv;
+ std::string sourceserv = who->server;
- /* Are we dealing with an FMODE from a user, or from a server? */
- User* who = ServerInstance->FindNick(source);
- if (who)
- {
- /* FMODE from a user, set sourceserv to the users server name */
- sourceserv = who->server;
- }
- else
- {
- /* FMODE from a server, use a fake user to receive mode feedback */
- who = Utils->ServerUser;
- sourceserv = source; /* Set sourceserv to the actual source string */
- }
std::vector<std::string> modelist;
time_t TS = 0;
for (unsigned int q = 0; (q < params.size()) && (q < 64); q++)
@@ -83,28 +70,27 @@ bool TreeSocket::ForceMode(const std::string &source, parameterlist &params)
}
else
/* Oops, channel doesnt exist! */
- return true;
+ return;
}
if (!TS)
{
ServerInstance->Logs->Log("m_spanningtree",DEFAULT,"*** BUG? *** TS of 0 sent to FMODE. Are some services authors smoking craq, or is it 1970 again?. Dropped.");
ServerInstance->SNO->WriteToSnoMask('d', "WARNING: The server %s is sending FMODE with a TS of zero. Total craq. Mode was dropped.", sourceserv.c_str());
- return true;
+ return;
}
/* TS is equal or less: Merge the mode changes into ours and pass on.
*/
if (TS <= ourTS)
{
- ServerInstance->Modes->Process(modelist, who, (who == Utils->ServerUser));
+ ServerInstance->Modes->Process(modelist, who, IS_SERVER(who));
/* HOT POTATO! PASS IT ON! */
- Utils->DoOneToAllButSender(source,"FMODE",params,sourceserv);
+ Utils->DoOneToAllButSender(sourceserv,"FMODE",params,sourceserv);
}
/* If the TS is greater than ours, we drop the mode and dont pass it anywhere.
*/
- return true;
}