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