summaryrefslogtreecommitdiff
path: root/doc/technical/ts6.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/technical/ts6.txt')
-rw-r--r--doc/technical/ts6.txt267
1 files changed, 267 insertions, 0 deletions
diff --git a/doc/technical/ts6.txt b/doc/technical/ts6.txt
new file mode 100644
index 0000000..d1e29e8
--- /dev/null
+++ b/doc/technical/ts6.txt
@@ -0,0 +1,267 @@
+$Id$
+
+TS6 Proposal (v7)
+Written by Lee H <lee@leeh.co.uk>
+
+Introduction
+------------
+
+This document aims to fix some of the flaws that are still present in the
+current TS system.
+
+Whilst only one person may use a nickname at any one time, they are not
+a reliable method of directing commands between servers. Clients can change
+their nicknames, which can create desyncs. A reliable method of directing
+messages between servers is required so that a message will always reach the
+intended destination, even if the client changes nicks in between.
+
+UID solves this problem by ensuring that a client has a unique ID for the
+duration of his connection.
+
+This document also aims to solve the lack of TS rules to channel 'bans' on
+a netburst. Bans from both sides of a TS war (losing/winning) are kept.
+Bursting the bans with a TS solves this problem.
+
+There is also a race condition in the current TS system, where a user can
+issue a mode during a netburst and the mode will be set on the server
+we are bursting to.
+
+
+Definitions
+-----------
+
+Throughout this document, the following terms are used:
+
+SID - A servers unique ID. This is three characters long and must be in
+ the form [0-9][A-Z0-9][A-Z0-9]
+ID - A clients unique ID. This is six characters long and must be in
+ the form [A-Z][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]. The
+ numbers [0-9] at the beginning of an ID are legal characters, but
+ reserved for future use.
+UID - An ID concateneted to a SID. This forms the clients UID.
+TS6 - The TS version 6.
+
+
+Support
+-------
+
+Support for this document is given by the TS version 6.
+
+Wherever a destination parameter or source parameter is used, it must use
+the SID or UID if the server/client has one. A TS6 capable server must
+translate any SIDs/UIDs back into the server/clients name when communicating
+with a server that does not support TS6.
+
+A TS6 server must also support the QS (quitstorm) system, and the encap
+specification found here:
+http://www.leeh.co.uk/ircd/encap.txt
+
+The TS6 protocol does not supports masked entities.
+
+
+Nick TS rules
+-------------
+
+A server receiving a command that requires nick TS rules must check for a
+collision between an existing user, and the nick in the received message.
+(the "new user"). The collisions must obey the rules specified in Nick TS
+collisions.
+
+If the TS received is lower than the TS of the existing user the server will
+collide the existing user if the clients user@host are different, if the
+clients user@hosts are identical it will collide the new user.
+
+If the TS received is equal to the TS of the existing user both clients are
+collided.
+
+If the TS received is higher than the TS of the existing user, the server
+will collide the existing user if the user@hosts are identical, if the
+clients user@host are different it will collide the new user and drop the
+message.
+
+
+Nick TS collisions
+------------------
+
+If both users are to be collided, we must issue a KILL for the existing
+user to all servers. If the new user has a UID then we must also issue a
+KILL for that UID back to the server sending us data causing the collision.
+
+If only the existing user is being collided, we must issue a KILL for the
+existing user to all servers except the server sending us data. If the
+existing user has a UID and the server sending us data supports TS6 then
+we must also issue a KILL for the existing users UID to the server sending
+us data.
+
+If only the new user is being collided, we must issue a KILL for the new user
+back to the server sending us data if the new user has a UID.
+
+
+Channel TS rules
+----------------
+
+A server receiving a command that requires normal channel TS rules must
+apply the following rules to the command.
+
+If the TS received is lower than our TS of the channel a TS6 server must
+remove status modes (+ov etc) and channel modes (+nt etc). If the
+originating server is TS6 capable (ie, it has a SID), the server must
+also remove any ban modes (+b etc). The new modes and statuses are then
+accepted.
+
+If any bans are removed, the server must send to non-TS6, directly connected
+servers mode changes removing the bans after the command is propagated.
+This prevents desync with banlists, and has to be sent after as clients are
+still able to send mode changes before the triggering command arrives.
+
+If the TS received is equal to our TS of the channel the server should keep
+its current modes and accept the received modes and statuses.
+
+If the TS received is higher than our TS of the channel the server should keep
+its current modes and ignore the received modes and statuses. Any statuses
+given in the received message will be removed. A server must mark clients
+losing their op (+o) status who do not have a UID as 'deopped'. A server must
+ignore any "MODE" commands from a user marked as 'deopped'.
+
+
+Simple channel TS rules
+-----------------------
+
+A server receiving a command that requires simple channel TS rules must
+apply the following rules to the command.
+
+If the TS received is lower, or equal to our TS of the channel the modes are
+accepted. If the TS received is higher than our TS of the channel the modes
+are ignored and dropped.
+
+Simple channel TS rules do not affect current modes in the channel except
+for the modes we are accepting.
+
+
+The following commands are defined here as the TS6 protocol
+-----------------------------------------------------------
+
+PASS:
+PASS <PASSWORD> TS <TS_CURRENT> :<SID>
+
+This command is used for password verification with the server we are
+connecting to.
+
+Due to the burst being sent on verification of the "SERVER" command, and
+"SVINFO" being sent after "SERVER", we need to be aware of the TS version
+earlier to decide whether to send a TS6 burst or not.
+
+The <PASSWORD> field is the password we have stored for this server,
+<TS_CURRENT> is our current TS version. If this field is not present then
+the server does not support TS6. <SID> is the SID of the server.
+
+UID:
+:<SID> UID <NICK> <HOPS> <TS> +<UMODE> <USERNAME> <HOSTNAME> <IP> <UID> :<GECOS>
+
+This command is used for introducing clients to the network.
+
+The <SID> field is the SID of the server the client is connected to.
+The <NICK> field is the nick of the client being introduced. The <HOPS>
+field is the amount of server hops between the server being burst to and
+the server the client is on. The <TS> field is the TS of the client, either
+the time they connected or the time they last changed nick. The <UMODE>
+field contains the clients usermodes that need to be transmitted between
+servers. The <USERNAME> field contains the clients username/ident. The
+<HOSTNAME> field contains the clients host.
+
+The <IP> field contains the clients IP. If the IP is not to be sent
+(due to a spoof etc), the field must be sent as "0". The <UID> field is the
+clients UID. The <GECOS> field is the clients gecos.
+
+A server receiving a UID command must apply nick TS rules to the nick.
+
+SID:
+:<SID> SID <SERVERNAME> <HOPS> <SID> :<GECOS>
+
+This command is used for introducing servers to the network.
+
+The first <SID> field is the SID of the new servers uplink. The
+<SERVERNAME> field is the new servers name. The <HOPS> field is the hops
+between the server being introduced nd the server being burst to.
+
+The second <SID> field is the SID of the new server. The <GECOS> field i
+is the new servers gecos.
+
+Upon receiving the SID command servers must check for a SID collision.
+Two servers must not be allowed to link to the network with the same SID.
+If a server detects a SID collision it must drop the link to the directly
+connected server through which the command was received.
+
+Client and servers which do not have a UID/SID must be introduced by old
+methods.
+
+SJOIN:
+:<SID> SJOIN <TS> <CHANNAME> +<CHANMODES> :<UIDS>
+
+This command is used for introducing users to channels.
+
+The <SID> field is the SID of the server introducing users to the channel.
+The <TS> field is the channels current TS, <CHANNAME> is the channels
+current name, <CHANMODES> are the channels current modes. <UIDS> is a
+space delimited list of clients UIDs to join to the channel. Each clients
+UID is prefixed with their status on the channel, ie "@UID" for an opped
+user. Multiple prefixes are allowed, "peons" (clients without a status) are
+not prefixed.
+
+A server receiving an SJOIN must apply normal channel TS rules to the SJOIN.
+
+A TS6 server must not use the SJOIN command outside of a netburst
+to introduce a single user to an existing channel. It must instead
+use the "JOIN" command defined in this specification. A TS6 server must
+still use SJOIN for creating channels.
+
+JOIN:
+:<UID> JOIN <TS> <CHANNAME> +<CHANMODES>
+
+This command is used for introducing one user unopped to an existing channel.
+
+The <UID> field is the UID of the client joining the channel. The
+<TS> field is the channels current TS, <CHANNAME> is the channels
+current name, <CHANMODES> are the channels current modes.
+
+A server receiving a JOIN must apply normal channel TS rules to the JOIN.
+
+It should be noted that whilst JOIN would not normally create a
+channel, during specific race conditions it can. This can create
+a ban desync that this specification does not rectify.
+
+BMASK:
+:<SID> BMASK <TS> <CHANNAME> <TYPE> :<MASKS>
+
+This command is used for bursting channel bans to a network.
+
+The <SID> field is the SID of the server bursting the bans. The
+<TS> field is the channels current TS, <CHANNAME> is the channels
+name. <TYPE> is a single character identifying the mode type (ie,
+for a ban 'b'). <MASKS> is a space delimited list of masks of the
+given mode,limited only in length to the size of the buffer as defined
+by RFC1459.
+
+A server receiving a BMASK must apply simple channel TS rules to the BMASK.
+
+A TS6 server must translate BMASKs into raw modes for non-TS6
+capable servers. This command must be used only after SJOIN has
+been sent for the given channel.
+
+It should be noted however, that a BMASK with a lower TS should
+not be possible without a desync, due to it being sent after
+SJOIN.
+
+TMODE:
+:<UID> TMODE <TS> <CHANNAME> <MODESTRING>
+
+This command is used for clients issuing modes on a channel.
+
+<UID> is the UID of the client setting the mode. <TS> is the
+current TS of the channel, <CHANNAME> is the channels name.
+<MODESTRING> is the raw mode the client is setting.
+
+A server receiving a TMODE must apply simple channel TS rules to the TMODE.
+
+A TS6 server must translate MODEs issued by a local client into TMODE
+to send to other TS6 capable servers.