From c1fa07d2eb6146a9e3f6c26f478a22b119032d27 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Sun, 27 Jul 2014 18:59:43 +0200 Subject: m_spanningtree Sync bursting state of servers in SERVER Also send the time when they started bursting --- src/modules/m_spanningtree/compat.cpp | 5 +++++ src/modules/m_spanningtree/server.cpp | 6 +++++- src/modules/m_spanningtree/treeserver.cpp | 6 ++++-- 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src/modules/m_spanningtree') diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp index 9f25f251d..127907836 100644 --- a/src/modules/m_spanningtree/compat.cpp +++ b/src/modules/m_spanningtree/compat.cpp @@ -469,6 +469,11 @@ 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") { diff --git a/src/modules/m_spanningtree/server.cpp b/src/modules/m_spanningtree/server.cpp index e7868090d..d7c6332f2 100644 --- a/src/modules/m_spanningtree/server.cpp +++ b/src/modules/m_spanningtree/server.cpp @@ -63,7 +63,6 @@ CmdResult CommandServer::HandleServer(TreeServer* ParentOfThis, std::vectorGetSocket(), lnk ? lnk->Hidden : false); - Node->BeginBurst(); HandleExtra(Node, params); ServerInstance->SNO->WriteToSnoMask('L', "Server \002"+ParentOfThis->GetName()+"\002 introduced server \002"+servername+"\002 ("+description+")"); @@ -84,6 +83,9 @@ void CommandServer::HandleExtra(TreeServer* newserver, const std::vectorBeginBurst(ConvToInt(val)); } } @@ -217,5 +219,7 @@ CommandServer::Builder::Builder(TreeServer* server) { push(server->GetName()); push(server->GetID()); + if (server->IsBursting()) + push_property("burst", ConvToStr(server->StartBurst)); push_last(server->GetDesc()); } diff --git a/src/modules/m_spanningtree/treeserver.cpp b/src/modules/m_spanningtree/treeserver.cpp index 8ff4cbe7b..3a7d8c4a9 100644 --- a/src/modules/m_spanningtree/treeserver.cpp +++ b/src/modules/m_spanningtree/treeserver.cpp @@ -114,8 +114,10 @@ TreeServer::TreeServer(const std::string& Name, const std::string& Desc, const s void TreeServer::BeginBurst(unsigned long startms) { - if (!startms) - startms = ServerInstance->Time() * 1000 + (ServerInstance->Time_ns() / 1000000); + unsigned long now = ServerInstance->Time() * 1000 + (ServerInstance->Time_ns() / 1000000); + // If the start time is in the future (clocks are not synced) then use current time + if ((!startms) || (startms > now)) + startms = now; this->StartBurst = startms; ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Server %s started bursting at time %lu", sid.c_str(), startms); } -- cgit v1.2.3