]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/compat.cpp
Use Modes::ChangeList in ModeHandler::RemoveMode()
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / compat.cpp
index 83ad77414371a0d476d059209c8f4f11544a4cd4..127907836020e72f1750d5d71fc548f07bfbf2bb 100644 (file)
@@ -280,6 +280,15 @@ void TreeSocket::WriteLine(const std::string& original_line)
 
                                        line.erase(d, spcolon-d);
                                        line.insert(c, " * 0");
+
+                                       if (burstsent)
+                                       {
+                                               WriteLineNoCompat(line);
+
+                                               // Synthesize a :<newserver> BURST <time> message
+                                               spcolon = line.find(" :");
+                                               line = CmdBuilder(line.substr(spcolon-3, 3), "BURST").push_int(ServerInstance->Time()).str();
+                                       }
                                }
                        }
                        WriteLineNoCompat(line);
@@ -460,6 +469,16 @@ bool TreeSocket::PreProcessOldProtocolMessage(User*& who, std::string& cmd, std:
 
                params[1].swap(params[3]);
                params.erase(params.begin()+2, params.begin()+4);
+
+               // If the source of this SERVER message is not bursting, then new servers it introduces are bursting
+               TreeServer* server = TreeServer::Get(who);
+               if (!server->IsBursting())
+                       params.insert(params.begin()+2, "burst=" + ConvToStr(ServerInstance->Time()*1000));
+       }
+       else if (cmd == "BURST")
+       {
+               // A server is introducing another one, drop unnecessary BURST
+               return false;
        }
 
        return true; // Passthru