]> jfr.im git - solanum.git/blame - doc/technical/ts6-protocol.txt
Abort blacklist queries at the same time as auth queries.
[solanum.git] / doc / technical / ts6-protocol.txt
CommitLineData
cdff8b70
JT
1TS6 protocol description
2Written by Jilles Tjoelker
3
4General format: much like rfc1459
5Maximum parameters for a command: 15 (this does not include the prefix
6and command name)
7
8SID: a server's unique ID. It is configured in each server and consists of
9a digit and two alphanumerics. Sending SIDs with lowercase letters is
10questionable.
11
12UID: a client's unique ID. It consists of the server's SID and six
13alphanumerics (so it is nine characters long). The first of the alphanumerics
14should be a letter, numbers are legal but reserved for future use.
15
16hunted: a parameter type used for various remote requests. From local users,
17nicknames and server names are accepted, possibly with wildcards; from servers,
18UIDs/SIDs (sending names or even wildcards is deprecated). This is done with
19the function hunt_server(). Any rate limiting should be done locally.
20
21duration: a parameter type used for ban durations. It is a duration in seconds.
22A value of 0 means a permanent ban.
23
755c144e
JT
24IP addresses: IP addresses are converted to text in the usual way, including
25'::' shortening in IPv6, with the exception that a zero is prepended to any
26IP address that starts with a colon.
27
03204327
JT
28propagation: to which other servers the command is sent
29
30For all commands with a hunted parameter, the propagation is determined by
31that, and not otherwise specified.
32
33For all commands with a target server mask parameter, the propagation is
34determined by that, and not otherwise specified. The command is sent to all
35servers with names matching the given mask (for example '*', '*.example.com',
36'irc.example.com'). Those servers do not have to be directly connected.
37Targets cannot be SIDs.
38
39Propagation broadcast means the command is sent to all servers.
40
41Propagation one-to-one means the command is only sent to the target or the
42server the target is on.
43
44Propagation none means the command is never sent to another server if it is
45received.
46
47For some other commands, the propagation depends on the parameters and is
48described in text.
cdff8b70
JT
49
50services server: server mentioned in a service{} block. There are no services
51servers on EFnet.
52
53service: client with umode +S. This implies that it is on a services server.
54
aa12f64b
JT
55connection setup:
56The initiator sends the PASS, CAPAB and SERVER messages. Upon receiving the
57SERVER, the listener will check the information, and if it is valid, it will
58send its own PASS, CAPAB and SERVER messages, followed by SVINFO and the burst.
59Upon receiving the SERVER, the initiator will send SVINFO and the burst. If
60ziplinks are used, SVINFO is the first compressed message.
61
13d42555
JT
62The burst consists of SID and SERVER messages for all known servers, BAN
63messages for all propagated bans, UID or EUID messages for all known users
64(possibly followed by ENCAP REALHOST, ENCAP LOGIN and/or AWAY) and SJOIN
65messages for all known channels (possibly followed by BMASK and/or TB).
aa12f64b 66
cdff8b70
JT
67user modes:
68(all)
69+D (deaf: does not receive channel messages)
70+S (network service) (only settable on burst from a services server)
71+a (appears as server administrator)
72+i (invisible, see rfc1459)
73+o (IRC operator, see rfc1459)
74+w (wallops, see rfc1459) (always propagated for historical reasons)
75(charybdis TS6)
76+Q/+R/+g/+l/+s/+z (only locally effective)
77+Z (ssl user) (only settable on burst)
78possibly more added by modules
79
80channel modes:
81(all)
82statuses
83+o (prefix @) (ops)
84+v (prefix +) (voice)
85type A
86+b (ban)
4b58bbb2
JT
87+e (ban exception) (capab: EX)
88+I (invite exception) (capab: IE)
cdff8b70
JT
89type B
90+k (key: password required to join, <= 23 ascii chars, no : or , or whitespace)
91type C
92+l (limit: maximum number of members before further joins are disallowed)
93type D
94+m (moderated)
95+n (no external messages)
96+p (private: does not appear in /whois to non-members, no /knock allowed)
4b58bbb2 97+r (only registered users may join) (only if a services server exists) (capab: SERVICES)
cdff8b70
JT
98+s (secret)
99+t (only chanops may change topic)
100(charybdis TS6)
101type A
102+q (quiet)
103type C
104+f (forward: channel name <= 30 chars)
105+j (join throttle: N:T with integer N and T)
106type D
107+F (free target for +f)
108+L (large ban list)
109+P (permanent: does not disappear when empty)
110+Q (ignore forwards to this)
111+c (strip colours)
112+g (allow any member to /invite)
113+z (send messages blocked by +m to chanops)
114
f8933d67
JT
115<numeric>
116source: server
117parameters: target, any...
118
119The command name should be three decimal ASCII digits.
120
121Propagates a "numeric" command reply, such as from a remote WHOIS request.
122
123If the first digit is 0 (indicating a reply about the local connection), it
124should be changed to 1 before propagation or sending to a user.
125
126Numerics to the local server may be sent to opers.
127
128To avoid infinite loops, servers should not send any replies to numerics.
129
130The target can be:
131- a client
132 propagation: one-to-one
133- a channel name
134 propagation: all servers with -D users on the channel
135
136Numerics to channels are broken in some older servers.
137
cdff8b70
JT
138ADMIN
139source: user
140parameters: hunted
141
142Remote ADMIN request.
143
144AWAY
145source: user
146propagation: broadcast
147parameters: opt. away reason
148
149If the away reason is empty or not present, mark the user as not away.
150Otherwise, mark the user as away.
151
152Changing away reason from one non-empty string to another non-empty string
153may not be propagated.
154
13d42555
JT
155BAN
156charybdis TS6
157capab: BAN
158source: any
159propagation: broadcast (restricted)
160parameters: type, user mask, host mask, creation TS, duration, lifetime, oper, reason
161
162Propagates a network wide ban.
163
a0ce140e
JT
164The type is K for K:lines, R for resvs and X for X:lines; other types are
165reserved. The user mask field is only used for K:lines; for resvs and X:lines
166the field is ignored in input and sent as an asterisk.
13d42555
JT
167
168The creation TS indicates when this ban was last modified. An incoming ban MUST
169be ignored and not propagated if the creation TS is older than the creation TS
170of the current ban. If the ban is identical, it SHOULD NOT be propagated to
171avoid unnecessary network traffic. (Two changes to bans that set the TS to the
172same value may cause desynchronization.)
173
174The duration is 0 for an unban and relative to the creation TS for a ban.
175When the duration has passed, the ban is no longer active but it may still
176be necessary to remember it.
177
178The lifetime is relative to the creation TS and indicates for how long this
179ban needs to be remembered and propagated. This MUST be at least the duration.
180Initially, it is usually set the same as the duration but when the ban is
181modified later, it SHOULD be set such that the modified ban is remembered at
182least as long as the original ban. This ensures that the original ban does not
183revive via split servers. This requirement is only a SHOULD to allow for
184implementations that only inject bans and do not remember any; implementations
185that remember and propagate bans MUST set the lifetime appropriately.
186
187The oper field indicates the oper that originally set the ban. If this message
188is the initial propagation of a change, it SHOULD be sent as * (an asterisk).
189
190The reason field indicates the reason for the ban. Any part after a | (vertical
191bar) MUST NOT be shown to normal users. The rest of the field and the creation
192TS and duration MAY be shown to normal users.
193
cdff8b70
JT
194BMASK
195source: server
196propagation: broadcast
197parameters: channelTS, channel, type, space separated masks
198
199If the channelTS in the message is greater (newer) than the current TS of
200the channel, drop the message and do not propagate it.
201
202Type is the mode letter of a ban-like mode. In efnet TS6 this is 'b', 'e' or
203'I'. In charybdis TS6 additionally 'q' is possible.
204
205Add all the masks to the given list of the channel.
206
207All ban-like modes must be bursted using this command, not using MODE or TMODE.
208
209CAPAB
210source: unregistered server
211propagation: none
212parameters: space separated capability list
213
aa12f64b
JT
214Sends capabilities of the server. This must include QS and ENCAP. It is also
215strongly recommended to include EX, CHW, IE and KNOCK, and for charybdis TS6
216also SAVE and EUID. For use with services, SERVICES and RSFNC are strongly
217recommended.
218
219The capabilities may depend on the configuration for the server they are sent
220to.
cdff8b70
JT
221
222CHGHOST
223charybdis TS6
224source: any
225propagation: broadcast
226parameters: client, new hostname
227
228Changes the visible hostname of a client.
229
230Opers are notified unless the source is a server or a service.
231
232CONNECT
233source: any
234parameters: server to connect to, port, hunted
235
236Remote connect request. A server WALLOPS should be sent by the receiving
237server.
238
239The port can be 0 for the default port.
240
241DLINE
242charybdis TS6
243encap only
244source: user
245parameters: duration, mask, reason
246
247Sets a D:line (IP ban checked directly after accepting connection).
248
249The mask must be an IP address or CIDR mask.
250
251ENCAP
252source: any
253parameters: target server mask, subcommand, opt. parameters...
254
03204327
JT
255Sends a command to matching servers. Propagation is independent of
256understanding the subcommand.
cdff8b70 257
03204327 258Subcommands are listed elsewhere with "encap only".
cdff8b70
JT
259
260ERROR
261source: server or unregistered server
262propagation: none
263parameters: error message
264
265Reports a (usually fatal) error with the connection.
266
267Error messages may contain IP addresses and have a negative effect on server
268IP hiding.
269
270ETRACE
271encap only
272encap target: single server
273source: oper
274parameters: client
275
276Remote ETRACE information request.
277
278EUID
279charybdis TS6
280capab: EUID
281source: server
282parameters: nickname, hopcount, nickTS, umodes, username, visible hostname, IP address, UID, real hostname, account name, gecos
283propagation: broadcast
284
285Introduces a client. The client is on the source server of this command.
286
755c144e
JT
287The IP address MUST be '0' (a zero) if the true address is not sent such as
288because of a spoof. Otherwise, and if there is no dynamic spoof (i.e. the
289visible and real hostname are equal), the IP address MAY be shown to normal
290users.
291
1e23af24 292The account name is '*' if the user is not logged in with services.
cdff8b70
JT
293
294Nick TS rules apply.
295
296EUID is similar to UID but includes the ENCAP REALHOST and ENCAP LOGIN
297information.
298
299GCAP
300encap only
301encap target: *
302source: server
303parameters: space separated capability list
304
305Capability list of remote server.
306
86aba27c
JT
307GLINE
308efnet TS6
309capab: GLN
310source: user
311parameters: user mask, host mask, reason
312propagation: broadcast
313
314Propagates a G:line vote. Once votes from three different opers (based on
315user@host mask) on three different servers have arrived, trigger the G:line.
316Pending G:lines expire after some time, usually ten minutes. Triggered G:lines
317expire after a configured time which may differ across servers.
318
319Requests from server connections must be propagated, unless they are found to
320be syntactically invalid (e.g. '!' in user mask). Therefore, disabling glines
321must not affect propagation, and too wide glines, double votes and glines that
322already exist locally must still be propagated.
323
324Of course, servers are free to reject gline requests from their own operators.
325
7e7004c4
JT
326GUNGLINE
327efnet TS6
328encap only
329encap target: *
330source: user
331parameters: user mask, host mask, reason
332propagation: broadcast
333
334Propagates a G:line removal vote. Once three votes have arrived (as with
335G:lines), remove the G:line. Pending G:lines removals expire after some time,
336usually ten minutes.
337
338Pending G:line removals do not interact with pending G:lines. Triggering a
339G:line does not affect a pending G:line removal. Triggering a G:line removal
340does not affect a pending G:line.
341
cdff8b70
JT
342INFO
343source: user
344parameters: hunted
345
346Remote INFO request.
347
348INVITE
349source: user
350parameters: target user, channel, opt. channelTS
351propagation: one-to-one
352
353Invites a user to a channel.
354
355If the channelTS is greater (newer) than the current TS of the channel, drop
356the message.
357
358Not sending the channelTS parameter is deprecated.
359
360JOIN
3611.
362source: user
363parameters: '0' (one ASCII zero)
364propagation: broadcast
365
366Parts the source user from all channels.
367
3682.
369source: user
370parameters: channelTS, channel, '+' (a plus sign)
371propagation: broadcast
372
373Joins the source user to the given channel. If the channel does not exist yet,
374it is created with the given channelTS and no modes. If the channel already
375exists and has a greater (newer) TS, wipe all simple modes and statuses and
376change the TS, notifying local users of this but not servers (note that
377ban-like modes remain intact; invites may or may not be cleared).
378
2d042188
JT
379A JOIN is propagated with the new TS of the channel.
380
22ab2e25
AC
381JUPE
382capab: JUPE
383source: any
384propagation: broadcast (restricted)
385parameters: target server mask, add or delete, server name, oper, reason
386
387Adds or removes a jupe for a server. If the server is presently connected,
388it MUST be SQUIT by the server's uplink when the jupe is applied.
389
390The oper field indicates the oper that originally set the jupe. If this message
391is the initial propagation of a removal, it SHOULD be sent as * (an asterisk).
392
393The reason field indicates the reason for the jupe. It SHOULD be displayed
394as the linking error message to the juped server if it tries to reconnect.
395
cdff8b70
JT
396KICK
397source: any
398parameters: channel, target user, opt. reason
399propagation: broadcast
400
401Kicks the target user from the given channel.
402
403Unless the channel's TS is 0, no check is done whether the source user has ops.
404
405Not sending the reason parameter is questionable.
406
407KILL
408source: any
409parameters: target user, path
410propagation: broadcast
411
412Removes the user from the network.
413
414The format of the path parameter is some sort of description of the source of
415the kill followed by a space and a parenthesized reason. To avoid overflow,
416it is recommended not to add anything to the path.
417
418KLINE
4191.
420encap only
421source: user
422parameters: duration, user mask, host mask, reason
423
424Sets a K:line (ban on user@host).
425
4262.
427capab: KLN
428source: user
429parameters: target server mask, duration, user mask, host mask, reason
430
431As form 1, deprecated.
432
433KNOCK
4b58bbb2 434capab: KNOCK
cdff8b70
JT
435source: user
436parameters: channel
437propagation: broadcast
438
439Requests an invite to a channel that is locked somehow (+ikl). Notifies all
440operators of the channel. (In charybdis, on +g channels all members are
441notified.)
442
443This is broadcast so that each server can store when KNOCK was used last on
444a channel.
445
446LINKS
447source: user
448parameters: hunted, server mask
449
450Remote LINKS request. The server mask limits which servers are listed.
451
3cadd0c4
JT
452LOCOPS
4531.
454encap only
455source: user
456parameters: text
457
458Sends a message to operators (with umode +l set). This is intended to be
459used for strict subsets of the network.
460
4612.
462capab: CLUSTER
463source: user
464parameters: target server mask, text
465
466As form 1, deprecated.
467
cdff8b70
JT
468LOGIN
469encap only
470source: user
471parameters: account name
472
473In a burst, states that the source user is logged in as the account.
474
475LUSERS
476source: user
477parameters: server mask, hunted
478
479Remote LUSERS request. Most servers ignore the server mask, treating it as '*'.
480
d09bb8ae
AC
481MLOCK
482charybdis TS6
483source: services server
73d83e6d 484parameters: channelTS, channel, mode letters
d09bb8ae
AC
485propagation: broadcast (restricted)
486
73d83e6d 487Propagates a channel mode lock change.
d09bb8ae
AC
488
489If the channelTS is greater (newer) than the current TS of the channel, drop
490the message.
491
73d83e6d
SB
492The final parameter is a list of mode letters that may not be changed by local
493users. This applies to setting or unsetting simple modes, and changing or
494removing mode parameters.
d09bb8ae
AC
495
496An MLOCK message with no modes disables the MLOCK, therefore the MLOCK message
497always contains the literal MLOCK for simplicity.
498
cdff8b70
JT
499MODE
5001.
501source: user
502parameters: client, umode changes
503propagation: broadcast
504
505Propagates a user mode change. The client parameter must refer to the same user
506as the source.
507
508Not all umodes are propagated to other servers.
509
5102.
511source: any
512parameters: channel, cmode changes, opt. cmode parameters...
513
514Propagates a channel mode change.
515
516This is deprecated because the channelTS is not included. If it is received,
517it should be propagated as TMODE.
518
519MOTD
520source: user
521parameters: hunted
522
523Remote MOTD request.
524
525NICK
5261.
527source: user
528parameters: new nickname, new nickTS
529propagation: broadcast
530
531Propagates a nick change.
532
5332.
534source: server
535parameters: nickname, hopcount, nickTS, umodes, username, hostname, server, gecos
536
537Historic TS5 user introduction. The user is on the server indicated by the
538server parameter; the source server is meaningless (local link).
539
540NICKDELAY
541charybdis TS6
542encap only
543encap target: *
544source: services server
545parameters: duration, nickname
546
547If duration is greater than 0, makes the given nickname unavailable for that
548time.
549
550If duration is 0, removes a nick delay entry for the given nickname.
551
552There may or may not be a client with the given nickname; this does not affect
553the operation.
554
555NOTICE
556source: any
557parameters: msgtarget, message
558
559As PRIVMSG, except NOTICE messages are sent out, server sources are permitted
560and most error messages are suppressed.
561
0749b751
JT
562Servers may not send '$$', '$#' and opers@server notices. Older servers may
563not allow servers to send to specific statuses on a channel.
564
cdff8b70
JT
565OPERSPY
566encap only
567encap target: *
568source: user
569parameters: command name, parameters
570
571Reports operspy usage.
572
573OPERWALL
574source: user
575parameters: message
576propagation: broadcast
577
578Sends a message to operators (with umode +z set).
579
580PART
581source: user
582parameters: comma separated channel list, message
583
584Parts the source user from the given channels.
585
586PASS
587source: unregistered server
588parameters: password, 'TS', TS version, SID
589
590Sends the server link password, TS version and SID.
591
592PING
593source: any
aa12f64b 594parameters: origin, opt. destination server
cdff8b70 595
aa12f64b
JT
596Sends a PING to the destination server, which will reply with a PONG. If the
597destination server parameter is not present, the server receiving the message
598must reply.
cdff8b70 599
aa12f64b
JT
600The origin field is not used in the server protocol. It is sent as the name
601(not UID/SID) of the source.
cdff8b70
JT
602
603Remote PINGs are used for end-of-burst detection, therefore all servers must
604implement them.
605
606PONG
607source: server
608parameters: origin, destination
609
610Routes a PONG back to the destination that originally sent the PING.
611
612PRIVMSG
613source: user
614parameters: msgtarget, message
615
616Sends a normal message (PRIVMSG) to the given target.
617
618The target can be:
619- a client
620 propagation: one-to-one
621- a channel name
622 propagation: all servers with -D users on the channel
623 (cmode +m/+n should be checked everywhere, bans should not be checked
624 remotely)
625- a status character ('@'/'+') followed by a channel name, to send to users
626 with that status or higher only.
1ba5ea0f 627 capab: CHW
cdff8b70 628 propagation: all servers with -D users with appropriate status
c4d2d014
JT
629- '=' followed by a channel name, to send to chanops only, for cmode +z.
630 capab: CHW and EOPMOD
631 propagation: all servers with -D chanops
cdff8b70
JT
632- a user@server message, to send to users on a specific server. The exact
633 meaning of the part before the '@' is not prescribed, except that "opers"
634 allows IRC operators to send to all IRC operators on the server in an
635 unspecified format.
636 propagation: one-to-one
637- a message to all users on server names matching a mask ('$$' followed by mask)
638 propagation: broadcast
0749b751 639 Only allowed to IRC operators.
cdff8b70
JT
640- a message to all users with hostnames matching a mask ('$#' followed by mask).
641 Note that this is often implemented poorly.
642 propagation: broadcast
0749b751
JT
643 Only allowed to IRC operators.
644
645In charybdis TS6, services may send to any channel and to statuses on any
646channel.
cdff8b70
JT
647
648PRIVS
649charybdis TS6
650encap only
651encap target: single server
652source: oper
653parameters: client
654
655Remote PRIVS information request.
656
657QUIT
658source: user
659parameters: comment
660
661Propagates quitting of a client. No QUIT should be sent for a client that
662has been removed as result of a KILL message.
663
664REALHOST
665charybdis TS6
666encap only
667encap target: *
668source: user
669parameters: real hostname
670
671In a burst, propagates the real host of a dynamically-spoofed user.
672
673REHASH
674charybdis TS6
675encap only
676source: user
677parameters: opt. rehash type
678
679Remote REHASH request. If the rehash type is omitted, it is equivalent to
680a regular /rehash, otherwise it is equivalent to /rehash <rehash type>.
681
682RESV
6831.
684encap only
685source: user
686parameters: duration, mask, reason
687
688Sets a RESV, making a nickname mask or exact channel unavailable.
689
6902.
691capab: CLUSTER
692source: user
693parameters: target server mask, duration, mask, reason
694
695As form 1, deprecated.
696
697RSFNC
698encap only
699capab: RSFNC
700encap target: single server
701source: services server
eda3590e 702parameters: target user, new nickname, new nickTS, old nickTS
cdff8b70
JT
703
704Forces a nickname change and propagates it.
705
706The command is ignored if the nick TS of the user is not equal to the old
707nickTS parameter. If the new nickname already exists (and is not the target
708user), it is killed first.
709
710SASL
711charybdis TS6
712encap only
7131.
714encap target: *
715source: server
716parameters: source uid, '*', 'S', sasl mechanism name
717
718Requests that a SASL agent (a service) initiate the authentication process.
719The source uid is that of an unregistered client. This is why it is not sent
720as the prefix.
721
7222.
723encap target: single server
724source: server
725parameters: source uid, target uid, mode, data
726
727Part of a SASL authentication exchange. The mode is 'C' to send some data
728(base64 encoded), or 'S' to end the exchange (data indicates type of
729termination: 'A' for abort, 'F' for authentication failure, 'S' for
730authentication success).
731
732SAVE
733capab: SAVE
734source: server
735propagation: broadcast
736parameters: target uid, TS
737
738Resolve a nick collision by changing a nickname to the UID.
739
740The server should verify that the UID belongs to a registered user, the user
741does not already have their UID as their nick and the TS matches the user's
742nickTS. If not, drop the message.
743
744SAVE should be propagated as a regular NICK change to links without SAVE capab.
745present.
746
747SERVER
7481.
749source: unregistered server
750parameters: server name, hopcount, server description
751
752Registers the connection as a server. PASS and CAPAB must have been sent
753before, SVINFO should be sent afterwards.
754
755If there is no such server configured or authentication failed, the connection
756should be dropped.
757
758This is propagated as a SID message.
759
7602.
761source: server
762propagation: broadcast
763parameters: server name, hopcount, server description
764
765Introduces a new TS5 server, directly connected to the source of this command.
766This is only used for jupes as TS5 servers may do little else than existing.
767
768SID
769source: server
770propagation: broadcast
771parameters: server name, hopcount, sid, server description
772
773Introduces a new server, directly connected to the source of this command.
774
775SIGNON
776source: user
777propagation: broadcast
778parameters: new nickname, new username, new visible hostname, new nickTS, new login name
779
780Broadcasts a change of several user parameters at once.
781
782Currently only sent after an SVSLOGIN.
783
784SJOIN
785source: server
786propagation: broadcast
ef861b05 787parameters: channelTS, channel, simple modes, opt. mode parameters..., nicklist
cdff8b70
JT
788
789Broadcasts a channel creation or bursts a channel.
790
791The nicklist consists of users joining the channel, with status prefixes for
792their status ('@+', '@', '+' or ''), for example:
793'@+1JJAAAAAB +2JJAAAA4C 1JJAAAADS'. All users must be behind the source server
794so it is not possible to use this message to force users to join a channel.
795
796The interpretation depends on the channelTS and the current TS of the channel.
797If either is 0, set the channel's TS to 0 and accept all modes. Otherwise, if
798the incoming channelTS is greater (newer), ignore the incoming simple modes
799and statuses and join and propagate just the users. If the incoming channelTS
800is lower (older), wipe all modes and change the TS, notifying local users of
801this but not servers (invites may be cleared). In the latter case, kick on
802split riding may happen: if the key (+k) differs or the incoming simple modes
803include +i, kick all local users, sending KICK messages to servers.
804
2d042188
JT
805An SJOIN is propagated with the new TS and modes of the channel. The statuses
806are propagated if and only if they were accepted.
807
cdff8b70
JT
808SJOIN must be used to propagate channel creation and in netbursts. For regular
809users joining channels, JOIN must be used. Pseudoservers may use SJOIN to join
810a user with ops.
811
812SNOTE
813charybdis TS6
814encap only
815source: server
816parameters: snomask letter, text
817
818Sends the text as a server notice from the source server to opers with the
819given snomask set.
820
821SQUIT
822parameters: target server, comment
823
824Removes the target server and all servers and users behind it from the network.
825
826If the target server is the receiving server or the local link this came from,
827this is an announcement that the link is being closed.
828
829Otherwise, if the target server is locally connected, the server should send
830a WALLOPS announcing the SQUIT.
831
832STATS
833source: user
834parameters: stats letter, hunted
835
836Remote STATS request. Privileges are checked on the server executing the
837actual request.
838
839SU
840encap only
841encap target: *
842source: services server
843parameters: target user, new login name (optional)
844
845If the new login name is not present or empty, mark the target user as not
846logged in, otherwise mark the target user as logged in as the given account.
847
848SVINFO
849source: server
850propagation: none
851parameters: current TS version, minimum TS version, '0', current time
852
853Verifies TS protocol compatibility and clock. If anything is not in order,
854the link is dropped.
855
856The current TS version is the highest version supported by the source server
857and the minimum TS version is the lowest version supported.
858
859The current time is sent as a TS in the usual way.
860
861SVSLOGIN
862charybdis TS6
863encap only
864encap target: single server
865source: services server
866parameters: target, new nick, new username, new visible hostname, new login name
867
868Sent after successful SASL authentication.
869
870The target is a UID, typically an unregistered one.
871
872Any of the "new" parameters can be '*' to leave the corresponding field
873unchanged. The new login name can be '0' to log the user out.
874
875If the UID is registered on the network, a SIGNON with the changes will be
876broadcast, otherwise the changes will be stored, to be used when registration
877completes.
878
879TB
3e0bb80a 880capab: TB
cdff8b70
JT
881source: server
882propagation: broadcast
3e0bb80a
JT
883parameters: channel, topicTS, opt. topic setter, topic
884
885Propagates a channel topic as part of a burst.
886
887If the channel had no topic yet or the topicTS in the message is older than
888the topicTS of the current topic on the channel and the topics differ, set
889the topic with topicTS and topic setter, and propagate the message. Otherwise
890ignore the message and do not propagate it.
891
892If the topic setter is not present, use a server name instead.
cdff8b70
JT
893
894TIME
895source: user
896parameters: hunted
897
898Remote TIME request.
899
900TMODE
901source: any
902parameters: channelTS, channel, cmode changes, opt. cmode parameters...
903
904Propagates a channel mode change.
905
906If the channelTS is greater (newer) than the current TS of the channel, drop
907the message.
908
909On input, only the limit on parameters per line restricts how many cmode
910parameters can be present. Apart from this, arbitrary modes shall be
911processed. Redundant modes may be dropped. For example, +n-n may be applied and
912propagated as +n-n, -n or (if the channel was already -n) nothing, but not as
913+n.
914
915The parameter for mode -k (removing a key) shall be ignored.
916
917On output, at most ten cmode parameters should be sent; if there are more,
918multiple TMODE messages should be sent.
919
920TOPIC
921source: user
922propagation: broadcast
3e0bb80a 923parameters: channel, topic
cdff8b70
JT
924
925Propagates a channel topic change. The server may verify that the source has
926ops in the channel.
927
3e0bb80a
JT
928The topicTS shall be set to the current time and the topic setter shall be
929set indicating the source user. Note that this means that the topicTS of a
930topic set with TOPIC is not necessarily consistent across the network.
931
cdff8b70
JT
932TRACE
933source: user
9341.
935parameters: hunted
936
937Performs a trace to the target, sending 200 numerics from each server passing
938the message on. The target server sends a description of the target followed
939by a 262 numeric.
940
941TRACE, STATS l and STATS L are the only commands using hunt_server that use the
942hunted parameter for more than just determining which server the command
943should be executed on.
944
9452.
946parameters: target name, hunted
947
948Executes a trace command on the target server. No 200 numerics are sent.
949The target name is a name, not a UID, and should be on the target server.
950
951UID
952source: server
953propagation: broadcast
954parameters: nickname, hopcount, nickTS, umodes, username, visible hostname, IP address, UID, gecos
955propagation: broadcast
956
957Introduces a client. The client is on the source server of this command.
958
755c144e
JT
959The IP address MUST be '0' (a zero) if the true address is not sent such as
960because of a spoof. Otherwise, and if there is no dynamic spoof (ENCAP
961REALHOST, charybdis TS6 only), the IP address MAY be shown to normal users.
962
cdff8b70
JT
963Nick TS rules apply.
964
965UNDLINE
966charybdis TS6
967encap only
968source: user
969parameters: mask
970
971Removes a D:line (IP ban checked directly after accepting connection).
972
973The mask must be an IP address or CIDR mask.
974
975UNKLINE
9761.
977encap only
978source: user
979parameters: user mask, host mask
980
981Removes a K:line (ban on user@host).
982
9832.
984capab: UNKLN
985source: user
986parameters: target server mask, user mask, host mask
987
988As form 1, deprecated.
989
990UNRESV
9911.
992encap only
993source: user
994parameters: mask
995
996Removes a RESV.
997
9982.
999capab: CLUSTER
1000source: user
1001parameters: target server mask, mask
1002
1003As form 1, deprecated.
1004
1005UNXLINE
10061.
1007encap only
1008source: user
1009parameters: mask
1010
1011Removes an X:line (ban on realname).
1012
10132.
1014capab: CLUSTER
1015source: user
1016parameters: target server mask, mask
1017
1018As form 1, deprecated.
1019
1020USERS
1021source: user
1022parameters: hunted
1023
1024Remote USERS request.
1025
1026VERSION
1027source: any
1028parameters: hunted
1029
1030Remote VERSION request.
1031
1032WALLOPS
10331.
1034source: user
1035parameters: message
1036propagation: broadcast
1037
1038In efnet TS6, sends a message to operators (with umode +z set). This is a
1039deprecated equivalent to OPERWALL.
1040
1041In charybdis TS6, sends a message to local users with umode +w set (or possibly
1042another indication that WALLOPS messages should be sent), including non-opers.
1043
10442.
1045source: server
1046parameters: message
1047propagation: broadcast
1048
1049Sends a message to local users with umode +w set (or possibly another
1050indication that WALLOPS messages should be sent).
1051
1052In efnet TS6 this may include non-opers, in charybdis TS6 this may only be
1053sent to opers.
1054
1055WHOIS
1056source: user
1057parameters: hunted, target nick
1058
1059Remote WHOIS request.
1060
1061XLINE
10621.
1063encap only
1064source: user
1065parameters: duration, mask, reason
1066
1067Sets an X:line (ban on realname).
1068
10692.
1070capab: CLUSTER
1071source: user
1072parameters: target server mask, duration, mask, reason
1073
1074As form 1, deprecated.
1075
1076Local only commands (charybdis 3.1):
1077
1078ACCEPT
1079AUTHENTICATE
1080CAP
1081CHALLENGE
1082CHANTRACE
1083CLOSE
1084CNOTICE
1085CPRIVMSG
1086DIE
1087GET
1088HELP
1089ISON
1090LIST
cdff8b70
JT
1091MAP
1092MASKTRACE
1093MODLIST
1094MODLOAD
1095MODRELOAD
1096MODRESTART
1097MODUNLOAD
1098MONITOR
1099NAMES
1100OPER
1101POST
1102PUT
1103RESTART
1104SCAN
1105SET
1106TESTGECOS
1107TESTLINE
1108TESTMASK
1109UHELP
1110UNREJECT
1111USER
1112USERHOST
1113WEBIRC
1114WHO
1115WHOWAS