]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/treesocket.h
m_spanningtree Keep track of whether we've sent our burst, to be used for translation
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / treesocket.h
index 8c87c4df6dab1960de949aef43fcd06f8fe68dc4..f168085192c3f663fb2cba2efc90192dc51cbadf 100644 (file)
@@ -73,7 +73,7 @@ struct CapabData
        std::string ourchallenge;               /* Challenge sent for challenge/response */
        std::string theirchallenge;             /* Challenge recv for challenge/response */
        int capab_phase;                        /* Have sent CAPAB already */
-       bool auth_fingerprint;                  /* Did we auth using SSL fingerprint */
+       bool auth_fingerprint;                  /* Did we auth using SSL certificate fingerprint */
        bool auth_challenge;                    /* Did we auth using challenge/response */
 
        // Data saved from incoming SERVER command, for later use when our credentials have been accepted by the other party
@@ -89,6 +89,8 @@ struct CapabData
  */
 class TreeSocket : public BufferedSocket
 {
+       struct BurstState;
+
        std::string linkID;                     /* Description for this link */
        ServerState LinkState;                  /* Link state */
        CapabData* capab;                       /* Link setup data (held until burst is sent) */
@@ -98,6 +100,12 @@ class TreeSocket : public BufferedSocket
        int proto_version;                      /* Remote protocol version */
        bool ConnectionFailureShown; /* Set to true if a connection failure message was shown */
 
+       /** True if we've sent our burst.
+        * This only changes the behavior of message translation for 1202 protocol servers and it can be
+        * removed once 1202 support is dropped.
+        */
+       bool burstsent;
+
        /** Checks if the given servername and sid are both free
         */
        bool CheckDuplicate(const std::string& servername, const std::string& sid);
@@ -106,6 +114,51 @@ class TreeSocket : public BufferedSocket
         */
        void SendListModes(Channel* chan);
 
+       /** Send all known information about a channel */
+       void SyncChannel(Channel* chan, BurstState& bs);
+
+       /** Send all users and their oper state, away state and metadata */
+       void SendUsers(BurstState& bs);
+
+       /** Send all additional info about the given server to this server */
+       void SendServerInfo(TreeServer* from);
+
+       /** Find the User source of a command given a prefix and a command string.
+        * This connection must be fully up when calling this function.
+        * @param prefix Prefix string to find the source User object for. Can be a sid, a uuid or a server name.
+        * @param command The command whose source to find. This is required because certain commands (like mode
+        * changes and kills) must be processed even if their claimed source doesn't exist. If the given command is
+        * such a command and the source does not exist, the function returns a valid FakeUser that can be used to
+        * to process the command with.
+        * @return The command source to use when processing the command or NULL if the source wasn't found.
+        * Note that the direction of the returned source is not verified.
+        */
+       User* FindSource(const std::string& prefix, const std::string& command);
+
+       /** Finish the authentication phase of this connection.
+        * Change the state of the connection to CONNECTED, create a TreeServer object for the server on the
+        * other end of the connection using the details provided in the parameters, and finally send a burst.
+        * @param remotename Name of the remote server
+        * @param remotesid SID of the remote server
+        * @param remotedesc Description of the remote server
+        * @param hidden True if the remote server is hidden according to the configuration
+        */
+       void FinishAuth(const std::string& remotename, const std::string& remotesid, const std::string& remotedesc, bool hidden);
+
+       /** Authenticate the remote server.
+        * Validate the parameters and find the link block that matches the remote server. In case of an error,
+        * an appropriate snotice is generated, an ERROR message is sent and the connection is closed.
+        * Failing to find a matching link block counts as an error.
+        * @param params Parameters they sent in the SERVER command
+        * @return Link block for the remote server, or NULL if an error occurred
+        */
+       Link* AuthRemote(const parameterlist& params);
+
+       /** Write a line on this socket with a new line character appended, skipping all translation for old protocols
+        * @param line Line to write without a new line character at the end
+        */
+       void WriteLineNoCompat(const std::string& line);
+
  public:
        const time_t age;
 
@@ -224,9 +277,6 @@ class TreeSocket : public BufferedSocket
        /** Send all known information about a channel */
        void SyncChannel(Channel* chan);
 
-       /** send all users and their oper state/modes */
-       void SendUsers();
-
        /** This function is called when we want to send a netburst to a local
         * server. There is a set order we must do this, because for example
         * users require their servers to exist, and channels require their