X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Fmain.cpp;h=ee4c4bdd8b656e3d90163ef5ca5f37b6058f90de;hb=f62654a6859998f9d63eb22702c572d5ebcff15c;hp=644193679d36352e0932edbfe6b10af686e339b1;hpb=daa907cb09e394cb88737ddef9299d0c4ba5ee98;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 644193679..ee4c4bdd8 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -59,20 +59,22 @@ namespace { void SetLocalUsersServer(Server* newserver) { + // Does not change the server of quitting users because those are not in the list + ServerInstance->FakeClient->server = newserver; - const LocalUserList& list = ServerInstance->Users->local_users; - for (LocalUserList::const_iterator i = list.begin(); i != list.end(); ++i) + const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers(); + for (UserManager::LocalList::const_iterator i = list.begin(); i != list.end(); ++i) (*i)->server = newserver; } void ResetMembershipIds() { // Set all membership ids to 0 - const LocalUserList& list = ServerInstance->Users->local_users; - for (LocalUserList::iterator i = list.begin(); i != list.end(); ++i) + const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers(); + for (UserManager::LocalList::iterator i = list.begin(); i != list.end(); ++i) { LocalUser* user = *i; - for (UCListIter j = user->chans.begin(); j != user->chans.end(); ++j) + for (User::ChanList::iterator j = user->chans.begin(); j != user->chans.end(); ++j) (*j)->id = 0; } } @@ -189,7 +191,7 @@ restart: { // They did, send a ping to them s->SetNextPingTime(curtime + Utils->PingFreq); - s->GetSocket()->WriteLine(":" + ServerInstance->Config->GetSID() + " PING " + s->GetID()); + s->GetSocket()->WriteLine(CmdBuilder("PING").push(s->GetID())); s->LastPingMsec = ts; } else @@ -419,11 +421,6 @@ ModResult ModuleSpanningTree::HandleConnect(const std::vector& para return MOD_RES_DENY; } -void ModuleSpanningTree::On005Numeric(std::map& tokens) -{ - tokens["MAP"]; -} - void ModuleSpanningTree::OnUserInvite(User* source,User* dest,Channel* channel, time_t expiry) { if (IS_LOCAL(source)) @@ -649,6 +646,16 @@ void ModuleSpanningTree::OnPreRehash(User* user, const std::string ¶meter) void ModuleSpanningTree::ReadConfig(ConfigStatus& status) { + // Did this rehash change the description of this server? + const std::string& newdesc = ServerInstance->Config->ServerDesc; + if (newdesc != Utils->TreeRoot->GetDesc()) + { + // Broadcast a SINFO desc message to let the network know about the new description. This is the description + // string that is sent in the SERVER message initially and shown for example in WHOIS. + // We don't need to update the field itself in the Server object - the core does that. + CommandSInfo::Builder(Utils->TreeRoot, "desc", newdesc).Broadcast(); + } + // Re-read config stuff try { @@ -687,6 +694,7 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod) return; ServerInstance->PI->SendMetaData("modules", "-" + mod->ModuleSourceFile); +restart: // Close all connections which use an IO hook provided by this module const TreeServer::ChildServers& list = Utils->TreeRoot->GetChildren(); for (TreeServer::ChildServers::const_iterator i = list.begin(); i != list.end(); ++i) @@ -696,6 +704,8 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod) { sock->SendError("SSL module unloaded"); sock->Close(); + // XXX: The list we're iterating is modified by TreeSocket::Squit() which is called by Close() + goto restart; } }