]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/treesocket2.cpp
m_spanningtree Allow multiple valid ips for link blocks as a result of SecurityIPResolver
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / treesocket2.cpp
index 574dda09d0608233f52865a826b1b91f760ebfee..04b850755020eebfdc0f87d820c62db5ac1e27b5 100644 (file)
@@ -47,7 +47,7 @@ void TreeSocket::Split(const std::string& line, std::string& prefix, std::string
 
        if (prefix[0] == ':')
        {
-               prefix = prefix.substr(1);
+               prefix.erase(prefix.begin());
 
                if (prefix.empty())
                {
@@ -152,13 +152,13 @@ void TreeSocket::ProcessLine(std::string &line)
                                        time_t delta = them - ServerInstance->Time();
                                        if ((delta < -600) || (delta > 600))
                                        {
-                                               ServerInstance->SNO->WriteGlobalSno('l',"\2ERROR\2: Your clocks are out by %d seconds (this is more than five minutes). Link aborted, \2PLEASE SYNC YOUR CLOCKS!\2",abs((long)delta));
-                                               SendError("Your clocks are out by "+ConvToStr(abs((long)delta))+" seconds (this is more than five minutes). Link aborted, PLEASE SYNC YOUR CLOCKS!");
+                                               ServerInstance->SNO->WriteGlobalSno('l',"\2ERROR\2: Your clocks are out by %ld seconds (this is more than five minutes). Link aborted, \2PLEASE SYNC YOUR CLOCKS!\2",labs((long)delta));
+                                               SendError("Your clocks are out by "+ConvToStr(labs((long)delta))+" seconds (this is more than five minutes). Link aborted, PLEASE SYNC YOUR CLOCKS!");
                                                return;
                                        }
                                        else if ((delta < -30) || (delta > 30))
                                        {
-                                               ServerInstance->SNO->WriteGlobalSno('l',"\2WARNING\2: Your clocks are out by %d seconds. Please consider synching your clocks.", abs((long)delta));
+                                               ServerInstance->SNO->WriteGlobalSno('l',"\2WARNING\2: Your clocks are out by %ld seconds. Please consider synching your clocks.", labs((long)delta));
                                        }
                                }
 
@@ -220,10 +220,20 @@ User* TreeSocket::FindSource(const std::string& prefix, const std::string& comma
        if (prefix.empty())
                return MyRoot->ServerUser;
 
-       // If the prefix string is a uuid or a sid FindUUID() returns the appropriate User object
-       User* who = ServerInstance->FindUUID(prefix);
-       if (who)
-               return who;
+       if (prefix.size() == 3)
+       {
+               // Prefix looks like a sid
+               TreeServer* server = Utils->FindServerID(prefix);
+               if (server)
+                       return server->ServerUser;
+       }
+       else
+       {
+               // If the prefix string is a uuid FindUUID() returns the appropriate User object
+               User* user = ServerInstance->FindUUID(prefix);
+               if (user)
+                       return user;
+       }
 
        // Some implementations wrongly send a server name as prefix occasionally, handle that too for now
        TreeServer* const server = Utils->FindServer(prefix);
@@ -243,9 +253,9 @@ User* TreeSocket::FindSource(const std::string& prefix, const std::string& comma
                 * command came from a server to avoid desync.
                 */
 
-               who = ServerInstance->FindUUID(prefix.substr(0, 3));
-               if (who)
-                       return who;
+               TreeServer* const usersserver = Utils->FindServerID(prefix.substr(0, 3));
+               if (usersserver)
+                       return usersserver->ServerUser;
                return this->MyRoot->ServerUser;
        }
 
@@ -306,6 +316,11 @@ void TreeSocket::ProcessConnectedLine(std::string& prefix, std::string& command,
                                this->Error(params);
                                return;
                        }
+                       else if (command == "BURST")
+                       {
+                               // This is sent even when there is no need for it, drop it here for now
+                               return;
+                       }
 
                        throw ProtocolException("Unknown command");
                }
@@ -355,7 +370,7 @@ void TreeSocket::Close()
        // If the connection is fully up (state CONNECTED)
        // then propogate a netsplit to all peers.
        if (MyRoot)
-               Squit(MyRoot,getError());
+               MyRoot->SQuit(getError());
 
        ServerInstance->SNO->WriteGlobalSno('l', "Connection to '\2%s\2' failed.",linkID.c_str());