]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/nickcollide.cpp
Fix various rline bugs, implement /stats R, and fix the issue where you get no error...
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / nickcollide.cpp
index d2adbc766d406cb7f4aae786d5f0505675cdd95a..5531f9c0ee367b53948e72550fb15ce40be30b65 100644 (file)
@@ -27,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.
@@ -35,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.c_str();
-       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)
@@ -64,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