ed3ca2ff16
Move opername and privset storage to struct User, so it can exist for remote opers. On /oper and when bursting opers, send: :foo OPER opername privset which sets foo's opername and privset. The contents of the privset on remote servers come from the remote server's config, so the potential for confusion exists if these do not match. If an oper's privset does not exist on a server that sees it, it will complain, but create a placeholder privset. If the privset is created by a rehash, this will be reflected properly. /privs is udpated to take an optional argument, the server to query, and is now local by default: /privs [[nick_or_server] nick]
1246 lines
35 KiB
Text
1246 lines
35 KiB
Text
TS6 protocol description
|
|
Written by Jilles Tjoelker
|
|
Edits by Elizabeth Myers to add TS rules described by Lee Harvey.
|
|
|
|
General format: much like rfc1459
|
|
Maximum parameters for a command: 15 (this does not include the prefix
|
|
and command name)
|
|
|
|
SID: a server's unique ID. It is configured in each server and consists of
|
|
a digit and two alphanumerics. Sending SIDs with lowercase letters is
|
|
questionable.
|
|
|
|
UID: a client's unique ID. It consists of the server's SID and six
|
|
alphanumerics (so it is nine characters long). The first of the alphanumerics
|
|
should be a letter, numbers are legal but reserved for future use.
|
|
|
|
hunted: a parameter type used for various remote requests. From local users,
|
|
nicknames and server names are accepted, possibly with wildcards; from servers,
|
|
UIDs/SIDs (sending names or even wildcards is deprecated). This is done with
|
|
the function hunt_server(). Any rate limiting should be done locally.
|
|
|
|
|
|
duration: a parameter type used for ban durations. It is a duration in seconds.
|
|
A value of 0 means a permanent ban.
|
|
|
|
IP addresses: IP addresses are converted to text in the usual way, including
|
|
'::' shortening in IPv6, with the exception that a zero is prepended to any
|
|
IP address that starts with a colon.
|
|
|
|
propagation: to which other servers the command is sent
|
|
|
|
For all commands with a hunted parameter, the propagation is determined by
|
|
that, and not otherwise specified.
|
|
|
|
For all commands with a target server mask parameter, the propagation is
|
|
determined by that, and not otherwise specified. The command is sent to all
|
|
servers with names matching the given mask (for example '*', '*.example.com',
|
|
'irc.example.com'). Those servers do not have to be directly connected.
|
|
Targets cannot be SIDs.
|
|
|
|
Propagation broadcast means the command is sent to all servers.
|
|
|
|
Propagation one-to-one means the command is only sent to the target or the
|
|
server the target is on.
|
|
|
|
Propagation none means the command is never sent to another server if it is
|
|
received.
|
|
|
|
For some other commands, the propagation depends on the parameters and is
|
|
described in text.
|
|
|
|
services server: server mentioned in a service{} block. There are no services
|
|
servers on EFnet.
|
|
|
|
service: client with umode +S. This implies that it is on a services server.
|
|
|
|
connection setup:
|
|
The initiator sends the PASS, CAPAB and SERVER messages. Upon receiving the
|
|
SERVER, the listener will check the information, and if it is valid, it will
|
|
send its own PASS, CAPAB and SERVER messages, followed by SVINFO and the burst.
|
|
Upon receiving the SERVER, the initiator will send SVINFO and the burst. If
|
|
ziplinks are used, SVINFO is the first compressed message.
|
|
|
|
The burst consists of SID and SERVER messages for all known servers, BAN
|
|
messages for all propagated bans, UID or EUID messages for all known users
|
|
(possibly followed by ENCAP REALHOST, ENCAP LOGIN and/or AWAY) and SJOIN
|
|
messages for all known channels (possibly followed by BMASK and/or TB).
|
|
|
|
user modes:
|
|
(all)
|
|
+D (deaf: does not receive channel messages)
|
|
+S (network service) (only settable on burst from a services server)
|
|
+a (appears as server administrator)
|
|
+i (invisible, see rfc1459)
|
|
+o (IRC operator, see rfc1459)
|
|
+w (wallops, see rfc1459) (always propagated for historical reasons)
|
|
(charybdis TS6)
|
|
+Q/+R/+g/+l/+s/+z (only locally effective)
|
|
+Z (ssl user) (only settable on burst)
|
|
possibly more added by modules
|
|
|
|
channel modes:
|
|
(all)
|
|
statuses
|
|
+o (prefix @) (ops)
|
|
+v (prefix +) (voice)
|
|
type A
|
|
+b (ban)
|
|
+e (ban exception) (capab: EX)
|
|
+I (invite exception) (capab: IE)
|
|
type B
|
|
+k (key: password required to join, <= 23 ascii chars, no : or , or whitespace)
|
|
type C
|
|
+l (limit: maximum number of members before further joins are disallowed)
|
|
type D
|
|
+m (moderated)
|
|
+n (no external messages)
|
|
+p (private: does not appear in /whois to non-members, no /knock allowed)
|
|
+r (only registered users may join) (only if a services server exists) (capab: SERVICES)
|
|
+s (secret)
|
|
+t (only chanops may change topic)
|
|
(charybdis TS6)
|
|
type A
|
|
+q (quiet)
|
|
type C
|
|
+f (forward: channel name <= 30 chars)
|
|
+j (join throttle: N:T with integer N and T)
|
|
type D
|
|
+F (free target for +f)
|
|
+L (large ban list)
|
|
+P (permanent: does not disappear when empty)
|
|
+Q (ignore forwards to this)
|
|
+c (strip colours)
|
|
+g (allow any member to /invite)
|
|
+z (send messages blocked by +m to chanops)
|
|
|
|
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.
|
|
|
|
|
|
<numeric>
|
|
source: server
|
|
parameters: target, any...
|
|
|
|
The command name should be three decimal ASCII digits.
|
|
|
|
Propagates a "numeric" command reply, such as from a remote WHOIS request.
|
|
|
|
If the first digit is 0 (indicating a reply about the local connection), it
|
|
should be changed to 1 before propagation or sending to a user.
|
|
|
|
Numerics to the local server may be sent to opers.
|
|
|
|
To avoid infinite loops, servers should not send any replies to numerics.
|
|
|
|
The target can be:
|
|
- a client
|
|
propagation: one-to-one
|
|
- a channel name
|
|
propagation: all servers with -D users on the channel
|
|
|
|
Numerics to channels are broken in some older servers.
|
|
|
|
ADMIN
|
|
source: user
|
|
parameters: hunted
|
|
|
|
Remote ADMIN request.
|
|
|
|
AWAY
|
|
source: user
|
|
propagation: broadcast
|
|
parameters: opt. away reason
|
|
|
|
If the away reason is empty or not present, mark the user as not away.
|
|
Otherwise, mark the user as away.
|
|
|
|
Changing away reason from one non-empty string to another non-empty string
|
|
may not be propagated.
|
|
|
|
BAN
|
|
charybdis TS6
|
|
capab: BAN
|
|
source: any
|
|
propagation: broadcast (restricted)
|
|
parameters: type, user mask, host mask, creation TS, duration, lifetime, oper, reason
|
|
|
|
Propagates a network wide ban.
|
|
|
|
The type is K for K:lines, R for resvs and X for X:lines; other types are
|
|
reserved. The user mask field is only used for K:lines; for resvs and X:lines
|
|
the field is ignored in input and sent as an asterisk.
|
|
|
|
The creation TS indicates when this ban was last modified. An incoming ban MUST
|
|
be ignored and not propagated if the creation TS is older than the creation TS
|
|
of the current ban. If the ban is identical, it SHOULD NOT be propagated to
|
|
avoid unnecessary network traffic. (Two changes to bans that set the TS to the
|
|
same value may cause desynchronization.)
|
|
|
|
The duration is 0 for an unban and relative to the creation TS for a ban.
|
|
When the duration has passed, the ban is no longer active but it may still
|
|
be necessary to remember it.
|
|
|
|
The lifetime is relative to the creation TS and indicates for how long this
|
|
ban needs to be remembered and propagated. This MUST be at least the duration.
|
|
Initially, it is usually set the same as the duration but when the ban is
|
|
modified later, it SHOULD be set such that the modified ban is remembered at
|
|
least as long as the original ban. This ensures that the original ban does not
|
|
revive via split servers. This requirement is only a SHOULD to allow for
|
|
implementations that only inject bans and do not remember any; implementations
|
|
that remember and propagate bans MUST set the lifetime appropriately.
|
|
|
|
The oper field indicates the oper that originally set the ban. If this message
|
|
is the initial propagation of a change, it SHOULD be sent as * (an asterisk).
|
|
|
|
The reason field indicates the reason for the ban. Any part after a | (vertical
|
|
bar) MUST NOT be shown to normal users. The rest of the field and the creation
|
|
TS and duration MAY be shown to normal users.
|
|
|
|
BMASK
|
|
source: server
|
|
propagation: broadcast
|
|
parameters: channelTS, channel, type, space separated masks
|
|
|
|
If the channelTS in the message is greater (newer) than the current TS of
|
|
the channel, drop the message and do not propagate it.
|
|
|
|
Type is the mode letter of a ban-like mode. In efnet TS6 this is 'b', 'e' or
|
|
'I'. In charybdis TS6 additionally 'q' is possible.
|
|
|
|
Add all the masks to the given list of the channel.
|
|
|
|
All ban-like modes must be bursted using this command, not using MODE or TMODE.
|
|
|
|
CAPAB
|
|
source: unregistered server
|
|
propagation: none
|
|
parameters: space separated capability list
|
|
|
|
Sends capabilities of the server. This must include QS and ENCAP, and for
|
|
charybdis TS6 also EX and IE. It is also strongly recommended to include EX,
|
|
CHW, IE and KNOCK, and for charybdis TS6 also SAVE and EUID. For use with
|
|
services, SERVICES and RSFNC are strongly recommended.
|
|
|
|
The capabilities may depend on the configuration for the server they are sent
|
|
to.
|
|
|
|
CHGHOST
|
|
charybdis TS6
|
|
source: any
|
|
propagation: broadcast
|
|
parameters: client, new hostname
|
|
|
|
Changes the visible hostname of a client.
|
|
|
|
Opers are notified unless the source is a server or a service.
|
|
|
|
CONNECT
|
|
source: any
|
|
parameters: server to connect to, port, hunted
|
|
|
|
Remote connect request. A server WALLOPS should be sent by the receiving
|
|
server.
|
|
|
|
The port can be 0 for the default port.
|
|
|
|
DLINE
|
|
charybdis TS6
|
|
encap only
|
|
source: user
|
|
parameters: duration, mask, reason
|
|
|
|
Sets a D:line (IP ban checked directly after accepting connection).
|
|
|
|
The mask must be an IP address or CIDR mask.
|
|
|
|
ENCAP
|
|
source: any
|
|
parameters: target server mask, subcommand, opt. parameters...
|
|
|
|
Sends a command to matching servers. Propagation is independent of
|
|
understanding the subcommand.
|
|
|
|
Subcommands are listed elsewhere with "encap only".
|
|
|
|
ERROR
|
|
source: server or unregistered server
|
|
propagation: none
|
|
parameters: error message
|
|
|
|
Reports a (usually fatal) error with the connection.
|
|
|
|
Error messages may contain IP addresses and have a negative effect on server
|
|
IP hiding.
|
|
|
|
ETB
|
|
capab: EOPMOD
|
|
source: any
|
|
propagation: broadcast
|
|
parameters: channelTS, channel, topicTS, topic setter, opt. extensions, topic
|
|
|
|
Propagates a channel topic change or propagates a channel topic as part of a
|
|
burst.
|
|
|
|
If the channel had no topic yet, the channelTS in the message is lower (older)
|
|
than the current TS of the channel, or the channelTSes are equal and the
|
|
topicTS in the message is newer than the topicTS of the current topic on the
|
|
channel, set the topic with topicTS and topic setter, and propagate the
|
|
message. Otherwise ignore the message and do not propagate it.
|
|
|
|
Unlike a TB message, an ETB message can change the topicTS without changing
|
|
the topic text. In this case, the message should be propagated to servers but
|
|
local users should not be notified.
|
|
|
|
Services can send a channelTS of 0 to force restoring an older topic (unless
|
|
the channel's TS is 0). Therefore, the channelTS should be propagated as given
|
|
and should not be replaced by the current TS of the channel.
|
|
|
|
An ETB message with a newer channelTS can still set a topic on a channel
|
|
without topic. This corresponds to SJOIN not clearing the topic when lowering
|
|
TS on a channel.
|
|
|
|
If ETB comes from a user, it can be propagated to non-EOPMOD servers using
|
|
TOPIC, TB or a combination of TOPIC to clear the topic and TB to set a new
|
|
topic with topicTS. However, this can be somewhat noisy. On the other hand, if
|
|
ETB comes from a server, there is no way to force setting a newer topicTS. It
|
|
is possible to set the topic text but the incorrect topicTS may lead to desync
|
|
later on.
|
|
|
|
This document does not document the optional extensions between topic setter
|
|
and topic.
|
|
|
|
ETRACE
|
|
encap only
|
|
encap target: single server
|
|
source: oper
|
|
parameters: client
|
|
|
|
Remote ETRACE information request.
|
|
|
|
EUID
|
|
charybdis TS6
|
|
capab: EUID
|
|
source: server
|
|
parameters: nickname, hopcount, nickTS, umodes, username, visible hostname, IP address, UID, real hostname, account name, gecos
|
|
propagation: broadcast
|
|
|
|
Introduces a client. The client is on the source server of this command.
|
|
|
|
The IP address MUST be '0' (a zero) if the true address is not sent such as
|
|
because of a spoof. Otherwise, and if there is no dynamic spoof (i.e. the
|
|
visible and real hostname are equal), the IP address MAY be shown to normal
|
|
users.
|
|
|
|
The account name is '*' if the user is not logged in with services.
|
|
|
|
Nick TS rules apply.
|
|
|
|
EUID is similar to UID but includes the ENCAP REALHOST and ENCAP LOGIN
|
|
information.
|
|
|
|
GCAP
|
|
encap only
|
|
encap target: *
|
|
source: server
|
|
parameters: space separated capability list
|
|
|
|
Capability list of remote server.
|
|
|
|
GLINE
|
|
efnet TS6
|
|
capab: GLN
|
|
source: user
|
|
parameters: user mask, host mask, reason
|
|
propagation: broadcast
|
|
|
|
Propagates a G:line vote. Once votes from three different opers (based on
|
|
user@host mask) on three different servers have arrived, trigger the G:line.
|
|
Pending G:lines expire after some time, usually ten minutes. Triggered G:lines
|
|
expire after a configured time which may differ across servers.
|
|
|
|
Requests from server connections must be propagated, unless they are found to
|
|
be syntactically invalid (e.g. '!' in user mask). Therefore, disabling glines
|
|
must not affect propagation, and too wide glines, double votes and glines that
|
|
already exist locally must still be propagated.
|
|
|
|
Of course, servers are free to reject gline requests from their own operators.
|
|
|
|
GUNGLINE
|
|
efnet TS6
|
|
encap only
|
|
encap target: *
|
|
source: user
|
|
parameters: user mask, host mask, reason
|
|
propagation: broadcast
|
|
|
|
Propagates a G:line removal vote. Once three votes have arrived (as with
|
|
G:lines), remove the G:line. Pending G:lines removals expire after some time,
|
|
usually ten minutes.
|
|
|
|
Pending G:line removals do not interact with pending G:lines. Triggering a
|
|
G:line does not affect a pending G:line removal. Triggering a G:line removal
|
|
does not affect a pending G:line.
|
|
|
|
INFO
|
|
source: user
|
|
parameters: hunted
|
|
|
|
Remote INFO request.
|
|
|
|
INVITE
|
|
source: user
|
|
parameters: target user, channel, opt. channelTS
|
|
propagation: one-to-one
|
|
|
|
Invites a user to a channel.
|
|
|
|
If the channelTS is greater (newer) than the current TS of the channel, drop
|
|
the message.
|
|
|
|
Not sending the channelTS parameter is deprecated.
|
|
|
|
JOIN
|
|
1.
|
|
source: user
|
|
parameters: '0' (one ASCII zero)
|
|
propagation: broadcast
|
|
|
|
Parts the source user from all channels.
|
|
|
|
2.
|
|
source: user
|
|
parameters: channelTS, channel, '+' (a plus sign)
|
|
propagation: broadcast
|
|
|
|
Joins the source user to the given channel. If the channel does not exist yet,
|
|
it is created with the given channelTS and no modes. If the channel already
|
|
exists and has a greater (newer) TS, wipe all simple modes and statuses and
|
|
change the TS, notifying local users of this but not servers (note that
|
|
ban-like modes remain intact; invites may or may not be cleared).
|
|
|
|
A JOIN is propagated with the new TS of the channel.
|
|
|
|
JUPE
|
|
capab: JUPE
|
|
source: any
|
|
propagation: broadcast (restricted)
|
|
parameters: target server mask, add or delete, server name, oper, reason
|
|
|
|
Adds or removes a jupe for a server. If the server is presently connected,
|
|
it MUST be SQUIT by the server's uplink when the jupe is applied.
|
|
|
|
The oper field indicates the oper that originally set the jupe. If this message
|
|
is the initial propagation of a removal, it SHOULD be sent as * (an asterisk).
|
|
|
|
The reason field indicates the reason for the jupe. It SHOULD be displayed
|
|
as the linking error message to the juped server if it tries to reconnect.
|
|
|
|
KICK
|
|
source: any
|
|
parameters: channel, target user, opt. reason
|
|
propagation: broadcast
|
|
|
|
Kicks the target user from the given channel.
|
|
|
|
Unless the channel's TS is 0, no check is done whether the source user has ops.
|
|
|
|
Not sending the reason parameter is questionable.
|
|
|
|
KILL
|
|
source: any
|
|
parameters: target user, path
|
|
propagation: broadcast
|
|
|
|
Removes the user from the network.
|
|
|
|
The format of the path parameter is some sort of description of the source of
|
|
the kill followed by a space and a parenthesized reason. To avoid overflow,
|
|
it is recommended not to add anything to the path.
|
|
|
|
KLINE
|
|
1.
|
|
encap only
|
|
source: user
|
|
parameters: duration, user mask, host mask, reason
|
|
|
|
Sets a K:line (ban on user@host).
|
|
|
|
2.
|
|
capab: KLN
|
|
source: user
|
|
parameters: target server mask, duration, user mask, host mask, reason
|
|
|
|
As form 1, deprecated.
|
|
|
|
KNOCK
|
|
capab: KNOCK
|
|
source: user
|
|
parameters: channel
|
|
propagation: broadcast
|
|
|
|
Requests an invite to a channel that is locked somehow (+ikl). Notifies all
|
|
operators of the channel. (In charybdis, on +g channels all members are
|
|
notified.)
|
|
|
|
This is broadcast so that each server can store when KNOCK was used last on
|
|
a channel.
|
|
|
|
LINKS
|
|
source: user
|
|
parameters: hunted, server mask
|
|
|
|
Remote LINKS request. The server mask limits which servers are listed.
|
|
|
|
LOCOPS
|
|
1.
|
|
encap only
|
|
source: user
|
|
parameters: text
|
|
|
|
Sends a message to operators (with umode +l set). This is intended to be
|
|
used for strict subsets of the network.
|
|
|
|
2.
|
|
capab: CLUSTER
|
|
source: user
|
|
parameters: target server mask, text
|
|
|
|
As form 1, deprecated.
|
|
|
|
LOGIN
|
|
encap only
|
|
source: user
|
|
parameters: account name
|
|
|
|
In a burst, states that the source user is logged in as the account.
|
|
|
|
LUSERS
|
|
source: user
|
|
parameters: server mask, hunted
|
|
|
|
Remote LUSERS request. Most servers ignore the server mask, treating it as '*'.
|
|
|
|
MLOCK
|
|
charybdis TS6
|
|
source: services server
|
|
parameters: channelTS, channel, mode letters
|
|
propagation: broadcast (restricted)
|
|
|
|
Propagates a channel mode lock change.
|
|
|
|
If the channelTS is greater (newer) than the current TS of the channel, drop
|
|
the message.
|
|
|
|
The final parameter is a list of mode letters that may not be changed by local
|
|
users. This applies to setting or unsetting simple modes, and changing or
|
|
removing mode parameters.
|
|
|
|
An MLOCK message with no modes disables the MLOCK, therefore the MLOCK message
|
|
always contains the literal MLOCK for simplicity.
|
|
|
|
MODE
|
|
1.
|
|
source: user
|
|
parameters: client, umode changes
|
|
propagation: broadcast
|
|
|
|
Propagates a user mode change. The client parameter must refer to the same user
|
|
as the source.
|
|
|
|
Not all umodes are propagated to other servers.
|
|
|
|
2.
|
|
source: any
|
|
parameters: channel, cmode changes, opt. cmode parameters...
|
|
|
|
Propagates a channel mode change.
|
|
|
|
This is deprecated because the channelTS is not included. If it is received,
|
|
it should be propagated as TMODE.
|
|
|
|
MOTD
|
|
source: user
|
|
parameters: hunted
|
|
|
|
Remote MOTD request.
|
|
|
|
NICK
|
|
1.
|
|
source: user
|
|
parameters: new nickname, new nickTS
|
|
propagation: broadcast
|
|
|
|
Propagates a nick change.
|
|
|
|
2.
|
|
source: server
|
|
parameters: nickname, hopcount, nickTS, umodes, username, hostname, server, gecos
|
|
|
|
Historic TS5 user introduction. The user is on the server indicated by the
|
|
server parameter; the source server is meaningless (local link).
|
|
|
|
NICKDELAY
|
|
charybdis TS6
|
|
encap only
|
|
encap target: *
|
|
source: services server
|
|
parameters: duration, nickname
|
|
|
|
If duration is greater than 0, makes the given nickname unavailable for that
|
|
time.
|
|
|
|
If duration is 0, removes a nick delay entry for the given nickname.
|
|
|
|
There may or may not be a client with the given nickname; this does not affect
|
|
the operation.
|
|
|
|
NOTICE
|
|
source: any
|
|
parameters: msgtarget, message
|
|
|
|
As PRIVMSG, except NOTICE messages are sent out, server sources are permitted
|
|
and most error messages are suppressed.
|
|
|
|
Servers may not send '$$', '$#' and opers@server notices. Older servers may
|
|
not allow servers to send to specific statuses on a channel.
|
|
|
|
OPER
|
|
source: user
|
|
parameters: opername, privset
|
|
|
|
Sets the source user's oper name and privset. Sent after the +o mode change, or
|
|
during burst, to inform other servers of an oper's privileges.
|
|
|
|
OPERSPY
|
|
encap only
|
|
encap target: *
|
|
source: user
|
|
parameters: command name, parameters
|
|
|
|
Reports operspy usage.
|
|
|
|
OPERWALL
|
|
source: user
|
|
parameters: message
|
|
propagation: broadcast
|
|
|
|
Sends a message to operators (with umode +z set).
|
|
|
|
PART
|
|
source: user
|
|
parameters: comma separated channel list, message
|
|
|
|
Parts the source user from the given channels.
|
|
|
|
PASS
|
|
source: unregistered server
|
|
parameters: password, 'TS', TS version, SID
|
|
|
|
Sends the server link password, TS version and SID.
|
|
|
|
PING
|
|
source: any
|
|
parameters: origin, opt. destination server
|
|
|
|
Sends a PING to the destination server, which will reply with a PONG. If the
|
|
destination server parameter is not present, the server receiving the message
|
|
must reply.
|
|
|
|
The origin field is not used in the server protocol. It is sent as the name
|
|
(not UID/SID) of the source.
|
|
|
|
Remote PINGs are used for end-of-burst detection, therefore all servers must
|
|
implement them.
|
|
|
|
PONG
|
|
source: server
|
|
parameters: origin, destination
|
|
|
|
Routes a PONG back to the destination that originally sent the PING.
|
|
|
|
PRIVMSG
|
|
source: user
|
|
parameters: msgtarget, message
|
|
|
|
Sends a normal message (PRIVMSG) to the given target.
|
|
|
|
The target can be:
|
|
- a client
|
|
propagation: one-to-one
|
|
- a channel name
|
|
propagation: all servers with -D users on the channel
|
|
(cmode +m/+n should be checked everywhere, bans should not be checked
|
|
remotely)
|
|
- a status character ('@'/'+') followed by a channel name, to send to users
|
|
with that status or higher only.
|
|
capab: CHW
|
|
propagation: all servers with -D users with appropriate status
|
|
- '=' followed by a channel name, to send to chanops only, for cmode +z.
|
|
capab: CHW and EOPMOD
|
|
propagation: all servers with -D chanops
|
|
- a user@server message, to send to users on a specific server. The exact
|
|
meaning of the part before the '@' is not prescribed, except that "opers"
|
|
allows IRC operators to send to all IRC operators on the server in an
|
|
unspecified format.
|
|
propagation: one-to-one
|
|
- a message to all users on server names matching a mask ('$$' followed by mask)
|
|
propagation: broadcast
|
|
Only allowed to IRC operators.
|
|
- a message to all users with hostnames matching a mask ('$#' followed by mask).
|
|
Note that this is often implemented poorly.
|
|
propagation: broadcast
|
|
Only allowed to IRC operators.
|
|
|
|
In charybdis TS6, services may send to any channel and to statuses on any
|
|
channel.
|
|
|
|
PRIVS
|
|
charybdis TS6
|
|
encap only
|
|
encap target: single server
|
|
source: oper
|
|
parameters: client
|
|
|
|
Remote PRIVS information request.
|
|
|
|
QUIT
|
|
source: user
|
|
parameters: comment
|
|
|
|
Propagates quitting of a client. No QUIT should be sent for a client that
|
|
has been removed as result of a KILL message.
|
|
|
|
REALHOST
|
|
charybdis TS6
|
|
encap only
|
|
encap target: *
|
|
source: user
|
|
parameters: real hostname
|
|
|
|
In a burst, propagates the real host of a dynamically-spoofed user.
|
|
|
|
REHASH
|
|
charybdis TS6
|
|
encap only
|
|
source: user
|
|
parameters: opt. rehash type
|
|
|
|
Remote REHASH request. If the rehash type is omitted, it is equivalent to
|
|
a regular /rehash, otherwise it is equivalent to /rehash <rehash type>.
|
|
|
|
RESV
|
|
1.
|
|
encap only
|
|
source: user
|
|
parameters: duration, mask, reason
|
|
|
|
Sets a RESV, making a nickname mask or exact channel unavailable.
|
|
|
|
2.
|
|
capab: CLUSTER
|
|
source: user
|
|
parameters: target server mask, duration, mask, reason
|
|
|
|
As form 1, deprecated.
|
|
|
|
RSFNC
|
|
encap only
|
|
capab: RSFNC
|
|
encap target: single server
|
|
source: services server
|
|
parameters: target user, new nickname, new nickTS, old nickTS
|
|
|
|
Forces a nickname change and propagates it.
|
|
|
|
The command is ignored if the nick TS of the user is not equal to the old
|
|
nickTS parameter. If the new nickname already exists (and is not the target
|
|
user), it is killed first.
|
|
|
|
SASL
|
|
charybdis TS6
|
|
encap only
|
|
1.
|
|
encap target: *
|
|
source: server
|
|
parameters: source uid, '*', 'S', sasl mechanism name
|
|
|
|
Requests that a SASL agent (a service) initiate the authentication process.
|
|
The source uid is that of an unregistered client. This is why it is not sent
|
|
as the prefix.
|
|
|
|
2.
|
|
encap target: single server
|
|
source: server
|
|
parameters: source uid, target uid, mode, data
|
|
|
|
Part of a SASL authentication exchange. The mode is 'C' to send some data
|
|
(base64 encoded), or 'D' to end the exchange (data indicates type of
|
|
termination: 'A' for abort, 'F' for authentication failure, 'S' for
|
|
authentication success).
|
|
|
|
3.
|
|
encap target: *
|
|
source: server
|
|
parameters: source uid, '*', 'H', hostname, ip, tls
|
|
|
|
Provides information on a client. The "tls" data is either 'P' for a
|
|
plaintext connection or any other string for a TLS connection.
|
|
The source uid is that of an unregistered client. This is why it is not sent
|
|
as the prefix.
|
|
|
|
SAVE
|
|
capab: SAVE
|
|
source: server
|
|
propagation: broadcast
|
|
parameters: target uid, TS
|
|
|
|
Resolve a nick collision by changing a nickname to the UID.
|
|
|
|
The server should verify that the UID belongs to a registered user, the user
|
|
does not already have their UID as their nick and the TS matches the user's
|
|
nickTS. If not, drop the message.
|
|
|
|
SAVE should be propagated as a regular NICK change to links without SAVE capab.
|
|
present.
|
|
|
|
SERVER
|
|
1.
|
|
source: unregistered server
|
|
parameters: server name, hopcount, server description
|
|
|
|
Registers the connection as a server. PASS and CAPAB must have been sent
|
|
before, SVINFO should be sent afterwards.
|
|
|
|
If there is no such server configured or authentication failed, the connection
|
|
should be dropped.
|
|
|
|
This is propagated as a SID message.
|
|
|
|
2.
|
|
source: server
|
|
propagation: broadcast
|
|
parameters: server name, hopcount, server description
|
|
|
|
Introduces a new TS5 server, directly connected to the source of this command.
|
|
This is only used for jupes as TS5 servers may do little else than existing.
|
|
|
|
SID
|
|
source: server
|
|
propagation: broadcast
|
|
parameters: server name, hopcount, sid, server description
|
|
|
|
Introduces a new server, directly connected to the source of this command.
|
|
|
|
SIGNON
|
|
source: user
|
|
propagation: broadcast
|
|
parameters: new nickname, new username, new visible hostname, new nickTS, new login name
|
|
|
|
Broadcasts a change of several user parameters at once.
|
|
|
|
Currently only sent after an SVSLOGIN.
|
|
|
|
SJOIN
|
|
source: server
|
|
propagation: broadcast
|
|
parameters: channelTS, channel, simple modes, opt. mode parameters..., nicklist
|
|
|
|
Broadcasts a channel creation or bursts a channel.
|
|
|
|
The nicklist consists of users joining the channel, with status prefixes for
|
|
their status ('@+', '@', '+' or ''), for example:
|
|
'@+1JJAAAAAB +2JJAAAA4C 1JJAAAADS'. All users must be behind the source server
|
|
so it is not possible to use this message to force users to join a channel.
|
|
|
|
The interpretation depends on the channelTS and the current TS of the channel.
|
|
If either is 0, set the channel's TS to 0 and accept all modes. Otherwise, if
|
|
the incoming channelTS is greater (newer), ignore the incoming simple modes
|
|
and statuses and join and propagate just the users. If the incoming channelTS
|
|
is lower (older), wipe all modes and change the TS, notifying local users of
|
|
this but not servers (invites may be cleared). In the latter case, kick on
|
|
split riding may happen: if the key (+k) differs or the incoming simple modes
|
|
include +i, kick all local users, sending KICK messages to servers.
|
|
|
|
An SJOIN is propagated with the new TS and modes of the channel. The statuses
|
|
are propagated if and only if they were accepted.
|
|
|
|
SJOIN must be used to propagate channel creation and in netbursts. For regular
|
|
users joining channels, JOIN must be used. Pseudoservers may use SJOIN to join
|
|
a user with ops.
|
|
|
|
SNOTE
|
|
charybdis TS6
|
|
encap only
|
|
source: server
|
|
parameters: snomask letter, text
|
|
|
|
Sends the text as a server notice from the source server to opers with the
|
|
given snomask set.
|
|
|
|
SQUIT
|
|
parameters: target server, comment
|
|
|
|
Removes the target server and all servers and users behind it from the network.
|
|
|
|
If the target server is the receiving server or the local link this came from,
|
|
this is an announcement that the link is being closed.
|
|
|
|
Otherwise, if the target server is locally connected, the server should send
|
|
a WALLOPS announcing the SQUIT.
|
|
|
|
STATS
|
|
source: user
|
|
parameters: stats letter, hunted
|
|
|
|
Remote STATS request. Privileges are checked on the server executing the
|
|
actual request.
|
|
|
|
SU
|
|
encap only
|
|
encap target: *
|
|
source: services server
|
|
parameters: target user, new login name (optional)
|
|
|
|
If the new login name is not present or empty, mark the target user as not
|
|
logged in, otherwise mark the target user as logged in as the given account.
|
|
|
|
SVINFO
|
|
source: server
|
|
propagation: none
|
|
parameters: current TS version, minimum TS version, '0', current time
|
|
|
|
Verifies TS protocol compatibility and clock. If anything is not in order,
|
|
the link is dropped.
|
|
|
|
The current TS version is the highest version supported by the source server
|
|
and the minimum TS version is the lowest version supported.
|
|
|
|
The current time is sent as a TS in the usual way.
|
|
|
|
SVSLOGIN
|
|
charybdis TS6
|
|
encap only
|
|
encap target: single server
|
|
source: services server
|
|
parameters: target, new nick, new username, new visible hostname, new login name
|
|
|
|
Sent after successful SASL authentication.
|
|
|
|
The target is a UID, typically an unregistered one.
|
|
|
|
Any of the "new" parameters can be '*' to leave the corresponding field
|
|
unchanged. The new login name can be '0' to log the user out.
|
|
|
|
If the UID is registered on the network, a SIGNON with the changes will be
|
|
broadcast, otherwise the changes will be stored, to be used when registration
|
|
completes.
|
|
|
|
TB
|
|
capab: TB
|
|
source: server
|
|
propagation: broadcast
|
|
parameters: channel, topicTS, opt. topic setter, topic
|
|
|
|
Propagates a channel topic as part of a burst.
|
|
|
|
If the channel had no topic yet or the topicTS in the message is older than
|
|
the topicTS of the current topic on the channel and the topics differ, set
|
|
the topic with topicTS and topic setter, and propagate the message. Otherwise
|
|
ignore the message and do not propagate it.
|
|
|
|
If the topic setter is not present, use a server name instead.
|
|
|
|
TIME
|
|
source: user
|
|
parameters: hunted
|
|
|
|
Remote TIME request.
|
|
|
|
TMODE
|
|
source: any
|
|
parameters: channelTS, channel, cmode changes, opt. cmode parameters...
|
|
|
|
Propagates a channel mode change.
|
|
|
|
If the channelTS is greater (newer) than the current TS of the channel, drop
|
|
the message.
|
|
|
|
On input, only the limit on parameters per line restricts how many cmode
|
|
parameters can be present. Apart from this, arbitrary modes shall be
|
|
processed. Redundant modes may be dropped. For example, +n-n may be applied and
|
|
propagated as +n-n, -n or (if the channel was already -n) nothing, but not as
|
|
+n.
|
|
|
|
The parameter for mode -k (removing a key) shall be ignored.
|
|
|
|
On output, at most ten cmode parameters should be sent; if there are more,
|
|
multiple TMODE messages should be sent.
|
|
|
|
TOPIC
|
|
source: user
|
|
propagation: broadcast
|
|
parameters: channel, topic
|
|
|
|
Propagates a channel topic change. The server may verify that the source has
|
|
ops in the channel.
|
|
|
|
The topicTS shall be set to the current time and the topic setter shall be
|
|
set indicating the source user. Note that this means that the topicTS of a
|
|
topic set with TOPIC is not necessarily consistent across the network.
|
|
|
|
TRACE
|
|
source: user
|
|
1.
|
|
parameters: hunted
|
|
|
|
Performs a trace to the target, sending 200 numerics from each server passing
|
|
the message on. The target server sends a description of the target followed
|
|
by a 262 numeric.
|
|
|
|
TRACE, STATS l and STATS L are the only commands using hunt_server that use the
|
|
hunted parameter for more than just determining which server the command
|
|
should be executed on.
|
|
|
|
2.
|
|
parameters: target name, hunted
|
|
|
|
Executes a trace command on the target server. No 200 numerics are sent.
|
|
The target name is a name, not a UID, and should be on the target server.
|
|
|
|
UID
|
|
source: server
|
|
propagation: broadcast
|
|
parameters: nickname, hopcount, nickTS, umodes, username, visible hostname, IP address, UID, gecos
|
|
propagation: broadcast
|
|
|
|
Introduces a client. The client is on the source server of this command.
|
|
|
|
The IP address MUST be '0' (a zero) if the true address is not sent such as
|
|
because of a spoof. Otherwise, and if there is no dynamic spoof (ENCAP
|
|
REALHOST, charybdis TS6 only), the IP address MAY be shown to normal users.
|
|
|
|
Nick TS rules apply.
|
|
|
|
UNDLINE
|
|
charybdis TS6
|
|
encap only
|
|
source: user
|
|
parameters: mask
|
|
|
|
Removes a D:line (IP ban checked directly after accepting connection).
|
|
|
|
The mask must be an IP address or CIDR mask.
|
|
|
|
UNKLINE
|
|
1.
|
|
encap only
|
|
source: user
|
|
parameters: user mask, host mask
|
|
|
|
Removes a K:line (ban on user@host).
|
|
|
|
2.
|
|
capab: UNKLN
|
|
source: user
|
|
parameters: target server mask, user mask, host mask
|
|
|
|
As form 1, deprecated.
|
|
|
|
UNRESV
|
|
1.
|
|
encap only
|
|
source: user
|
|
parameters: mask
|
|
|
|
Removes a RESV.
|
|
|
|
2.
|
|
capab: CLUSTER
|
|
source: user
|
|
parameters: target server mask, mask
|
|
|
|
As form 1, deprecated.
|
|
|
|
UNXLINE
|
|
1.
|
|
encap only
|
|
source: user
|
|
parameters: mask
|
|
|
|
Removes an X:line (ban on realname).
|
|
|
|
2.
|
|
capab: CLUSTER
|
|
source: user
|
|
parameters: target server mask, mask
|
|
|
|
As form 1, deprecated.
|
|
|
|
USERS
|
|
source: user
|
|
parameters: hunted
|
|
|
|
Remote USERS request.
|
|
|
|
VERSION
|
|
source: any
|
|
parameters: hunted
|
|
|
|
Remote VERSION request.
|
|
|
|
WALLOPS
|
|
1.
|
|
source: user
|
|
parameters: message
|
|
propagation: broadcast
|
|
|
|
In efnet TS6, sends a message to operators (with umode +z set). This is a
|
|
deprecated equivalent to OPERWALL.
|
|
|
|
In charybdis TS6, sends a message to local users with umode +w set (or possibly
|
|
another indication that WALLOPS messages should be sent), including non-opers.
|
|
|
|
2.
|
|
source: server
|
|
parameters: message
|
|
propagation: broadcast
|
|
|
|
Sends a message to local users with umode +w set (or possibly another
|
|
indication that WALLOPS messages should be sent).
|
|
|
|
In efnet TS6 this may include non-opers, in charybdis TS6 this may only be
|
|
sent to opers.
|
|
|
|
WHOIS
|
|
source: user
|
|
parameters: hunted, target nick
|
|
|
|
Remote WHOIS request.
|
|
|
|
WHOWAS
|
|
source: user
|
|
parameters: nickname, limit, hunted
|
|
|
|
Remote WHOWAS request. Not implemented in all servers.
|
|
|
|
Different from a local WHOWAS request, the limit is mandatory and servers should
|
|
apply a maximum to it.
|
|
|
|
XLINE
|
|
1.
|
|
encap only
|
|
source: user
|
|
parameters: duration, mask, reason
|
|
|
|
Sets an X:line (ban on realname).
|
|
|
|
2.
|
|
capab: CLUSTER
|
|
source: user
|
|
parameters: target server mask, duration, mask, reason
|
|
|
|
As form 1, deprecated.
|
|
|
|
Local only commands (charybdis 3.1):
|
|
|
|
ACCEPT
|
|
AUTHENTICATE
|
|
CAP
|
|
CHALLENGE
|
|
CHANTRACE
|
|
CLOSE
|
|
DIE
|
|
GET
|
|
HELP
|
|
ISON
|
|
LIST
|
|
MAP
|
|
MASKTRACE
|
|
MODLIST
|
|
MODLOAD
|
|
MODRELOAD
|
|
MODRESTART
|
|
MODUNLOAD
|
|
MONITOR
|
|
NAMES
|
|
POST
|
|
PUT
|
|
RESTART
|
|
SCAN
|
|
SET
|
|
TESTGECOS
|
|
TESTLINE
|
|
TESTMASK
|
|
UHELP
|
|
UNREJECT
|
|
USER
|
|
USERHOST
|
|
WEBIRC
|
|
WHO
|
|
WHOWAS
|