]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
CoreExport changes, clean up DoHostCycle when users are exempted
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Mon, 12 Oct 2009 18:13:01 +0000 (18:13 +0000)
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Mon, 12 Oct 2009 18:13:01 +0000 (18:13 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11856 e03df62e-2008-0410-955e-edbf42e46eb7

include/extensible.h
include/fakeuser.h
include/inspstring.h
src/users.cpp

index c491f99b9e6c022eac7e8bc89690471b4bb3cdef..3e6bd4c993dbb6fd6a8b5ad98ab2ba37305f1973 100644 (file)
@@ -90,7 +90,7 @@ class CoreExport Extensible : public classbase
 };
 
 /** Base class for items that are NOT synchronized between servers */
-class LocalExtItem : public ExtensionItem
+class CoreExport LocalExtItem : public ExtensionItem
 {
  public:
        LocalExtItem(const std::string& key, Module* owner);
@@ -153,7 +153,7 @@ class SimpleExtItem : public LocalExtItem
        }
 };
 
-class LocalStringExt : public SimpleExtItem<std::string>
+class CoreExport LocalStringExt : public SimpleExtItem<std::string>
 {
  public:
        LocalStringExt(const std::string& key, Module* owner);
@@ -161,7 +161,7 @@ class LocalStringExt : public SimpleExtItem<std::string>
        std::string serialize(SerializeFormat format, const Extensible* container, void* item);
 };
 
-class LocalIntExt : public LocalExtItem
+class CoreExport LocalIntExt : public LocalExtItem
 {
  public:
        LocalIntExt(const std::string& key, Module* owner);
@@ -172,7 +172,7 @@ class LocalIntExt : public LocalExtItem
        void free(void* item);
 };
 
-class StringExtItem : public ExtensionItem
+class CoreExport StringExtItem : public ExtensionItem
 {
  public:
        StringExtItem(const std::string& key, Module* owner);
index e21ecf9b8edf1b0a53c31a55239ee20c40d1eb9d..a469710911e28b795e52784b06cffeb5a491fe9e 100644 (file)
@@ -16,7 +16,7 @@
 
 #include "users.h"
 
-class FakeUser : public User
+class CoreExport FakeUser : public User
 {
  public:
        FakeUser(const std::string &uid) : User(uid)
index abf8d9cf36e46813b0974334af0e3a3bae32a0ca..b08ce76476c8caf3387116e950acb3d468263f58 100644 (file)
@@ -40,7 +40,7 @@ CoreExport int charlcat(char* x,char y,int z);
 CoreExport bool charremove(char* mp, char remove);
 
 /** Binary to hexadecimal conversion */
-std::string BinToHex(const std::string& data);
+CoreExport std::string BinToHex(const std::string& data);
 
 #endif
 
index 1cf21a0297bdda5f21771fa54bd2623a4cb3fa49..370387df6a229cd908feecbe2822fc65bbbec726 100644 (file)
@@ -1401,7 +1401,8 @@ void User::DoHostCycle(const std::string &quitline)
        if (!ServerInstance->Config->CycleHosts)
                return;
 
-       uniq_id++;
+       int silent_id = ++uniq_id;
+       int seen_id = ++uniq_id;
 
        if (!already_sent)
                InitializeAlreadySent(ServerInstance->SE);
@@ -1416,9 +1417,15 @@ void User::DoHostCycle(const std::string &quitline)
                User* u = i->first;
                if (IS_LOCAL(u) && !u->quitting)
                {
-                       already_sent[u->fd] = uniq_id;
                        if (i->second)
+                       {
+                               already_sent[u->fd] = seen_id;
                                u->Write(quitline);
+                       }
+                       else
+                       {
+                               already_sent[u->fd] = silent_id;
+                       }
                }
        }
        for (UCListIter v = include_c.begin(); v != include_c.end(); ++v)
@@ -1439,11 +1446,13 @@ void User::DoHostCycle(const std::string &quitline)
                        User* u = i->first;
                        if (u == this || !IS_LOCAL(u))
                                continue;
+                       if (already_sent[u->fd] == silent_id)
+                               continue;
 
-                       if (already_sent[i->first->fd] != uniq_id)
+                       if (already_sent[u->fd] != seen_id)
                        {
                                u->Write(quitline);
-                               already_sent[i->first->fd] = uniq_id;
+                               already_sent[i->first->fd] = seen_id;
                        }
                        u->Write(joinline);
                        if (modeline.length() > 0)