]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/main.cpp
Add back the prefix on a server target message.
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / main.cpp
index 43417bc3cc8ad74053d9663ffd800cea9c8579a9..5ed66b80541f299cbf3d3f630a7149b2cc003fed 100644 (file)
@@ -1,11 +1,15 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
+ *   Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013, 2016 Adam <Adam@anope.org>
+ *   Copyright (C) 2012-2016, 2018 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
  *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
- *   Copyright (C) 2007-2009 Craig Edwards <craigedwards@brainbox.cc>
- *   Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
- *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
- *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2007-2009 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007-2009 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2005, 2007-2010 Craig Edwards <brain@inspircd.org>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
  * redistribute it and/or modify it under the terms of the GNU General Public
@@ -49,8 +53,9 @@ ModuleSpanningTree::ModuleSpanningTree()
        , messageeventprov(this, "event/server-message")
        , synceventprov(this, "event/server-sync")
        , sslapi(this)
+       , servicetag(this)
        , DNS(this, "DNS")
-       , tagevprov(this, "event/messagetag")
+       , tagevprov(this)
        , loopCall(false)
 {
 }
@@ -210,17 +215,13 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y)
                // If this fails then the IP sa will be AF_UNSPEC.
                irc::sockets::aptosa(x->IPAddr, x->Port, sa);
        }
-       
+
        /* Do we already have an IP? If so, no need to resolve it. */
        if (sa.family() != AF_UNSPEC)
        {
                // Create a TreeServer object that will start connecting immediately in the background
                TreeSocket* newsocket = new TreeSocket(x, y, sa);
-               if (newsocket->GetFd() > -1)
-               {
-                       /* Handled automatically on success */
-               }
-               else
+               if (!newsocket->HasFd())
                {
                        ServerInstance->SNO->WriteToSnoMask('l', "CONNECT: Error connecting \002%s\002: %s.",
                                x->Name.c_str(), newsocket->getError().c_str());
@@ -419,7 +420,7 @@ void ModuleSpanningTree::OnUserPostMessage(User* user, const MessageTarget& targ
                        const std::string* serverglob = target.Get<std::string>();
                        CmdBuilder par(user, message_type);
                        par.push_tags(details.tags_out);
-                       par.push(*serverglob);
+                       par.push(std::string("$") + *serverglob);
                        par.push_last(details.text);
                        par.Broadcast();
                        break;
@@ -456,7 +457,7 @@ void ModuleSpanningTree::OnUserPostTagMessage(User* user, const MessageTarget& t
                        const std::string* serverglob = target.Get<std::string>();
                        CmdBuilder par(user, "TAGMSG");
                        par.push_tags(details.tags_out);
-                       par.push(*serverglob);
+                       par.push(std::string("$") + *serverglob);
                        par.Broadcast();
                        break;
                }
@@ -689,7 +690,7 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod)
                {
                        TreeServer* server = i->second;
                        if (!server->IsRoot())
-                               FOREACH_MOD_CUSTOM(GetLinkEventProvider(), ServerProtocol::LinkEventListener, OnServerSplit, (server));
+                               FOREACH_MOD_CUSTOM(GetLinkEventProvider(), ServerProtocol::LinkEventListener, OnServerSplit, (server, false));
                }
                return;
        }
@@ -793,6 +794,13 @@ void ModuleSpanningTree::OnMode(User* source, User* u, Channel* c, const Modes::
        }
 }
 
+void ModuleSpanningTree::OnShutdown(const std::string& reason)
+{
+       const TreeServer::ChildServers& children = Utils->TreeRoot->GetChildren();
+       while (!children.empty())
+               children.front()->SQuit(reason, true);
+}
+
 CullResult ModuleSpanningTree::cull()
 {
        if (Utils)
@@ -804,7 +812,7 @@ ModuleSpanningTree::~ModuleSpanningTree()
 {
        ServerInstance->PI = &ServerInstance->DefaultProtocolInterface;
 
-       Server* newsrv = new Server(ServerInstance->Config->ServerName, ServerInstance->Config->ServerDesc);
+       Server* newsrv = new Server(ServerInstance->Config->GetSID(), ServerInstance->Config->ServerName, ServerInstance->Config->ServerDesc);
        SetLocalUsersServer(newsrv);
 
        delete Utils;