]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/nickcollide.cpp
Don't send an override notice if no modes were actually applied, thanks Ankit.
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / nickcollide.cpp
index 5d36bc46f4e74c6be267b0495e71c776d0967879..6df07b9cd1b2efc847cad6e970b3439209f1ab76 100644 (file)
  */
 
 #include "inspircd.h"
-#include "commands/cmd_whois.h"
-#include "commands/cmd_stats.h"
-#include "socket.h"
-#include "wildcard.h"
 #include "xline.h"
-#include "transport.h"
-#include "m_hash.h"
-#include "socketengine.h"
 
-#include "m_spanningtree/main.h"
-#include "m_spanningtree/utils.h"
-#include "m_spanningtree/treeserver.h"
-#include "m_spanningtree/link.h"
 #include "m_spanningtree/treesocket.h"
-#include "m_spanningtree/resolvers.h"
-#include "m_spanningtree/handshaketimer.h"
+#include "m_spanningtree/treeserver.h"
+#include "m_spanningtree/utils.h"
+
+/* $ModDep: m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/treesocket.h */
 
-/* $ModDep: m_spanningtree/timesynctimer.h m_spanningtree/resolvers.h m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/link.h m_spanningtree/treesocket.h m_hash.h */
 
 /*
  * Yes, this function looks a little ugly.
@@ -37,7 +27,7 @@
  * Returns 1 if colliding local client, 2 if colliding remote, 3 if colliding both.
  * Sends SVSNICKs as appropriate and forces nickchanges too.
  */
-int TreeSocket::DoCollision(User *u, time_t remotets, const char *remoteident, const char *remoteip, const char *remoteuid)
+int TreeSocket::DoCollision(User *u, time_t remotets, const std::string &remoteident, const std::string &remoteip, const std::string &remoteuid)
 {
        /*
         *  Under old protocol rules, we would have had to kill both clients.
@@ -45,24 +35,24 @@ int TreeSocket::DoCollision(User *u, time_t remotets, const char *remoteident, c
         * These days, we have UID. And, so what we do is, force nick change client(s)
         * involved according to timestamp rules.
         *
-        * RULES:        
-        *  user@ip equal:       
-        *   Force nick change on OLDER timestamped client       
-        *  user@ip differ:      
-        *   Force nick change on NEWER timestamped client       
-        *  TS EQUAL:    
-        *   FNC both.   
-        *       
-        * This stops abusive use of collisions, simplifies problems with loops, and so on.      
+        * RULES:
+        *  user@ip equal:
+        *   Force nick change on OLDER timestamped client
+        *  user@ip differ:
+        *   Force nick change on NEWER timestamped client
+        *  TS EQUAL:
+        *   FNC both.
+        *
+        * This stops abusive use of collisions, simplifies problems with loops, and so on.
         *   -- w00t
         */
        bool bChangeLocal = true;
        bool bChangeRemote = true;
 
-       /* for brevity, don't use the User */
-       time_t localts = u->age;
-       const char *localident = u->ident;
-       const char *localip = u->GetIPString();
+       /* for brevity, don't use the User - use defines to avoid any copy */
+       #define localts u->age
+       #define localident u->ident
+       #define localip u->GetIPString()
 
        /* mmk. let's do this again. */
        if (remotets == localts)
@@ -74,8 +64,8 @@ int TreeSocket::DoCollision(User *u, time_t remotets, const char *remoteident, c
                /* fuck. now it gets complex. */
 
                /* first, let's see if ident@host matches. */
-               bool SamePerson = !strcmp(localident, remoteident)
-                               && !strcmp(localip, remoteip);
+               bool SamePerson = (localident == remoteident)
+                               && (localip == remoteip);
 
                /*
                 * if ident@ip is equal, and theirs is newer, or
@@ -97,7 +87,7 @@ int TreeSocket::DoCollision(User *u, time_t remotets, const char *remoteident, c
 
        if (bChangeLocal)
        {
-               u->ForceNickChange(u->uuid);
+               u->ForceNickChange(u->uuid.c_str());
 
                if (!bChangeRemote)
                        return 1;
@@ -115,17 +105,17 @@ int TreeSocket::DoCollision(User *u, time_t remotets, const char *remoteident, c
                 * have 928AAAB's nick set to that.
                 *   -- w00t
                 */
-               User *remote = this->Instance->FindUUID(remoteuid);
+               User *remote = this->ServerInstance->FindUUID(remoteuid);
 
                if (remote)
                {
                        /* buh.. nick change collide. force change their nick. */
-                       remote->ForceNickChange(remote->uuid);
+                       remote->ForceNickChange(remote->uuid.c_str());
                }
                else
                {
                        /* user has not been introduced yet, just inform their server */
-                       this->WriteLine(std::string(":")+this->Instance->Config->GetSID()+" SVSNICK "+remoteuid+" " + remoteuid + " " + ConvToStr(remotets));
+                       this->WriteLine(std::string(":")+this->ServerInstance->Config->GetSID()+" SVSNICK "+remoteuid+" " + remoteuid + " " + ConvToStr(remotets));
                }
 
                if (!bChangeLocal)