]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/main.cpp
Rewrite the build system directive parser.
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / main.cpp
index 56cc78cd246a58b75a68d05dddac14cb2e15bd95..6bf9e8044436c7584d66539dfb17b64846e074b5 100644 (file)
@@ -365,6 +365,18 @@ void ModuleSpanningTree::OnUserInvite(User* source, User* dest, Channel* channel
        }
 }
 
+ModResult ModuleSpanningTree::OnPreTopicChange(User* user, Channel* chan, const std::string& topic)
+{
+       // XXX: Deny topic changes if the current topic set time is the current time or is in the future because
+       // other servers will drop our FTOPIC. This restriction will be removed when the protocol is updated.
+       if ((chan->topicset >= ServerInstance->Time()) && (Utils->serverlist.size() > 1))
+       {
+               user->WriteNumeric(ERR_CHANOPRIVSNEEDED, chan->name, "Retry topic change later");
+               return MOD_RES_DENY;
+       }
+       return MOD_RES_PASSTHRU;
+}
+
 void ModuleSpanningTree::OnPostTopicChange(User* user, Channel* chan, const std::string &topic)
 {
        // Drop remote events on the floor.
@@ -762,6 +774,7 @@ Version ModuleSpanningTree::GetVersion()
 void ModuleSpanningTree::Prioritize()
 {
        ServerInstance->Modules->SetPriority(this, PRIORITY_LAST);
+       ServerInstance->Modules.SetPriority(this, I_OnPreTopicChange, PRIORITY_FIRST);
 }
 
 MODULE_INIT(ModuleSpanningTree)