]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/treeserver.h
m_spanningtree Remove public TreeServer methods that are only called from TreeServer
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / treeserver.h
index 23647bcf373fdc97762f3e89422c3ce1af146419..4465de15e4ea439563a86e0f4b3eae6eed2b4aab 100644 (file)
@@ -53,18 +53,36 @@ class TreeServer : public Server
        bool LastPingWasGood;                   /* True if the server responded to the last PING with a PONG */
        std::string sid;                        /* Server ID */
 
+       /** Counter counting how many servers are bursting in front of this server, including
+        * this server. Set to parents' value on construction then it is increased if the
+        * server itself starts bursting. Decreased when a server on the path to this server
+        * finishes burst.
+        */
+       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 */
        const time_t age;
 
        bool Warned;                            /* True if we've warned opers about high latency on this server */
-       bool bursting;                          /* whether or not this server is bursting */
 
        unsigned int UserCount;                 /* How many users are on this server? [note: doesn't care about +i] */
        unsigned int OperCount;                 /* How many opers are on this server? */
@@ -81,13 +99,27 @@ 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-
         * connected server which can be used to reach this server.
         */
-       TreeServer* GetRoute();
+       TreeServer* GetRoute() const { return Route; }
 
        /** Returns true if this server is the tree root (i.e.: us)
         */
@@ -97,9 +129,14 @@ 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();
+       const std::string& GetVersion() const { return VersionString; }
 
        /** Get the full version string of this server
         * @return The full version string of this server, including patch version and other info
@@ -141,16 +178,16 @@ class TreeServer : public Server
        /** Get the TreeSocket pointer for local servers.
         * For remote servers, this returns NULL.
         */
-       TreeSocket* GetSocket();
+       TreeSocket* GetSocket() const { return Socket; }
 
        /** Get the parent server.
         * For the root node, this returns NULL.
         */
-       TreeServer* GetParent();
+       TreeServer* GetParent() const { return Parent; }
 
        /** Set the server version string
         */
-       void SetVersion(const std::string &Version);
+       void SetVersion(const std::string& verstr) { VersionString = verstr; }
 
        /** Set the full version string
         * @param verstr The version string to set
@@ -167,23 +204,9 @@ class TreeServer : public Server
         */
        const ChildServers& GetChildren() const { return Children; }
 
-       /** Add a child server
-        */
-       void AddChild(TreeServer* Child);
-
-       /** Delete a child server, return false if it didn't exist.
-        */
-       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();
+       const std::string& GetID() const { return sid; }
 
        /** Marks a server as having finished bursting and performs appropriate actions.
         */
@@ -198,13 +221,22 @@ class TreeServer : public Server
        /** Get the bursting state of this server
         * @return True if this server is bursting, false if it isn't
         */
-       bool IsBursting() const { return bursting; }
+       bool IsBursting() const { return (StartBurst != 0); }
+
+       /** Check whether this server is behind a bursting server or is itself bursting.
+        * This can tell whether a user is on a part of the network that is still bursting.
+        * @return True if this server is bursting or is behind a server that is bursting, false if it isn't
+        */
+       bool IsBehindBursting() const { return (behind_bursting != 0); }
+
+       /** Set the bursting state of the server
+        * @param startms Time the server started bursting, if 0 or omitted, use current time
+        */
+       void BeginBurst(unsigned long startms = 0);
 
        CullResult cull();
 
-       /** Destructor
-        * Removes the reference to this object from the
-        * hash maps.
+       /** Destructor, deletes ServerUser unless IsRoot()
         */
        ~TreeServer();