]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/treeserver.h
Link m_ldap against libldap_r
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / treeserver.h
index 3f1f0755d25421d92d51fbf3996b36b83db6de91..f06e0bafa8307f3ca23177b2c6ae48bf22f9d9c4 100644 (file)
@@ -60,11 +60,23 @@ class TreeServer : public Server
         */
        unsigned int behind_bursting;
 
+       /** True if this server has been lost in a split and is awaiting destruction
+        */
+       bool isdead;
+
        /** This method is used to add this TreeServer to the
         * hash maps. It is only called by the constructors.
         */
        void AddHashEntry();
 
+       /** Used by SQuit logic to recursively remove servers
+        */
+       void SQuitInternal(unsigned int& num_lost_servers);
+
+       /** Remove the reference to this server from the hash maps
+        */
+       void RemoveHash();
+
  public:
        typedef std::vector<TreeServer*> ChildServers;
        FakeUser* const ServerUser;             /* User representing this server */
@@ -87,7 +99,21 @@ class TreeServer : public Server
         */
        TreeServer(const std::string& Name, const std::string& Desc, const std::string& id, TreeServer* Above, TreeSocket* Sock, bool Hide);
 
-       int QuitUsers(const std::string &reason);
+       /** SQuit a server connected to this server, removing the given server and all servers behind it
+        * @param server Server to squit, must be directly below this server
+        * @param reason Reason for quitting the server, sent to opers and other servers
+        */
+       void SQuitChild(TreeServer* server, const std::string& reason);
+
+       /** SQuit this server, removing this server and all servers behind it
+        * @param reason Reason for quitting the server, sent to opers and other servers
+        */
+       void SQuit(const std::string& reason)
+       {
+               GetParent()->SQuitChild(this, reason);
+       }
+
+       static unsigned int QuitUsers(const std::string& reason);
 
        /** Get route.
         * The 'route' is defined as the locally-
@@ -103,6 +129,11 @@ class TreeServer : public Server
         */
        bool IsLocal() const { return (this->Route == this); }
 
+       /** Returns true if the server is awaiting destruction
+        * @return True if the server is waiting to be culled and deleted, false otherwise
+        */
+       bool IsDead() const { return isdead; }
+
        /** Get server version string
         */
        const std::string& GetVersion();
@@ -181,12 +212,6 @@ class TreeServer : public Server
         */
        bool DelChild(TreeServer* Child);
 
-       /** Removes child nodes of this node, and of that node, etc etc.
-        * This is used during netsplits to automatically tidy up the
-        * server tree. It is slow, we don't use it for much else.
-        */
-       void Tidy();
-
        /** Get server ID
         */
        const std::string& GetID();
@@ -219,9 +244,7 @@ class TreeServer : public Server
 
        CullResult cull();
 
-       /** Destructor
-        * Removes the reference to this object from the
-        * hash maps.
+       /** Destructor, deletes ServerUser unless IsRoot()
         */
        ~TreeServer();