ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/doc/RFC1459
Revision: 1.2
Committed: Thu Jul 19 12:35:04 2007 UTC (16 years, 10 months ago) by pippijn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
convert documentation to POD and use this for the website

File Contents

# Content
1 Network Working Group J. Oikarinen
2 Request for Comments: 1459 D. Reed
3 May 1993
4
5
6 Internet Relay Chat Protocol
7
8 Status of This Memo
9
10 This memo defines an Experimental Protocol for the Internet
11 community. Discussion and suggestions for improvement are requested.
12 Please refer to the current edition of the "IAB Official Protocol
13 Standards" for the standardization state and status of this protocol.
14 Distribution of this memo is unlimited.
15
16 Abstract
17
18 The IRC protocol was developed over the last 4 years since it was
19 first implemented as a means for users on a BBS to chat amongst
20 themselves. Now it supports a world-wide network of servers and
21 clients, and is stringing to cope with growth. Over the past 2 years,
22 the average number of users connected to the main IRC network has
23 grown by a factor of 10.
24
25 The IRC protocol is a text-based protocol, with the simplest client
26 being any socket program capable of connecting to the server.
27
28 Table of Contents
29
30 1. INTRODUCTION ............................................... 4
31 1.1 Servers ................................................ 4
32 1.2 Clients ................................................ 5
33 1.2.1 Operators .......................................... 5
34 1.3 Channels ................................................ 5
35 1.3.1 Channel Operators .................................... 6
36 2. THE IRC SPECIFICATION ....................................... 7
37 2.1 Overview ................................................ 7
38 2.2 Character codes ......................................... 7
39 2.3 Messages ................................................ 7
40 2.3.1 Message format in 'pseudo' BNF .................... 8
41 2.4 Numeric replies ......................................... 10
42 3. IRC Concepts ................................................ 10
43 3.1 One-to-one communication ................................ 10
44 3.2 One-to-many ............................................. 11
45 3.2.1 To a list .......................................... 11
46 3.2.2 To a group (channel) ............................... 11
47 3.2.3 To a host/server mask .............................. 12
48 3.3 One to all .............................................. 12
49
50
51
52 Oikarinen & Reed [Page 1]
53
54 RFC 1459 Internet Relay Chat Protocol May 1993
55
56
57 3.3.1 Client to Client ................................... 12
58 3.3.2 Clients to Server .................................. 12
59 3.3.3 Server to Server ................................... 12
60 4. MESSAGE DETAILS ............................................. 13
61 4.1 Connection Registration ................................. 13
62 4.1.1 Password message ................................... 14
63 4.1.2 Nickname message ................................... 14
64 4.1.3 User message ....................................... 15
65 4.1.4 Server message ..................................... 16
66 4.1.5 Operator message ................................... 17
67 4.1.6 Quit message ....................................... 17
68 4.1.7 Server Quit message ................................ 18
69 4.2 Channel operations ...................................... 19
70 4.2.1 Join message ....................................... 19
71 4.2.2 Part message ....................................... 20
72 4.2.3 Mode message ....................................... 21
73 4.2.3.1 Channel modes ................................. 21
74 4.2.3.2 User modes .................................... 22
75 4.2.4 Topic message ...................................... 23
76 4.2.5 Names message ...................................... 24
77 4.2.6 List message ....................................... 24
78 4.2.7 Invite message ..................................... 25
79 4.2.8 Kick message ....................................... 25
80 4.3 Server queries and commands ............................. 26
81 4.3.1 Version message .................................... 26
82 4.3.2 Stats message ...................................... 27
83 4.3.3 Links message ...................................... 28
84 4.3.4 Time message ....................................... 29
85 4.3.5 Connect message .................................... 29
86 4.3.6 Trace message ...................................... 30
87 4.3.7 Admin message ...................................... 31
88 4.3.8 Info message ....................................... 31
89 4.4 Sending messages ........................................ 32
90 4.4.1 Private messages ................................... 32
91 4.4.2 Notice messages .................................... 33
92 4.5 User-based queries ...................................... 33
93 4.5.1 Who query .......................................... 33
94 4.5.2 Whois query ........................................ 34
95 4.5.3 Whowas message ..................................... 35
96 4.6 Miscellaneous messages .................................. 35
97 4.6.1 Kill message ....................................... 36
98 4.6.2 Ping message ....................................... 37
99 4.6.3 Pong message ....................................... 37
100 4.6.4 Error message ...................................... 38
101 5. OPTIONAL MESSAGES ........................................... 38
102 5.1 Away message ............................................ 38
103 5.2 Rehash command .......................................... 39
104 5.3 Restart command ......................................... 39
105
106
107
108 Oikarinen & Reed [Page 2]
109
110 RFC 1459 Internet Relay Chat Protocol May 1993
111
112
113 5.4 Summon message .......................................... 40
114 5.5 Users message ........................................... 40
115 5.6 Operwall command ........................................ 41
116 5.7 Userhost message ........................................ 42
117 5.8 Ison message ............................................ 42
118 6. REPLIES ..................................................... 43
119 6.1 Error Replies ........................................... 43
120 6.2 Command responses ....................................... 48
121 6.3 Reserved numerics ....................................... 56
122 7. Client and server authentication ............................ 56
123 8. Current Implementations Details ............................. 56
124 8.1 Network protocol: TCP ................................... 57
125 8.1.1 Support of Unix sockets ............................ 57
126 8.2 Command Parsing ......................................... 57
127 8.3 Message delivery ........................................ 57
128 8.4 Connection 'Liveness' ................................... 58
129 8.5 Establishing a server-client connection ................. 58
130 8.6 Establishing a server-server connection ................. 58
131 8.6.1 State information exchange when connecting ......... 59
132 8.7 Terminating server-client connections ................... 59
133 8.8 Terminating server-server connections ................... 59
134 8.9 Tracking nickname changes ............................... 60
135 8.10 Flood control of clients ............................... 60
136 8.11 Non-blocking lookups ................................... 61
137 8.11.1 Hostname (DNS) lookups ............................ 61
138 8.11.2 Username (Ident) lookups .......................... 61
139 8.12 Configuration file ..................................... 61
140 8.12.1 Allowing clients to connect ....................... 62
141 8.12.2 Operators ......................................... 62
142 8.12.3 Allowing servers to connect ....................... 62
143 8.12.4 Administrivia ..................................... 63
144 8.13 Channel membership ..................................... 63
145 9. Current problems ............................................ 63
146 9.1 Scalability ............................................. 63
147 9.2 Labels .................................................. 63
148 9.2.1 Nicknames .......................................... 63
149 9.2.2 Channels ........................................... 64
150 9.2.3 Servers ............................................ 64
151 9.3 Algorithms .............................................. 64
152 10. Support and availability ................................... 64
153 11. Security Considerations .................................... 65
154 12. Authors' Addresses ......................................... 65
155
156
157
158
159
160
161
162
163
164 Oikarinen & Reed [Page 3]
165
166 RFC 1459 Internet Relay Chat Protocol May 1993
167
168
169 1. INTRODUCTION
170
171 The IRC (Internet Relay Chat) protocol has been designed over a
172 number of years for use with text based conferencing. This document
173 describes the current IRC protocol.
174
175 The IRC protocol has been developed on systems using the TCP/IP
176 network protocol, although there is no requirement that this remain
177 the only sphere in which it operates.
178
179 IRC itself is a teleconferencing system, which (through the use of
180 the client-server model) is well-suited to running on many machines
181 in a distributed fashion. A typical setup involves a single process
182 (the server) forming a central point for clients (or other servers)
183 to connect to, performing the required message delivery/multiplexing
184 and other functions.
185
186 1.1 Servers
187
188 The server forms the backbone of IRC, providing a point to which
189 clients may connect to to talk to each other, and a point for other
190 servers to connect to, forming an IRC network. The only network
191 configuration allowed for IRC servers is that of a spanning tree [see
192 Fig. 1] where each server acts as a central node for the rest of the
193 net it sees.
194
195
196 [ Server 15 ] [ Server 13 ] [ Server 14]
197 / \ /
198 / \ /
199 [ Server 11 ] ------ [ Server 1 ] [ Server 12]
200 / \ /
201 / \ /
202 [ Server 2 ] [ Server 3 ]
203 / \ \
204 / \ \
205 [ Server 4 ] [ Server 5 ] [ Server 6 ]
206 / | \ /
207 / | \ /
208 / | \____ /
209 / | \ /
210 [ Server 7 ] [ Server 8 ] [ Server 9 ] [ Server 10 ]
211
212 :
213 [ etc. ]
214 :
215
216 [ Fig. 1. Format of IRC server network ]
217
218
219
220 Oikarinen & Reed [Page 4]
221
222 RFC 1459 Internet Relay Chat Protocol May 1993
223
224
225 1.2 Clients
226
227 A client is anything connecting to a server that is not another
228 server. Each client is distinguished from other clients by a unique
229 nickname having a maximum length of nine (9) characters. See the
230 protocol grammar rules for what may and may not be used in a
231 nickname. In addition to the nickname, all servers must have the
232 following information about all clients: the real name of the host
233 that the client is running on, the username of the client on that
234 host, and the server to which the client is connected.
235
236 1.2.1 Operators
237
238 To allow a reasonable amount of order to be kept within the IRC
239 network, a special class of clients (operators) is allowed to perform
240 general maintenance functions on the network. Although the powers
241 granted to an operator can be considered as 'dangerous', they are
242 nonetheless required. Operators should be able to perform basic
243 network tasks such as disconnecting and reconnecting servers as
244 needed to prevent long-term use of bad network routing. In
245 recognition of this need, the protocol discussed herein provides for
246 operators only to be able to perform such functions. See sections
247 4.1.7 (SQUIT) and 4.3.5 (CONNECT).
248
249 A more controversial power of operators is the ability to remove a
250 user from the connected network by 'force', i.e. operators are able
251 to close the connection between any client and server. The
252 justification for this is delicate since its abuse is both
253 destructive and annoying. For further details on this type of
254 action, see section 4.6.1 (KILL).
255
256 1.3 Channels
257
258 A channel is a named group of one or more clients which will all
259 receive messages addressed to that channel. The channel is created
260 implicitly when the first client joins it, and the channel ceases to
261 exist when the last client leaves it. While channel exists, any
262 client can reference the channel using the name of the channel.
263
264 Channels names are strings (beginning with a '&' or '#' character) of
265 length up to 200 characters. Apart from the the requirement that the
266 first character being either '&' or '#'; the only restriction on a
267 channel name is that it may not contain any spaces (' '), a control G
268 (^G or ASCII 7), or a comma (',' which is used as a list item
269 separator by the protocol).
270
271 There are two types of channels allowed by this protocol. One is a
272 distributed channel which is known to all the servers that are
273
274
275
276 Oikarinen & Reed [Page 5]
277
278 RFC 1459 Internet Relay Chat Protocol May 1993
279
280
281 connected to the network. These channels are marked by the first
282 character being a only clients on the server where it exists may join
283 it. These are distinguished by a leading '&' character. On top of
284 these two types, there are the various channel modes available to
285 alter the characteristics of individual channels. See section 4.2.3
286 (MODE command) for more details on this.
287
288 To create a new channel or become part of an existing channel, a user
289 is required to JOIN the channel. If the channel doesn't exist prior
290 to joining, the channel is created and the creating user becomes a
291 channel operator. If the channel already exists, whether or not your
292 request to JOIN that channel is honoured depends on the current modes
293 of the channel. For example, if the channel is invite-only, (+i),
294 then you may only join if invited. As part of the protocol, a user
295 may be a part of several channels at once, but a limit of ten (10)
296 channels is recommended as being ample for both experienced and
297 novice users. See section 8.13 for more information on this.
298
299 If the IRC network becomes disjoint because of a split between two
300 servers, the channel on each side is only composed of those clients
301 which are connected to servers on the respective sides of the split,
302 possibly ceasing to exist on one side of the split. When the split
303 is healed, the connecting servers announce to each other who they
304 think is in each channel and the mode of that channel. If the
305 channel exists on both sides, the JOINs and MODEs are interpreted in
306 an inclusive manner so that both sides of the new connection will
307 agree about which clients are in the channel and what modes the
308 channel has.
309
310 1.3.1 Channel Operators
311
312 The channel operator (also referred to as a "chop" or "chanop") on a
313 given channel is considered to 'own' that channel. In recognition of
314 this status, channel operators are endowed with certain powers which
315 enable them to keep control and some sort of sanity in their channel.
316 As an owner of a channel, a channel operator is not required to have
317 reasons for their actions, although if their actions are generally
318 antisocial or otherwise abusive, it might be reasonable to ask an IRC
319 operator to intervene, or for the usersjust leave and go elsewhere
320 and form their own channel.
321
322 The commands which may only be used by channel operators are:
323
324 KICK - Eject a client from the channel
325 MODE - Change the channel's mode
326 INVITE - Invite a client to an invite-only channel (mode +i)
327 TOPIC - Change the channel topic in a mode +t channel
328
329
330
331
332 Oikarinen & Reed [Page 6]
333
334 RFC 1459 Internet Relay Chat Protocol May 1993
335
336
337 A channel operator is identified by the '@' symbol next to their
338 nickname whenever it is associated with a channel (ie replies to the
339 NAMES, WHO and WHOIS commands).
340
341 2. The IRC Specification
342
343 2.1 Overview
344
345 The protocol as described herein is for use both with server to
346 server and client to server connections. There are, however, more
347 restrictions on client connections (which are considered to be
348 untrustworthy) than on server connections.
349
350 2.2 Character codes
351
352 No specific character set is specified. The protocol is based on a a
353 set of codes which are composed of eight (8) bits, making up an
354 octet. Each message may be composed of any number of these octets;
355 however, some octet values are used for control codes which act as
356 message delimiters.
357
358 Regardless of being an 8-bit protocol, the delimiters and keywords
359 are such that protocol is mostly usable from USASCII terminal and a
360 telnet connection.
361
362 Because of IRC's scandanavian origin, the characters {}| are
363 considered to be the lower case equivalents of the characters []\,
364 respectively. This is a critical issue when determining the
365 equivalence of two nicknames.
366
367 2.3 Messages
368
369 Servers and clients send eachother messages which may or may not
370 generate a reply. If the message contains a valid command, as
371 described in later sections, the client should expect a reply as
372 specified but it is not advised to wait forever for the reply; client
373 to server and server to server communication is essentially
374 asynchronous in nature.
375
376 Each IRC message may consist of up to three main parts: the prefix
377 (optional), the command, and the command parameters (of which there
378 may be up to 15). The prefix, command, and all parameters are
379 separated by one (or more) ASCII space character(s) (0x20).
380
381 The presence of a prefix is indicated with a single leading ASCII
382 colon character (':', 0x3b), which must be the first character of the
383 message itself. There must be no gap (whitespace) between the colon
384 and the prefix. The prefix is used by servers to indicate the true
385
386
387
388 Oikarinen & Reed [Page 7]
389
390 RFC 1459 Internet Relay Chat Protocol May 1993
391
392
393 origin of the message. If the prefix is missing from the message, it
394 is assumed to have originated from the connection from which it was
395 received. Clients should not use prefix when sending a message from
396 themselves; if they use a prefix, the only valid prefix is the
397 registered nickname associated with the client. If the source
398 identified by the prefix cannot be found from the server's internal
399 database, or if the source is registered from a different link than
400 from which the message arrived, the server must ignore the message
401 silently.
402
403 The command must either be a valid IRC command or a three (3) digit
404 number represented in ASCII text.
405
406 IRC messages are always lines of characters terminated with a CR-LF
407 (Carriage Return - Line Feed) pair, and these messages shall not
408 exceed 512 characters in length, counting all characters including
409 the trailing CR-LF. Thus, there are 510 characters maximum allowed
410 for the command and its parameters. There is no provision for
411 continuation message lines. See section 7 for more details about
412 current implementations.
413
414 2.3.1 Message format in 'pseudo' BNF
415
416 The protocol messages must be extracted from the contiguous stream of
417 octets. The current solution is to designate two characters, CR and
418 LF, as message separators. Empty messages are silently ignored,
419 which permits use of the sequence CR-LF between messages
420 without extra problems.
421
422 The extracted message is parsed into the components <prefix>,
423 <command> and list of parameters matched either by <middle> or
424 <trailing> components.
425
426 The BNF representation for this is:
427
428
429 <message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf>
430 <prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ]
431 <command> ::= <letter> { <letter> } | <number> <number> <number>
432 <SPACE> ::= ' ' { ' ' }
433 <params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ]
434
435 <middle> ::= <Any *non-empty* sequence of octets not including SPACE
436 or NUL or CR or LF, the first of which may not be ':'>
437 <trailing> ::= <Any, possibly *empty*, sequence of octets not including
438 NUL or CR or LF>
439
440 <crlf> ::= CR LF
441
442
443
444 Oikarinen & Reed [Page 8]
445
446 RFC 1459 Internet Relay Chat Protocol May 1993
447
448
449 NOTES:
450
451 1) <SPACE> is consists only of SPACE character(s) (0x20).
452 Specially notice that TABULATION, and all other control
453 characters are considered NON-WHITE-SPACE.
454
455 2) After extracting the parameter list, all parameters are equal,
456 whether matched by <middle> or <trailing>. <Trailing> is just
457 a syntactic trick to allow SPACE within parameter.
458
459 3) The fact that CR and LF cannot appear in parameter strings is
460 just artifact of the message framing. This might change later.
461
462 4) The NUL character is not special in message framing, and
463 basically could end up inside a parameter, but as it would
464 cause extra complexities in normal C string handling. Therefore
465 NUL is not allowed within messages.
466
467 5) The last parameter may be an empty string.
468
469 6) Use of the extended prefix (['!' <user> ] ['@' <host> ]) must
470 not be used in server to server communications and is only
471 intended for server to client messages in order to provide
472 clients with more useful information about who a message is
473 from without the need for additional queries.
474
475 Most protocol messages specify additional semantics and syntax for
476 the extracted parameter strings dictated by their position in the
477 list. For example, many server commands will assume that the first
478 parameter after the command is the list of targets, which can be
479 described with:
480
481 <target> ::= <to> [ "," <target> ]
482 <to> ::= <channel> | <user> '@' <servername> | <nick> | <mask>
483 <channel> ::= ('#' | '&') <chstring>
484 <servername> ::= <host>
485 <host> ::= see RFC 952 [DNS:4] for details on allowed hostnames
486 <nick> ::= <letter> { <letter> | <number> | <special> }
487 <mask> ::= ('#' | '$') <chstring>
488 <chstring> ::= <any 8bit code except SPACE, BELL, NUL, CR, LF and
489 comma (',')>
490
491 Other parameter syntaxes are:
492
493 <user> ::= <nonwhite> { <nonwhite> }
494 <letter> ::= 'a' ... 'z' | 'A' ... 'Z'
495 <number> ::= '0' ... '9'
496 <special> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'
497
498
499
500 Oikarinen & Reed [Page 9]
501
502 RFC 1459 Internet Relay Chat Protocol May 1993
503
504
505 <nonwhite> ::= <any 8bit code except SPACE (0x20), NUL (0x0), CR
506 (0xd), and LF (0xa)>
507
508 2.4 Numeric replies
509
510 Most of the messages sent to the server generate a reply of some
511 sort. The most common reply is the numeric reply, used for both
512 errors and normal replies. The numeric reply must be sent as one
513 message consisting of the sender prefix, the three digit numeric, and
514 the target of the reply. A numeric reply is not allowed to originate
515 from a client; any such messages received by a server are silently
516 dropped. In all other respects, a numeric reply is just like a normal
517 message, except that the keyword is made up of 3 numeric digits
518 rather than a string of letters. A list of different replies is
519 supplied in section 6.
520
521 3. IRC Concepts.
522
523 This section is devoted to describing the actual concepts behind the
524 organization of the IRC protocol and how the current
525 implementations deliver different classes of messages.
526
527
528
529 1--\
530 A D---4
531 2--/ \ /
532 B----C
533 / \
534 3 E
535
536 Servers: A, B, C, D, E Clients: 1, 2, 3, 4
537
538 [ Fig. 2. Sample small IRC network ]
539
540 3.1 One-to-one communication
541
542 Communication on a one-to-one basis is usually only performed by
543 clients, since most server-server traffic is not a result of servers
544 talking only to each other. To provide a secure means for clients to
545 talk to each other, it is required that all servers be able to send a
546 message in exactly one direction along the spanning tree in order to
547 reach any client. The path of a message being delivered is the
548 shortest path between any two points on the spanning tree.
549
550 The following examples all refer to Figure 2 above.
551
552
553
554
555
556 Oikarinen & Reed [Page 10]
557
558 RFC 1459 Internet Relay Chat Protocol May 1993
559
560
561 Example 1:
562 A message between clients 1 and 2 is only seen by server A, which
563 sends it straight to client 2.
564
565 Example 2:
566 A message between clients 1 and 3 is seen by servers A & B, and
567 client 3. No other clients or servers are allowed see the message.
568
569 Example 3:
570 A message between clients 2 and 4 is seen by servers A, B, C & D
571 and client 4 only.
572
573 3.2 One-to-many
574
575 The main goal of IRC is to provide a forum which allows easy and
576 efficient conferencing (one to many conversations). IRC offers
577 several means to achieve this, each serving its own purpose.
578
579 3.2.1 To a list
580
581 The least efficient style of one-to-many conversation is through
582 clients talking to a 'list' of users. How this is done is almost
583 self explanatory: the client gives a list of destinations to which
584 the message is to be delivered and the server breaks it up and
585 dispatches a separate copy of the message to each given destination.
586 This isn't as efficient as using a group since the destination list
587 is broken up and the dispatch sent without checking to make sure
588 duplicates aren't sent down each path.
589
590 3.2.2 To a group (channel)
591
592 In IRC the channel has a role equivalent to that of the multicast
593 group; their existence is dynamic (coming and going as people join
594 and leave channels) and the actual conversation carried out on a
595 channel is only sent to servers which are supporting users on a given
596 channel. If there are multiple users on a server in the same
597 channel, the message text is sent only once to that server and then
598 sent to each client on the channel. This action is then repeated for
599 each client-server combination until the original message has fanned
600 out and reached each member of the channel.
601
602 The following examples all refer to Figure 2.
603
604 Example 4:
605 Any channel with 1 client in it. Messages to the channel go to the
606 server and then nowhere else.
607
608
609
610
611
612 Oikarinen & Reed [Page 11]
613
614 RFC 1459 Internet Relay Chat Protocol May 1993
615
616
617 Example 5:
618 2 clients in a channel. All messages traverse a path as if they
619 were private messages between the two clients outside a channel.
620
621 Example 6:
622 Clients 1, 2 and 3 in a channel. All messages to the channel are
623 sent to all clients and only those servers which must be traversed
624 by the message if it were a private message to a single client. If
625 client 1 sends a message, it goes back to client 2 and then via
626 server B to client 3.
627
628 3.2.3 To a host/server mask
629
630 To provide IRC operators with some mechanism to send messages to a
631 large body of related users, host and server mask messages are
632 provided. These messages are sent to users whose host or server
633 information match that of the mask. The messages are only sent to
634 locations where users are, in a fashion similar to that of channels.
635
636 3.3 One-to-all
637
638 The one-to-all type of message is better described as a broadcast
639 message, sent to all clients or servers or both. On a large network
640 of users and servers, a single message can result in a lot of traffic
641 being sent over the network in an effort to reach all of the desired
642 destinations.
643
644 For some messages, there is no option but to broadcast it to all
645 servers so that the state information held by each server is
646 reasonably consistent between servers.
647
648 3.3.1 Client-to-Client
649
650 There is no class of message which, from a single message, results in
651 a message being sent to every other client.
652
653 3.3.2 Client-to-Server
654
655 Most of the commands which result in a change of state information
656 (such as channel membership, channel mode, user status, etc) must be
657 sent to all servers by default, and this distribution may not be
658 changed by the client.
659
660 3.3.3 Server-to-Server.
661
662 While most messages between servers are distributed to all 'other'
663 servers, this is only required for any message that affects either a
664 user, channel or server. Since these are the basic items found in
665
666
667
668 Oikarinen & Reed [Page 12]
669
670 RFC 1459 Internet Relay Chat Protocol May 1993
671
672
673 IRC, nearly all messages originating from a server are broadcast to
674 all other connected servers.
675
676 4. Message details
677
678 On the following pages are descriptions of each message recognized by
679 the IRC server and client. All commands described in this section
680 must be implemented by any server for this protocol.
681
682 Where the reply ERR_NOSUCHSERVER is listed, it means that the
683 <server> parameter could not be found. The server must not send any
684 other replies after this for that command.
685
686 The server to which a client is connected is required to parse the
687 complete message, returning any appropriate errors. If the server
688 encounters a fatal error while parsing a message, an error must be
689 sent back to the client and the parsing terminated. A fatal error
690 may be considered to be incorrect command, a destination which is
691 otherwise unknown to the server (server, nick or channel names fit
692 this category), not enough parameters or incorrect privileges.
693
694 If a full set of parameters is presented, then each must be checked
695 for validity and appropriate responses sent back to the client. In
696 the case of messages which use parameter lists using the comma as an
697 item separator, a reply must be sent for each item.
698
699 In the examples below, some messages appear using the full format:
700
701 :Name COMMAND parameter list
702
703 Such examples represent a message from "Name" in transit between
704 servers, where it is essential to include the name of the original
705 sender of the message so remote servers may send back a reply along
706 the correct path.
707
708 4.1 Connection Registration
709
710 The commands described here are used to register a connection with an
711 IRC server as either a user or a server as well as correctly
712 disconnect.
713
714 A "PASS" command is not required for either client or server
715 connection to be registered, but it must precede the server message
716 or the latter of the NICK/USER combination. It is strongly
717 recommended that all server connections have a password in order to
718 give some level of security to the actual connections. The
719 recommended order for a client to register is as follows:
720
721
722
723
724 Oikarinen & Reed [Page 13]
725
726 RFC 1459 Internet Relay Chat Protocol May 1993
727
728
729 1. Pass message
730 2. Nick message
731 3. User message
732
733 4.1.1 Password message
734
735
736 Command: PASS
737 Parameters: <password>
738
739 The PASS command is used to set a 'connection password'. The
740 password can and must be set before any attempt to register the
741 connection is made. Currently this requires that clients send a PASS
742 command before sending the NICK/USER combination and servers *must*
743 send a PASS command before any SERVER command. The password supplied
744 must match the one contained in the C/N lines (for servers) or I
745 lines (for clients). It is possible to send multiple PASS commands
746 before registering but only the last one sent is used for
747 verification and it may not be changed once registered. Numeric
748 Replies:
749
750 ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
751
752 Example:
753
754 PASS secretpasswordhere
755
756 4.1.2 Nick message
757
758 Command: NICK
759 Parameters: <nickname> [ <hopcount> ]
760
761 NICK message is used to give user a nickname or change the previous
762 one. The <hopcount> parameter is only used by servers to indicate
763 how far away a nick is from its home server. A local connection has
764 a hopcount of 0. If supplied by a client, it must be ignored.
765
766 If a NICK message arrives at a server which already knows about an
767 identical nickname for another client, a nickname collision occurs.
768 As a result of a nickname collision, all instances of the nickname
769 are removed from the server's database, and a KILL command is issued
770 to remove the nickname from all other server's database. If the NICK
771 message causing the collision was a nickname change, then the
772 original (old) nick must be removed as well.
773
774 If the server recieves an identical NICK from a client which is
775 directly connected, it may issue an ERR_NICKCOLLISION to the local
776 client, drop the NICK command, and not generate any kills.
777
778
779
780 Oikarinen & Reed [Page 14]
781
782 RFC 1459 Internet Relay Chat Protocol May 1993
783
784
785 Numeric Replies:
786
787 ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME
788 ERR_NICKNAMEINUSE ERR_NICKCOLLISION
789
790 Example:
791
792 NICK Wiz ; Introducing new nick "Wiz".
793
794 :WiZ NICK Kilroy ; WiZ changed his nickname to Kilroy.
795
796 4.1.3 User message
797
798 Command: USER
799 Parameters: <username> <hostname> <servername> <realname>
800
801 The USER message is used at the beginning of connection to specify
802 the username, hostname, servername and realname of s new user. It is
803 also used in communication between servers to indicate new user
804 arriving on IRC, since only after both USER and NICK have been
805 received from a client does a user become registered.
806
807 Between servers USER must to be prefixed with client's NICKname.
808 Note that hostname and servername are normally ignored by the IRC
809 server when the USER command comes from a directly connected client
810 (for security reasons), but they are used in server to server
811 communication. This means that a NICK must always be sent to a
812 remote server when a new user is being introduced to the rest of the
813 network before the accompanying USER is sent.
814
815 It must be noted that realname parameter must be the last parameter,
816 because it may contain space characters and must be prefixed with a
817 colon (':') to make sure this is recognised as such.
818
819 Since it is easy for a client to lie about its username by relying
820 solely on the USER message, the use of an "Identity Server" is
821 recommended. If the host which a user connects from has such a
822 server enabled the username is set to that as in the reply from the
823 "Identity Server".
824
825 Numeric Replies:
826
827 ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
828
829 Examples:
830
831
832 USER guest tolmoon tolsun :Ronnie Reagan
833
834
835
836 Oikarinen & Reed [Page 15]
837
838 RFC 1459 Internet Relay Chat Protocol May 1993
839
840
841 ; User registering themselves with a
842 username of "guest" and real name
843 "Ronnie Reagan".
844
845
846 :testnick USER guest tolmoon tolsun :Ronnie Reagan
847 ; message between servers with the
848 nickname for which the USER command
849 belongs to
850
851 4.1.4 Server message
852
853 Command: SERVER
854 Parameters: <servername> <hopcount> <info>
855
856 The server message is used to tell a server that the other end of a
857 new connection is a server. This message is also used to pass server
858 data over whole net. When a new server is connected to net,
859 information about it be broadcast to the whole network. <hopcount>
860 is used to give all servers some internal information on how far away
861 all servers are. With a full server list, it would be possible to
862 construct a map of the entire server tree, but hostmasks prevent this
863 from being done.
864
865 The SERVER message must only be accepted from either (a) a connection
866 which is yet to be registered and is attempting to register as a
867 server, or (b) an existing connection to another server, in which
868 case the SERVER message is introducing a new server behind that
869 server.
870
871 Most errors that occur with the receipt of a SERVER command result in
872 the connection being terminated by the destination host (target
873 SERVER). Error replies are usually sent using the "ERROR" command
874 rather than the numeric since the ERROR command has several useful
875 properties which make it useful here.
876
877 If a SERVER message is parsed and attempts to introduce a server
878 which is already known to the receiving server, the connection from
879 which that message must be closed (following the correct procedures),
880 since a duplicate route to a server has formed and the acyclic nature
881 of the IRC tree broken.
882
883 Numeric Replies:
884
885 ERR_ALREADYREGISTRED
886
887 Example:
888
889
890
891
892 Oikarinen & Reed [Page 16]
893
894 RFC 1459 Internet Relay Chat Protocol May 1993
895
896
897 SERVER test.oulu.fi 1 :[tolsun.oulu.fi] Experimental server
898 ; New server test.oulu.fi introducing
899 itself and attempting to register. The
900 name in []'s is the hostname for the
901 host running test.oulu.fi.
902
903
904 :tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server
905 ; Server tolsun.oulu.fi is our uplink
906 for csd.bu.edu which is 5 hops away.
907
908 4.1.5 Oper
909
910 Command: OPER
911 Parameters: <user> <password>
912
913 OPER message is used by a normal user to obtain operator privileges.
914 The combination of <user> and <password> are required to gain
915 Operator privileges.
916
917 If the client sending the OPER command supplies the correct password
918 for the given user, the server then informs the rest of the network
919 of the new operator by issuing a "MODE +o" for the clients nickname.
920
921 The OPER message is client-server only.
922
923 Numeric Replies:
924
925 ERR_NEEDMOREPARAMS RPL_YOUREOPER
926 ERR_NOOPERHOST ERR_PASSWDMISMATCH
927
928 Example:
929
930 OPER foo bar ; Attempt to register as an operator
931 using a username of "foo" and "bar" as
932 the password.
933
934 4.1.6 Quit
935
936 Command: QUIT
937 Parameters: [<Quit message>]
938
939 A client session is ended with a quit message. The server must close
940 the connection to a client which sends a QUIT message. If a "Quit
941 Message" is given, this will be sent instead of the default message,
942 the nickname.
943
944 When netsplits (disconnecting of two servers) occur, the quit message
945
946
947
948 Oikarinen & Reed [Page 17]
949
950 RFC 1459 Internet Relay Chat Protocol May 1993
951
952
953 is composed of the names of two servers involved, separated by a
954 space. The first name is that of the server which is still connected
955 and the second name is that of the server that has become
956 disconnected.
957
958 If, for some other reason, a client connection is closed without the
959 client issuing a QUIT command (e.g. client dies and EOF occurs
960 on socket), the server is required to fill in the quit message with
961 some sort of message reflecting the nature of the event which
962 caused it to happen.
963
964 Numeric Replies:
965
966 None.
967
968 Examples:
969
970 QUIT :Gone to have lunch ; Preferred message format.
971
972 4.1.7 Server quit message
973
974 Command: SQUIT
975 Parameters: <server> <comment>
976
977 The SQUIT message is needed to tell about quitting or dead servers.
978 If a server wishes to break the connection to another server it must
979 send a SQUIT message to the other server, using the the name of the
980 other server as the server parameter, which then closes its
981 connection to the quitting server.
982
983 This command is also available operators to help keep a network of
984 IRC servers connected in an orderly fashion. Operators may also
985 issue an SQUIT message for a remote server connection. In this case,
986 the SQUIT must be parsed by each server inbetween the operator and
987 the remote server, updating the view of the network held by each
988 server as explained below.
989
990 The <comment> should be supplied by all operators who execute a SQUIT
991 for a remote server (that is not connected to the server they are
992 currently on) so that other operators are aware for the reason of
993 this action. The <comment> is also filled in by servers which may
994 place an error or similar message here.
995
996 Both of the servers which are on either side of the connection being
997 closed are required to to send out a SQUIT message (to all its other
998 server connections) for all other servers which are considered to be
999 behind that link.
1000
1001
1002
1003
1004 Oikarinen & Reed [Page 18]
1005
1006 RFC 1459 Internet Relay Chat Protocol May 1993
1007
1008
1009 Similarly, a QUIT message must be sent to the other connected servers
1010 rest of the network on behalf of all clients behind that link. In
1011 addition to this, all channel members of a channel which lost a
1012 member due to the split must be sent a QUIT message.
1013
1014 If a server connection is terminated prematurely (e.g. the server on
1015 the other end of the link died), the server which detects
1016 this disconnection is required to inform the rest of the network
1017 that the connection has closed and fill in the comment field
1018 with something appropriate.
1019
1020 Numeric replies:
1021
1022 ERR_NOPRIVILEGES ERR_NOSUCHSERVER
1023
1024 Example:
1025
1026 SQUIT tolsun.oulu.fi :Bad Link ? ; the server link tolson.oulu.fi has
1027 been terminated because of "Bad Link".
1028
1029 :Trillian SQUIT cm22.eng.umd.edu :Server out of control
1030 ; message from Trillian to disconnect
1031 "cm22.eng.umd.edu" from the net
1032 because "Server out of control".
1033
1034 4.2 Channel operations
1035
1036 This group of messages is concerned with manipulating channels, their
1037 properties (channel modes), and their contents (typically clients).
1038 In implementing these, a number of race conditions are inevitable
1039 when clients at opposing ends of a network send commands which will
1040 ultimately clash. It is also required that servers keep a nickname
1041 history to ensure that wherever a <nick> parameter is given, the
1042 server check its history in case it has recently been changed.
1043
1044 4.2.1 Join message
1045
1046 Command: JOIN
1047 Parameters: <channel>{,<channel>} [<key>{,<key>}]
1048
1049 The JOIN command is used by client to start listening a specific
1050 channel. Whether or not a client is allowed to join a channel is
1051 checked only by the server the client is connected to; all other
1052 servers automatically add the user to the channel when it is received
1053 from other servers. The conditions which affect this are as follows:
1054
1055 1. the user must be invited if the channel is invite-only;
1056
1057
1058
1059
1060 Oikarinen & Reed [Page 19]
1061
1062 RFC 1459 Internet Relay Chat Protocol May 1993
1063
1064
1065 2. the user's nick/username/hostname must not match any
1066 active bans;
1067
1068 3. the correct key (password) must be given if it is set.
1069
1070 These are discussed in more detail under the MODE command (see
1071 section 4.2.3 for more details).
1072
1073 Once a user has joined a channel, they receive notice about all
1074 commands their server receives which affect the channel. This
1075 includes MODE, KICK, PART, QUIT and of course PRIVMSG/NOTICE. The
1076 JOIN command needs to be broadcast to all servers so that each server
1077 knows where to find the users who are on the channel. This allows
1078 optimal delivery of PRIVMSG/NOTICE messages to the channel.
1079
1080 If a JOIN is successful, the user is then sent the channel's topic
1081 (using RPL_TOPIC) and the list of users who are on the channel (using
1082 RPL_NAMREPLY), which must include the user joining.
1083
1084 Numeric Replies:
1085
1086 ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN
1087 ERR_INVITEONLYCHAN ERR_BADCHANNELKEY
1088 ERR_CHANNELISFULL ERR_BADCHANMASK
1089 ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS
1090 RPL_TOPIC
1091
1092 Examples:
1093
1094 JOIN #foobar ; join channel #foobar.
1095
1096 JOIN &foo fubar ; join channel &foo using key "fubar".
1097
1098 JOIN #foo,&bar fubar ; join channel #foo using key "fubar"
1099 and &bar using no key.
1100
1101 JOIN #foo,#bar fubar,foobar ; join channel #foo using key "fubar".
1102 and channel #bar using key "foobar".
1103
1104 JOIN #foo,#bar ; join channels #foo and #bar.
1105
1106 :WiZ JOIN #Twilight_zone ; JOIN message from WiZ
1107
1108 4.2.2 Part message
1109
1110 Command: PART
1111 Parameters: <channel>{,<channel>}
1112
1113
1114
1115
1116 Oikarinen & Reed [Page 20]
1117
1118 RFC 1459 Internet Relay Chat Protocol May 1993
1119
1120
1121 The PART message causes the client sending the message to be removed
1122 from the list of active users for all given channels listed in the
1123 parameter string.
1124
1125 Numeric Replies:
1126
1127 ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
1128 ERR_NOTONCHANNEL
1129
1130 Examples:
1131
1132 PART #twilight_zone ; leave channel "#twilight_zone"
1133
1134 PART #oz-ops,&group5 ; leave both channels "&group5" and
1135 "#oz-ops".
1136
1137 4.2.3 Mode message
1138
1139 Command: MODE
1140
1141 The MODE command is a dual-purpose command in IRC. It allows both
1142 usernames and channels to have their mode changed. The rationale for
1143 this choice is that one day nicknames will be obsolete and the
1144 equivalent property will be the channel.
1145
1146 When parsing MODE messages, it is recommended that the entire message
1147 be parsed first and then the changes which resulted then passed on.
1148
1149 4.2.3.1 Channel modes
1150
1151 Parameters: <channel> {[+|-]|o|p|s|i|t|n|b|v} [<limit>] [<user>]
1152 [<ban mask>]
1153
1154 The MODE command is provided so that channel operators may change the
1155 characteristics of `their' channel. It is also required that servers
1156 be able to change channel modes so that channel operators may be
1157 created.
1158
1159 The various modes available for channels are as follows:
1160
1161 o - give/take channel operator privileges;
1162 p - private channel flag;
1163 s - secret channel flag;
1164 i - invite-only channel flag;
1165 t - topic settable by channel operator only flag;
1166 n - no messages to channel from clients on the outside;
1167 m - moderated channel;
1168 l - set the user limit to channel;
1169
1170
1171
1172 Oikarinen & Reed [Page 21]
1173
1174 RFC 1459 Internet Relay Chat Protocol May 1993
1175
1176
1177 b - set a ban mask to keep users out;
1178 v - give/take the ability to speak on a moderated channel;
1179 k - set a channel key (password).
1180
1181 When using the 'o' and 'b' options, a restriction on a total of three
1182 per mode command has been imposed. That is, any combination of 'o'
1183 and
1184
1185 4.2.3.2 User modes
1186
1187 Parameters: <nickname> {[+|-]|i|w|s|o}
1188
1189 The user MODEs are typically changes which affect either how the
1190 client is seen by others or what 'extra' messages the client is sent.
1191 A user MODE command may only be accepted if both the sender of the
1192 message and the nickname given as a parameter are both the same.
1193
1194 The available modes are as follows:
1195
1196 i - marks a users as invisible;
1197 s - marks a user for receipt of server notices;
1198 w - user receives wallops;
1199 o - operator flag.
1200
1201 Additional modes may be available later on.
1202
1203 If a user attempts to make themselves an operator using the "+o"
1204 flag, the attempt should be ignored. There is no restriction,
1205 however, on anyone `deopping' themselves (using "-o"). Numeric
1206 Replies:
1207
1208 ERR_NEEDMOREPARAMS RPL_CHANNELMODEIS
1209 ERR_CHANOPRIVSNEEDED ERR_NOSUCHNICK
1210 ERR_NOTONCHANNEL ERR_KEYSET
1211 RPL_BANLIST RPL_ENDOFBANLIST
1212 ERR_UNKNOWNMODE ERR_NOSUCHCHANNEL
1213
1214 ERR_USERSDONTMATCH RPL_UMODEIS
1215 ERR_UMODEUNKNOWNFLAG
1216
1217 Examples:
1218
1219 Use of Channel Modes:
1220
1221 MODE #Finnish +im ; Makes #Finnish channel moderated and
1222 'invite-only'.
1223
1224 MODE #Finnish +o Kilroy ; Gives 'chanop' privileges to Kilroy on
1225
1226
1227
1228 Oikarinen & Reed [Page 22]
1229
1230 RFC 1459 Internet Relay Chat Protocol May 1993
1231
1232
1233 channel #Finnish.
1234
1235 MODE #Finnish +v Wiz ; Allow WiZ to speak on #Finnish.
1236
1237 MODE #Fins -s ; Removes 'secret' flag from channel
1238 #Fins.
1239
1240 MODE #42 +k oulu ; Set the channel key to "oulu".
1241
1242 MODE #eu-opers +l 10 ; Set the limit for the number of users
1243 on channel to 10.
1244
1245 MODE &oulu +b ; list ban masks set for channel.
1246
1247 MODE &oulu +b *!*@* ; prevent all users from joining.
1248
1249 MODE &oulu +b *!*@*.edu ; prevent any user from a hostname
1250 matching *.edu from joining.
1251
1252 Use of user Modes:
1253
1254 :MODE WiZ -w ; turns reception of WALLOPS messages
1255 off for WiZ.
1256
1257 :Angel MODE Angel +i ; Message from Angel to make themselves
1258 invisible.
1259
1260 MODE WiZ -o ; WiZ 'deopping' (removing operator
1261 status). The plain reverse of this
1262 command ("MODE WiZ +o") must not be
1263 allowed from users since would bypass
1264 the OPER command.
1265
1266 4.2.4 Topic message
1267
1268 Command: TOPIC
1269 Parameters: <channel> [<topic>]
1270
1271 The TOPIC message is used to change or view the topic of a channel.
1272 The topic for channel <channel> is returned if there is no <topic>
1273 given. If the <topic> parameter is present, the topic for that
1274 channel will be changed, if the channel modes permit this action.
1275
1276 Numeric Replies:
1277
1278 ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL
1279 RPL_NOTOPIC RPL_TOPIC
1280 ERR_CHANOPRIVSNEEDED
1281
1282
1283
1284 Oikarinen & Reed [Page 23]
1285
1286 RFC 1459 Internet Relay Chat Protocol May 1993
1287
1288
1289 Examples:
1290
1291 :Wiz TOPIC #test :New topic ;User Wiz setting the topic.
1292
1293 TOPIC #test :another topic ;set the topic on #test to "another
1294 topic".
1295
1296 TOPIC #test ; check the topic for #test.
1297
1298 4.2.5 Names message
1299
1300 Command: NAMES
1301 Parameters: [<channel>{,<channel>}]
1302
1303 By using the NAMES command, a user can list all nicknames that are
1304 visible to them on any channel that they can see. Channel names
1305 which they can see are those which aren't private (+p) or secret (+s)
1306 or those which they are actually on. The <channel> parameter
1307 specifies which channel(s) to return information about if valid.
1308 There is no error reply for bad channel names.
1309
1310 If no <channel> parameter is given, a list of all channels and their
1311 occupants is returned. At the end of this list, a list of users who
1312 are visible but either not on any channel or not on a visible channel
1313 are listed as being on `channel' "*".
1314
1315 Numerics:
1316
1317 RPL_NAMREPLY RPL_ENDOFNAMES
1318
1319 Examples:
1320
1321 NAMES #twilight_zone,#42 ; list visible users on #twilight_zone
1322 and #42 if the channels are visible to
1323 you.
1324
1325 NAMES ; list all visible channels and users
1326
1327 4.2.6 List message
1328
1329 Command: LIST
1330 Parameters: [<channel>{,<channel>} [<server>]]
1331
1332 The list message is used to list channels and their topics. If the
1333 <channel> parameter is used, only the status of that channel
1334 is displayed. Private channels are listed (without their
1335 topics) as channel "Prv" unless the client generating the query is
1336 actually on that channel. Likewise, secret channels are not listed
1337
1338
1339
1340 Oikarinen & Reed [Page 24]
1341
1342 RFC 1459 Internet Relay Chat Protocol May 1993
1343
1344
1345 at all unless the client is a member of the channel in question.
1346
1347 Numeric Replies:
1348
1349 ERR_NOSUCHSERVER RPL_LISTSTART
1350 RPL_LIST RPL_LISTEND
1351
1352 Examples:
1353
1354 LIST ; List all channels.
1355
1356 LIST #twilight_zone,#42 ; List channels #twilight_zone and #42
1357
1358 4.2.7 Invite message
1359
1360 Command: INVITE
1361 Parameters: <nickname> <channel>
1362
1363 The INVITE message is used to invite users to a channel. The
1364 parameter <nickname> is the nickname of the person to be invited to
1365 the target channel <channel>. There is no requirement that the
1366 channel the target user is being invited to must exist or be a valid
1367 channel. To invite a user to a channel which is invite only (MODE
1368 +i), the client sending the invite must be recognised as being a
1369 channel operator on the given channel.
1370
1371 Numeric Replies:
1372
1373 ERR_NEEDMOREPARAMS ERR_NOSUCHNICK
1374 ERR_NOTONCHANNEL ERR_USERONCHANNEL
1375 ERR_CHANOPRIVSNEEDED
1376 RPL_INVITING RPL_AWAY
1377
1378 Examples:
1379
1380 :Angel INVITE Wiz #Dust ; User Angel inviting WiZ to channel
1381 #Dust
1382
1383 INVITE Wiz #Twilight_Zone ; Command to invite WiZ to
1384 #Twilight_zone
1385
1386 4.2.8 Kick command
1387
1388 Command: KICK
1389 Parameters: <channel> <user> [<comment>]
1390
1391 The KICK command can be used to forcibly remove a user from a
1392 channel. It 'kicks them out' of the channel (forced PART).
1393
1394
1395
1396 Oikarinen & Reed [Page 25]
1397
1398 RFC 1459 Internet Relay Chat Protocol May 1993
1399
1400
1401 Only a channel operator may kick another user out of a channel.
1402 Each server that receives a KICK message checks that it is valid
1403 (ie the sender is actually a channel operator) before removing
1404 the victim from the channel.
1405
1406 Numeric Replies:
1407
1408 ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
1409 ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED
1410 ERR_NOTONCHANNEL
1411
1412 Examples:
1413
1414 KICK &Melbourne Matthew ; Kick Matthew from &Melbourne
1415
1416 KICK #Finnish John :Speaking English
1417 ; Kick John from #Finnish using
1418 "Speaking English" as the reason
1419 (comment).
1420
1421 :WiZ KICK #Finnish John ; KICK message from WiZ to remove John
1422 from channel #Finnish
1423
1424 NOTE:
1425 It is possible to extend the KICK command parameters to the
1426 following:
1427
1428 <channel>{,<channel>} <user>{,<user>} [<comment>]
1429
1430 4.3 Server queries and commands
1431
1432 The server query group of commands has been designed to return
1433 information about any server which is connected to the network. All
1434 servers connected must respond to these queries and respond
1435 correctly. Any invalid response (or lack thereof) must be considered
1436 a sign of a broken server and it must be disconnected/disabled as
1437 soon as possible until the situation is remedied.
1438
1439 In these queries, where a parameter appears as "<server>", it will
1440 usually mean it can be a nickname or a server or a wildcard name of
1441 some sort. For each parameter, however, only one query and set of
1442 replies is to be generated.
1443
1444 4.3.1 Version message
1445
1446 Command: VERSION
1447 Parameters: [<server>]
1448
1449
1450
1451
1452 Oikarinen & Reed [Page 26]
1453
1454 RFC 1459 Internet Relay Chat Protocol May 1993
1455
1456
1457 The VERSION message is used to query the version of the server
1458 program. An optional parameter <server> is used to query the version
1459 of the server program which a client is not directly connected to.
1460
1461 Numeric Replies:
1462
1463 ERR_NOSUCHSERVER RPL_VERSION
1464
1465 Examples:
1466
1467 :Wiz VERSION *.se ; message from Wiz to check the version
1468 of a server matching "*.se"
1469
1470 VERSION tolsun.oulu.fi ; check the version of server
1471 "tolsun.oulu.fi".
1472
1473 4.3.2 Stats message
1474
1475 Command: STATS
1476 Parameters: [<query> [<server>]]
1477
1478 The stats message is used to query statistics of certain server. If
1479 <server> parameter is omitted, only the end of stats reply is sent
1480 back. The implementation of this command is highly dependent on the
1481 server which replies, although the server must be able to supply
1482 information as described by the queries below (or similar).
1483
1484 A query may be given by any single letter which is only checked by
1485 the destination server (if given as the <server> parameter) and is
1486 otherwise passed on by intermediate servers, ignored and unaltered.
1487 The following queries are those found in the current IRC
1488 implementation and provide a large portion of the setup information
1489 for that server. Although these may not be supported in the same way
1490 by other versions, all servers should be able to supply a valid reply
1491 to a STATS query which is consistent with the reply formats currently
1492 used and the purpose of the query.
1493
1494 The currently supported queries are:
1495
1496 c - returns a list of servers which the server may connect
1497 to or allow connections from;
1498 h - returns a list of servers which are either forced to be
1499 treated as leaves or allowed to act as hubs;
1500 i - returns a list of hosts which the server allows a client
1501 to connect from;
1502 k - returns a list of banned username/hostname combinations
1503 for that server;
1504 l - returns a list of the server's connections, showing how
1505
1506
1507
1508 Oikarinen & Reed [Page 27]
1509
1510 RFC 1459 Internet Relay Chat Protocol May 1993
1511
1512
1513 long each connection has been established and the traffic
1514 over that connection in bytes and messages for each
1515 direction;
1516 m - returns a list of commands supported by the server and
1517 the usage count for each if the usage count is non zero;
1518 o - returns a list of hosts from which normal clients may
1519 become operators;
1520 y - show Y (Class) lines from server's configuration file;
1521 u - returns a string showing how long the server has been up.
1522
1523 Numeric Replies:
1524
1525 ERR_NOSUCHSERVER
1526 RPL_STATSCLINE RPL_STATSNLINE
1527 RPL_STATSILINE RPL_STATSKLINE
1528 RPL_STATSQLINE RPL_STATSLLINE
1529 RPL_STATSLINKINFO RPL_STATSUPTIME
1530 RPL_STATSCOMMANDS RPL_STATSOLINE
1531 RPL_STATSHLINE RPL_ENDOFSTATS
1532
1533 Examples:
1534
1535 STATS m ; check the command usage for the server
1536 you are connected to
1537
1538 :Wiz STATS c eff.org ; request by WiZ for C/N line
1539 information from server eff.org
1540
1541 4.3.3 Links message
1542
1543 Command: LINKS
1544 Parameters: [[<remote server>] <server mask>]
1545
1546 With LINKS, a user can list all servers which are known by the server
1547 answering the query. The returned list of servers must match the
1548 mask, or if no mask is given, the full list is returned.
1549
1550 If <remote server> is given in addition to <server mask>, the LINKS
1551 command is forwarded to the first server found that matches that name
1552 (if any), and that server is then required to answer the query.
1553
1554 Numeric Replies:
1555
1556 ERR_NOSUCHSERVER
1557 RPL_LINKS RPL_ENDOFLINKS
1558
1559 Examples:
1560
1561
1562
1563
1564 Oikarinen & Reed [Page 28]
1565
1566 RFC 1459 Internet Relay Chat Protocol May 1993
1567
1568
1569 LINKS *.au ; list all servers which have a name
1570 that matches *.au;
1571
1572 :WiZ LINKS *.bu.edu *.edu ; LINKS message from WiZ to the first
1573 server matching *.edu for a list of
1574 servers matching *.bu.edu.
1575
1576 4.3.4 Time message
1577
1578 Command: TIME
1579 Parameters: [<server>]
1580
1581 The time message is used to query local time from the specified
1582 server. If the server parameter is not given, the server handling the
1583 command must reply to the query.
1584
1585 Numeric Replies:
1586
1587 ERR_NOSUCHSERVER RPL_TIME
1588
1589 Examples:
1590
1591 TIME tolsun.oulu.fi ; check the time on the server
1592 "tolson.oulu.fi"
1593
1594 Angel TIME *.au ; user angel checking the time on a
1595 server matching "*.au"
1596
1597 4.3.5 Connect message
1598
1599 Command: CONNECT
1600 Parameters: <target server> [<port> [<remote server>]]
1601
1602 The CONNECT command can be used to force a server to try to establish
1603 a new connection to another server immediately. CONNECT is a
1604 privileged command and is to be available only to IRC Operators. If
1605 a remote server is given then the CONNECT attempt is made by that
1606 server to <target server> and <port>.
1607
1608 Numeric Replies:
1609
1610 ERR_NOSUCHSERVER ERR_NOPRIVILEGES
1611 ERR_NEEDMOREPARAMS
1612
1613 Examples:
1614
1615 CONNECT tolsun.oulu.fi ; Attempt to connect a server to
1616 tolsun.oulu.fi
1617
1618
1619
1620 Oikarinen & Reed [Page 29]
1621
1622 RFC 1459 Internet Relay Chat Protocol May 1993
1623
1624
1625 :WiZ CONNECT eff.org 6667 csd.bu.edu
1626 ; CONNECT attempt by WiZ to get servers
1627 eff.org and csd.bu.edu connected on port
1628 6667.
1629
1630 4.3.6 Trace message
1631
1632 Command: TRACE
1633 Parameters: [<server>]
1634
1635 TRACE command is used to find the route to specific server. Each
1636 server that processes this message must tell the sender about it by
1637 sending a reply indicating it is a pass-through link, forming a chain
1638 of replies similar to that gained from using "traceroute". After
1639 sending this reply back, it must then send the TRACE message to the
1640 next server until given server is reached. If the <server> parameter
1641 is omitted, it is recommended that TRACE command send a message to
1642 the sender telling which servers the current server has direct
1643 connection to.
1644
1645 If the destination given by "<server>" is an actual server, then the
1646 destination server is required to report all servers and users which
1647 are connected to it, although only operators are permitted to see
1648 users present. If the destination given by <server> is a nickname,
1649 they only a reply for that nickname is given.
1650
1651 Numeric Replies:
1652
1653 ERR_NOSUCHSERVER
1654
1655 If the TRACE message is destined for another server, all intermediate
1656 servers must return a RPL_TRACELINK reply to indicate that the TRACE
1657 passed through it and where its going next.
1658
1659 RPL_TRACELINK
1660 A TRACE reply may be composed of any number of the following numeric
1661 replies.
1662
1663 RPL_TRACECONNECTING RPL_TRACEHANDSHAKE
1664 RPL_TRACEUNKNOWN RPL_TRACEOPERATOR
1665 RPL_TRACEUSER RPL_TRACESERVER
1666 RPL_TRACESERVICE RPL_TRACENEWTYPE
1667 RPL_TRACECLASS
1668
1669 Examples:
1670
1671 TRACE *.oulu.fi ; TRACE to a server matching *.oulu.fi
1672
1673
1674
1675
1676 Oikarinen & Reed [Page 30]
1677
1678 RFC 1459 Internet Relay Chat Protocol May 1993
1679
1680
1681 :WiZ TRACE AngelDust ; TRACE issued by WiZ to nick AngelDust
1682
1683 4.3.7 Admin command
1684
1685 Command: ADMIN
1686 Parameters: [<server>]
1687
1688 The admin message is used to find the name of the administrator of
1689 the given server, or current server if <server> parameter is omitted.
1690 Each server must have the ability to forward ADMIN messages to other
1691 servers.
1692
1693 Numeric Replies:
1694
1695 ERR_NOSUCHSERVER
1696 RPL_ADMINME RPL_ADMINLOC1
1697 RPL_ADMINLOC2 RPL_ADMINEMAIL
1698
1699 Examples:
1700
1701 ADMIN tolsun.oulu.fi ; request an ADMIN reply from
1702 tolsun.oulu.fi
1703
1704 :WiZ ADMIN *.edu ; ADMIN request from WiZ for first
1705 server found to match *.edu.
1706
1707 4.3.8 Info command
1708
1709 Command: INFO
1710 Parameters: [<server>]
1711
1712 The INFO command is required to return information which describes
1713 the server: its version, when it was compiled, the patchlevel, when
1714 it was started, and any other miscellaneous information which may be
1715 considered to be relevant.
1716
1717 Numeric Replies:
1718
1719 ERR_NOSUCHSERVER
1720 RPL_INFO RPL_ENDOFINFO
1721
1722 Examples:
1723
1724 INFO csd.bu.edu ; request an INFO reply from
1725 csd.bu.edu
1726
1727 :Avalon INFO *.fi ; INFO request from Avalon for first
1728 server found to match *.fi.
1729
1730
1731
1732 Oikarinen & Reed [Page 31]
1733
1734 RFC 1459 Internet Relay Chat Protocol May 1993
1735
1736
1737 INFO Angel ; request info from the server that
1738 Angel is connected to.
1739
1740 4.4 Sending messages
1741
1742 The main purpose of the IRC protocol is to provide a base for clients
1743 to communicate with each other. PRIVMSG and NOTICE are the only
1744 messages available which actually perform delivery of a text message
1745 from one client to another - the rest just make it possible and try
1746 to ensure it happens in a reliable and structured manner.
1747
1748 4.4.1 Private messages
1749
1750 Command: PRIVMSG
1751 Parameters: <receiver>{,<receiver>} <text to be sent>
1752
1753 PRIVMSG is used to send private messages between users. <receiver>
1754 is the nickname of the receiver of the message. <receiver> can also
1755 be a list of names or channels separated with commas.
1756
1757 The <receiver> parameter may also me a host mask (#mask) or server
1758 mask ($mask). In both cases the server will only send the PRIVMSG
1759 to those who have a server or host matching the mask. The mask must
1760 have at least 1 (one) "." in it and no wildcards following the
1761 last ".". This requirement exists to prevent people sending messages
1762 to "#*" or "$*", which would broadcast to all users; from
1763 experience, this is abused more than used responsibly and properly.
1764 Wildcards are the '*' and '?' characters. This extension to
1765 the PRIVMSG command is only available to Operators.
1766
1767 Numeric Replies:
1768
1769 ERR_NORECIPIENT ERR_NOTEXTTOSEND
1770 ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL
1771 ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS
1772 ERR_NOSUCHNICK
1773 RPL_AWAY
1774
1775 Examples:
1776
1777 :Angel PRIVMSG Wiz :Hello are you receiving this message ?
1778 ; Message from Angel to Wiz.
1779
1780 PRIVMSG Angel :yes I'm receiving it !receiving it !'u>(768u+1n) .br ;
1781 Message to Angel.
1782
1783 PRIVMSG jto@tolsun.oulu.fi :Hello !
1784 ; Message to a client on server
1785
1786
1787
1788 Oikarinen & Reed [Page 32]
1789
1790 RFC 1459 Internet Relay Chat Protocol May 1993
1791
1792
1793 tolsun.oulu.fi with username of "jto".
1794
1795 PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting.
1796 ; Message to everyone on a server which
1797 has a name matching *.fi.
1798
1799 PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions
1800 ; Message to all users who come from a
1801 host which has a name matching *.edu.
1802
1803 4.4.2 Notice
1804
1805 Command: NOTICE
1806 Parameters: <nickname> <text>
1807
1808 The NOTICE message is used similarly to PRIVMSG. The difference
1809 between NOTICE and PRIVMSG is that automatic replies must never be
1810 sent in response to a NOTICE message. This rule applies to servers
1811 too - they must not send any error reply back to the client on
1812 receipt of a notice. The object of this rule is to avoid loops
1813 between a client automatically sending something in response to
1814 something it received. This is typically used by automatons (clients
1815 with either an AI or other interactive program controlling their
1816 actions) which are always seen to be replying lest they end up in a
1817 loop with another automaton.
1818
1819 See PRIVMSG for more details on replies and examples.
1820
1821 4.5 User based queries
1822
1823 User queries are a group of commands which are primarily concerned
1824 with finding details on a particular user or group users. When using
1825 wildcards with any of these commands, if they match, they will only
1826 return information on users who are 'visible' to you. The visibility
1827 of a user is determined as a combination of the user's mode and the
1828 common set of channels you are both on.
1829
1830 4.5.1 Who query
1831
1832 Command: WHO
1833 Parameters: [<name> [<o>]]
1834
1835 The WHO message is used by a client to generate a query which returns
1836 a list of information which 'matches' the <name> parameter given by
1837 the client. In the absence of the <name> parameter, all visible
1838 (users who aren't invisible (user mode +i) and who don't have a
1839 common channel with the requesting client) are listed. The same
1840 result can be achieved by using a <name> of "0" or any wildcard which
1841
1842
1843
1844 Oikarinen & Reed [Page 33]
1845
1846 RFC 1459 Internet Relay Chat Protocol May 1993
1847
1848
1849 will end up matching every entry possible.
1850
1851 The <name> passed to WHO is matched against users' host, server, real
1852 name and nickname if the channel <name> cannot be found.
1853
1854 If the "o" parameter is passed only operators are returned according
1855 to the name mask supplied.
1856
1857 Numeric Replies:
1858
1859 ERR_NOSUCHSERVER
1860 RPL_WHOREPLY RPL_ENDOFWHO
1861
1862 Examples:
1863
1864 WHO *.fi ; List all users who match against
1865 "*.fi".
1866
1867 WHO jto* o ; List all users with a match against
1868 "jto*" if they are an operator.
1869
1870 4.5.2 Whois query
1871
1872 Command: WHOIS
1873 Parameters: [<server>] <nickmask>[,<nickmask>[,...]]
1874
1875 This message is used to query information about particular user. The
1876 server will answer this message with several numeric messages
1877 indicating different statuses of each user which matches the nickmask
1878 (if you are entitled to see them). If no wildcard is present in the
1879 <nickmask>, any information about that nick which you are allowed to
1880 see is presented. A comma (',') separated list of nicknames may be
1881 given.
1882
1883 The latter version sends the query to a specific server. It is
1884 useful if you want to know how long the user in question has been
1885 idle as only local server (ie. the server the user is directly
1886 connected to) knows that information, while everything else is
1887 globally known.
1888
1889 Numeric Replies:
1890
1891 ERR_NOSUCHSERVER ERR_NONICKNAMEGIVEN
1892 RPL_WHOISUSER RPL_WHOISCHANNELS
1893 RPL_WHOISCHANNELS RPL_WHOISSERVER
1894 RPL_AWAY RPL_WHOISOPERATOR
1895 RPL_WHOISIDLE ERR_NOSUCHNICK
1896 RPL_ENDOFWHOIS
1897
1898
1899
1900 Oikarinen & Reed [Page 34]
1901
1902 RFC 1459 Internet Relay Chat Protocol May 1993
1903
1904
1905 Examples:
1906
1907 WHOIS wiz ; return available user information
1908 about nick WiZ
1909
1910 WHOIS eff.org trillian ; ask server eff.org for user
1911 information about trillian
1912
1913 4.5.3 Whowas
1914
1915 Command: WHOWAS
1916 Parameters: <nickname> [<count> [<server>]]
1917
1918 Whowas asks for information about a nickname which no longer exists.
1919 This may either be due to a nickname change or the user leaving IRC.
1920 In response to this query, the server searches through its nickname
1921 history, looking for any nicks which are lexically the same (no wild
1922 card matching here). The history is searched backward, returning the
1923 most recent entry first. If there are multiple entries, up to
1924 <count> replies will be returned (or all of them if no <count>
1925 parameter is given). If a non-positive number is passed as being
1926 <count>, then a full search is done.
1927
1928 Numeric Replies:
1929
1930 ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK
1931 RPL_WHOWASUSER RPL_WHOISSERVER
1932 RPL_ENDOFWHOWAS
1933
1934 Examples:
1935
1936 WHOWAS Wiz ; return all information in the nick
1937 history about nick "WiZ";
1938
1939 WHOWAS Mermaid 9 ; return at most, the 9 most recent
1940 entries in the nick history for
1941 "Mermaid";
1942
1943 WHOWAS Trillian 1 *.edu ; return the most recent history for
1944 "Trillian" from the first server found
1945 to match "*.edu".
1946
1947 4.6 Miscellaneous messages
1948
1949 Messages in this category do not fit into any of the above categories
1950 but are nonetheless still a part of and required by the protocol.
1951
1952
1953
1954
1955
1956 Oikarinen & Reed [Page 35]
1957
1958 RFC 1459 Internet Relay Chat Protocol May 1993
1959
1960
1961 4.6.1 Kill message
1962
1963 Command: KILL
1964 Parameters: <nickname> <comment>
1965
1966 The KILL message is used to cause a client-server connection to be
1967 closed by the server which has the actual connection. KILL is used
1968 by servers when they encounter a duplicate entry in the list of valid
1969 nicknames and is used to remove both entries. It is also available
1970 to operators.
1971
1972 Clients which have automatic reconnect algorithms effectively make
1973 this command useless since the disconnection is only brief. It does
1974 however break the flow of data and can be used to stop large amounts
1975 of being abused, any user may elect to receive KILL messages
1976 generated for others to keep an 'eye' on would be trouble spots.
1977
1978 In an arena where nicknames are required to be globally unique at all
1979 times, KILL messages are sent whenever 'duplicates' are detected
1980 (that is an attempt to register two users with the same nickname) in
1981 the hope that both of them will disappear and only 1 reappear.
1982
1983 The comment given must reflect the actual reason for the KILL. For
1984 server-generated KILLs it usually is made up of details concerning
1985 the origins of the two conflicting nicknames. For users it is left
1986 up to them to provide an adequate reason to satisfy others who see
1987 it. To prevent/discourage fake KILLs from being generated to hide
1988 the identify of the KILLer, the comment also shows a 'kill-path'
1989 which is updated by each server it passes through, each prepending
1990 its name to the path.
1991
1992 Numeric Replies:
1993
1994 ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS
1995 ERR_NOSUCHNICK ERR_CANTKILLSERVER
1996
1997
1998 KILL David (csd.bu.edu <- tolsun.oulu.fi)
1999 ; Nickname collision between csd.bu.edu
2000 and tolson.oulu.fi
2001
2002
2003 NOTE:
2004 It is recommended that only Operators be allowed to kill other users
2005 with KILL message. In an ideal world not even operators would need
2006 to do this and it would be left to servers to deal with.
2007
2008
2009
2010
2011
2012 Oikarinen & Reed [Page 36]
2013
2014 RFC 1459 Internet Relay Chat Protocol May 1993
2015
2016
2017 4.6.2 Ping message
2018
2019 Command: PING
2020 Parameters: <server1> [<server2>]
2021
2022 The PING message is used to test the presence of an active client at
2023 the other end of the connection. A PING message is sent at regular
2024 intervals if no other activity detected coming from a connection. If
2025 a connection fails to respond to a PING command within a set amount
2026 of time, that connection is closed.
2027
2028 Any client which receives a PING message must respond to <server1>
2029 (server which sent the PING message out) as quickly as possible with
2030 an appropriate PONG message to indicate it is still there and alive.
2031 Servers should not respond to PING commands but rely on PINGs from
2032 the other end of the connection to indicate the connection is alive.
2033 If the <server2> parameter is specified, the PING message gets
2034 forwarded there.
2035
2036 Numeric Replies:
2037
2038 ERR_NOORIGIN ERR_NOSUCHSERVER
2039
2040 Examples:
2041
2042 PING tolsun.oulu.fi ; server sending a PING message to
2043 another server to indicate it is still
2044 alive.
2045
2046 PING WiZ ; PING message being sent to nick WiZ
2047
2048 4.6.3 Pong message
2049
2050 Command: PONG
2051 Parameters: <daemon> [<daemon2>]
2052
2053 PONG message is a reply to ping message. If parameter <daemon2> is
2054 given this message must be forwarded to given daemon. The <daemon>
2055 parameter is the name of the daemon who has responded to PING message
2056 and generated this message.
2057
2058 Numeric Replies:
2059
2060 ERR_NOORIGIN ERR_NOSUCHSERVER
2061
2062 Examples:
2063
2064 PONG csd.bu.edu tolsun.oulu.fi ; PONG message from csd.bu.edu to
2065
2066
2067
2068 Oikarinen & Reed [Page 37]
2069
2070 RFC 1459 Internet Relay Chat Protocol May 1993
2071
2072
2073 tolsun.oulu.fi
2074
2075 4.6.4 Error
2076
2077 Command: ERROR
2078 Parameters: <error message>
2079
2080 The ERROR command is for use by servers when reporting a serious or
2081 fatal error to its operators. It may also be sent from one server to
2082 another but must not be accepted from any normal unknown clients.
2083
2084 An ERROR message is for use for reporting errors which occur with a
2085 server-to-server link only. An ERROR message is sent to the server
2086 at the other end (which sends it to all of its connected operators)
2087 and to all operators currently connected. It is not to be passed
2088 onto any other servers by a server if it is received from a server.
2089
2090 When a server sends a received ERROR message to its operators, the
2091 message should be encapsulated inside a NOTICE message, indicating
2092 that the client was not responsible for the error.
2093
2094 Numerics:
2095
2096 None.
2097
2098 Examples:
2099
2100 ERROR :Server *.fi already exists; ERROR message to the other server
2101 which caused this error.
2102
2103 NOTICE WiZ :ERROR from csd.bu.edu -- Server *.fi already exists
2104 ; Same ERROR message as above but sent
2105 to user WiZ on the other server.
2106
2107 5. OPTIONALS
2108
2109 This section describes OPTIONAL messages. They are not required in a
2110 working server implementation of the protocol described herein. In
2111 the absence of the option, an error reply message must be generated
2112 or an unknown command error. If the message is destined for another
2113 server to answer then it must be passed on (elementary parsing
2114 required) The allocated numerics for this are listed with the
2115 messages below.
2116
2117 5.1 Away
2118
2119 Command: AWAY
2120 Parameters: [message]
2121
2122
2123
2124 Oikarinen & Reed [Page 38]
2125
2126 RFC 1459 Internet Relay Chat Protocol May 1993
2127
2128
2129 With the AWAY message, clients can set an automatic reply string for
2130 any PRIVMSG commands directed at them (not to a channel they are on).
2131 The automatic reply is sent by the server to client sending the
2132 PRIVMSG command. The only replying server is the one to which the
2133 sending client is connected to.
2134
2135 The AWAY message is used either with one parameter (to set an AWAY
2136 message) or with no parameters (to remove the AWAY message).
2137
2138 Numeric Replies:
2139
2140 RPL_UNAWAY RPL_NOWAWAY
2141
2142 Examples:
2143
2144 AWAY :Gone to lunch. Back in 5 ; set away message to "Gone to lunch.
2145 Back in 5".
2146
2147 :WiZ AWAY ; unmark WiZ as being away.
2148
2149
2150 5.2 Rehash message
2151
2152 Command: REHASH
2153 Parameters: None
2154
2155 The rehash message can be used by the operator to force the server to
2156 re-read and process its configuration file.
2157
2158 Numeric Replies:
2159
2160 RPL_REHASHING ERR_NOPRIVILEGES
2161
2162 Examples:
2163
2164 REHASH ; message from client with operator
2165 status to server asking it to reread its
2166 configuration file.
2167
2168 5.3 Restart message
2169
2170 Command: RESTART
2171 Parameters: None
2172
2173 The restart message can only be used by an operator to force a server
2174 restart itself. This message is optional since it may be viewed as a
2175 risk to allow arbitrary people to connect to a server as an operator
2176 and execute this command, causing (at least) a disruption to service.
2177
2178
2179
2180 Oikarinen & Reed [Page 39]
2181
2182 RFC 1459 Internet Relay Chat Protocol May 1993
2183
2184
2185 The RESTART command must always be fully processed by the server to
2186 which the sending client is connected and not be passed onto other
2187 connected servers.
2188
2189 Numeric Replies:
2190
2191 ERR_NOPRIVILEGES
2192
2193 Examples:
2194
2195 RESTART ; no parameters required.
2196
2197 5.4 Summon message
2198
2199 Command: SUMMON
2200 Parameters: <user> [<server>]
2201
2202 The SUMMON command can be used to give users who are on a host
2203 running an IRC server a message asking them to please join IRC. This
2204 message is only sent if the target server (a) has SUMMON enabled, (b)
2205 the user is logged in and (c) the server process can write to the
2206 user's tty (or similar).
2207
2208 If no <server> parameter is given it tries to summon <user> from the
2209 server the client is connected to is assumed as the target.
2210
2211 If summon is not enabled in a server, it must return the
2212 ERR_SUMMONDISABLED numeric and pass the summon message onwards.
2213
2214 Numeric Replies:
2215
2216 ERR_NORECIPIENT ERR_FILEERROR
2217 ERR_NOLOGIN ERR_NOSUCHSERVER
2218 RPL_SUMMONING
2219
2220 Examples:
2221
2222 SUMMON jto ; summon user jto on the server's host
2223
2224 SUMMON jto tolsun.oulu.fi ; summon user jto on the host which a
2225 server named "tolsun.oulu.fi" is
2226 running.
2227
2228
2229 5.5 Users
2230
2231 Command: USERS
2232 Parameters: [<server>]
2233
2234
2235
2236 Oikarinen & Reed [Page 40]
2237
2238 RFC 1459 Internet Relay Chat Protocol May 1993
2239
2240
2241 The USERS command returns a list of users logged into the server in a
2242 similar format to who(1), rusers(1) and finger(1). Some people
2243 may disable this command on their server for security related
2244 reasons. If disabled, the correct numeric must be returned to
2245 indicate this.
2246
2247 Numeric Replies:
2248
2249 ERR_NOSUCHSERVER ERR_FILEERROR
2250 RPL_USERSSTART RPL_USERS
2251 RPL_NOUSERS RPL_ENDOFUSERS
2252 ERR_USERSDISABLED
2253
2254 Disabled Reply:
2255
2256 ERR_USERSDISABLED
2257
2258 Examples:
2259
2260 USERS eff.org ; request a list of users logged in on
2261 server eff.org
2262
2263 :John USERS tolsun.oulu.fi ; request from John for a list of users
2264 logged in on server tolsun.oulu.fi
2265
2266 5.6 Operwall message
2267
2268 Command: WALLOPS
2269 Parameters: Text to be sent to all operators currently online
2270
2271 Sends a message to all operators currently online. After
2272 implementing WALLOPS as a user command it was found that it was
2273 often and commonly abused as a means of sending a message to a lot
2274 of people (much similar to WALL). Due to this it is recommended
2275 that the current implementation of WALLOPS be used as an
2276 example by allowing and recognising only servers as the senders of
2277 WALLOPS.
2278
2279 Numeric Replies:
2280
2281 ERR_NEEDMOREPARAMS
2282
2283 Examples:
2284
2285 :csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua; WALLOPS
2286 message from csd.bu.edu announcing a
2287 CONNECT message it received and acted
2288 upon from Joshua.
2289
2290
2291
2292 Oikarinen & Reed [Page 41]
2293
2294 RFC 1459 Internet Relay Chat Protocol May 1993
2295
2296
2297 5.7 Userhost message
2298
2299 Command: USERHOST
2300 Parameters: <nickname>{<space><nickname>}
2301
2302 The USERHOST command takes a list of up to 5 nicknames, each
2303 separated by a space character and returns a list of information
2304 about each nickname that it found. The returned list has each reply
2305 separated by a space.
2306
2307 Numeric Replies:
2308
2309 RPL_USERHOST ERR_NEEDMOREPARAMS
2310
2311 Examples:
2312
2313 USERHOST Wiz Michael Marty p ;USERHOST request for information on
2314 nicks "Wiz", "Michael", "Marty" and "p"
2315
2316 5.8 Ison message
2317
2318 Command: ISON
2319 Parameters: <nickname>{<space><nickname>}
2320
2321 The ISON command was implemented to provide a quick and efficient
2322 means to get a response about whether a given nickname was currently
2323 on IRC. ISON only takes one (1) parameter: a space-separated list of
2324 nicks. For each nickname in the list that is present, the server
2325 adds that to its reply string. Thus the reply string may return
2326 empty (none of the given nicks are present), an exact copy of the
2327 parameter string (all of them present) or as any other subset of the
2328 set of nicks given in the parameter. The only limit on the number
2329 of nicks that may be checked is that the combined length must not be
2330 too large as to cause the server to chop it off so it fits in 512
2331 characters.
2332
2333 ISON is only be processed by the server local to the client sending
2334 the command and thus not passed onto other servers for further
2335 processing.
2336
2337 Numeric Replies:
2338
2339 RPL_ISON ERR_NEEDMOREPARAMS
2340
2341 Examples:
2342
2343 ISON phone trillian WiZ jarlek Avalon Angel Monstah
2344 ; Sample ISON request for 7 nicks.
2345
2346
2347
2348 Oikarinen & Reed [Page 42]
2349
2350 RFC 1459 Internet Relay Chat Protocol May 1993
2351
2352
2353 6. REPLIES
2354
2355 The following is a list of numeric replies which are generated in
2356 response to the commands given above. Each numeric is given with its
2357 number, name and reply string.
2358
2359 6.1 Error Replies.
2360
2361 401 ERR_NOSUCHNICK
2362 "<nickname> :No such nick/channel"
2363
2364 - Used to indicate the nickname parameter supplied to a
2365 command is currently unused.
2366
2367 402 ERR_NOSUCHSERVER
2368 "<server name> :No such server"
2369
2370 - Used to indicate the server name given currently
2371 doesn't exist.
2372
2373 403 ERR_NOSUCHCHANNEL
2374 "<channel name> :No such channel"
2375
2376 - Used to indicate the given channel name is invalid.
2377
2378 404 ERR_CANNOTSENDTOCHAN
2379 "<channel name> :Cannot send to channel"
2380
2381 - Sent to a user who is either (a) not on a channel
2382 which is mode +n or (b) not a chanop (or mode +v) on
2383 a channel which has mode +m set and is trying to send
2384 a PRIVMSG message to that channel.
2385
2386 405 ERR_TOOMANYCHANNELS
2387 "<channel name> :You have joined too many \
2388 channels"
2389 - Sent to a user when they have joined the maximum
2390 number of allowed channels and they try to join
2391 another channel.
2392
2393 406 ERR_WASNOSUCHNICK
2394 "<nickname> :There was no such nickname"
2395
2396 - Returned by WHOWAS to indicate there is no history
2397 information for that nickname.
2398
2399 407 ERR_TOOMANYTARGETS
2400 "<target> :Duplicate recipients. No message \
2401
2402
2403
2404 Oikarinen & Reed [Page 43]
2405
2406 RFC 1459 Internet Relay Chat Protocol May 1993
2407
2408
2409 delivered"
2410
2411 - Returned to a client which is attempting to send a
2412 PRIVMSG/NOTICE using the user@host destination format
2413 and for a user@host which has several occurrences.
2414
2415 409 ERR_NOORIGIN
2416 ":No origin specified"
2417
2418 - PING or PONG message missing the originator parameter
2419 which is required since these commands must work
2420 without valid prefixes.
2421
2422 411 ERR_NORECIPIENT
2423 ":No recipient given (<command>)"
2424 412 ERR_NOTEXTTOSEND
2425 ":No text to send"
2426 413 ERR_NOTOPLEVEL
2427 "<mask> :No toplevel domain specified"
2428 414 ERR_WILDTOPLEVEL
2429 "<mask> :Wildcard in toplevel domain"
2430
2431 - 412 - 414 are returned by PRIVMSG to indicate that
2432 the message wasn't delivered for some reason.
2433 ERR_NOTOPLEVEL and ERR_WILDTOPLEVEL are errors that
2434 are returned when an invalid use of
2435 "PRIVMSG $<server>" or "PRIVMSG #<host>" is attempted.
2436
2437 421 ERR_UNKNOWNCOMMAND
2438 "<command> :Unknown command"
2439
2440 - Returned to a registered client to indicate that the
2441 command sent is unknown by the server.
2442
2443 422 ERR_NOMOTD
2444 ":MOTD File is missing"
2445
2446 - Server's MOTD file could not be opened by the server.
2447
2448 423 ERR_NOADMININFO
2449 "<server> :No administrative info available"
2450
2451 - Returned by a server in response to an ADMIN message
2452 when there is an error in finding the appropriate
2453 information.
2454
2455 424 ERR_FILEERROR
2456 ":File error doing <file op> on <file>"
2457
2458
2459
2460 Oikarinen & Reed [Page 44]
2461
2462 RFC 1459 Internet Relay Chat Protocol May 1993
2463
2464
2465 - Generic error message used to report a failed file
2466 operation during the processing of a message.
2467
2468 431 ERR_NONICKNAMEGIVEN
2469 ":No nickname given"
2470
2471 - Returned when a nickname parameter expected for a
2472 command and isn't found.
2473
2474 432 ERR_ERRONEUSNICKNAME
2475 "<nick> :Erroneus nickname"
2476
2477 - Returned after receiving a NICK message which contains
2478 characters which do not fall in the defined set. See
2479 section x.x.x for details on valid nicknames.
2480
2481 433 ERR_NICKNAMEINUSE
2482 "<nick> :Nickname is already in use"
2483
2484 - Returned when a NICK message is processed that results
2485 in an attempt to change to a currently existing
2486 nickname.
2487
2488 436 ERR_NICKCOLLISION
2489 "<nick> :Nickname collision KILL"
2490
2491 - Returned by a server to a client when it detects a
2492 nickname collision (registered of a NICK that
2493 already exists by another server).
2494
2495 441 ERR_USERNOTINCHANNEL
2496 "<nick> <channel> :They aren't on that channel"
2497
2498 - Returned by the server to indicate that the target
2499 user of the command is not on the given channel.
2500
2501 442 ERR_NOTONCHANNEL
2502 "<channel> :You're not on that channel"
2503
2504 - Returned by the server whenever a client tries to
2505 perform a channel effecting command for which the
2506 client isn't a member.
2507
2508 443 ERR_USERONCHANNEL
2509 "<user> <channel> :is already on channel"
2510
2511 - Returned when a client tries to invite a user to a
2512 channel they are already on.
2513
2514
2515
2516 Oikarinen & Reed [Page 45]
2517
2518 RFC 1459 Internet Relay Chat Protocol May 1993
2519
2520
2521 444 ERR_NOLOGIN
2522 "<user> :User not logged in"
2523
2524 - Returned by the summon after a SUMMON command for a
2525 user was unable to be performed since they were not
2526 logged in.
2527
2528 445 ERR_SUMMONDISABLED
2529 ":SUMMON has been disabled"
2530
2531 - Returned as a response to the SUMMON command. Must be
2532 returned by any server which does not implement it.
2533
2534 446 ERR_USERSDISABLED
2535 ":USERS has been disabled"
2536
2537 - Returned as a response to the USERS command. Must be
2538 returned by any server which does not implement it.
2539
2540 451 ERR_NOTREGISTERED
2541 ":You have not registered"
2542
2543 - Returned by the server to indicate that the client
2544 must be registered before the server will allow it
2545 to be parsed in detail.
2546
2547 461 ERR_NEEDMOREPARAMS
2548 "<command> :Not enough parameters"
2549
2550 - Returned by the server by numerous commands to
2551 indicate to the client that it didn't supply enough
2552 parameters.
2553
2554 462 ERR_ALREADYREGISTRED
2555 ":You may not reregister"
2556
2557 - Returned by the server to any link which tries to
2558 change part of the registered details (such as
2559 password or user details from second USER message).
2560
2561
2562 463 ERR_NOPERMFORHOST
2563 ":Your host isn't among the privileged"
2564
2565 - Returned to a client which attempts to register with
2566 a server which does not been setup to allow
2567 connections from the host the attempted connection
2568 is tried.
2569
2570
2571
2572 Oikarinen & Reed [Page 46]
2573
2574 RFC 1459 Internet Relay Chat Protocol May 1993
2575
2576
2577 464 ERR_PASSWDMISMATCH
2578 ":Password incorrect"
2579
2580 - Returned to indicate a failed attempt at registering
2581 a connection for which a password was required and
2582 was either not given or incorrect.
2583
2584 465 ERR_YOUREBANNEDCREEP
2585 ":You are banned from this server"
2586
2587 - Returned after an attempt to connect and register
2588 yourself with a server which has been setup to
2589 explicitly deny connections to you.
2590
2591 467 ERR_KEYSET
2592 "<channel> :Channel key already set"
2593 471 ERR_CHANNELISFULL
2594 "<channel> :Cannot join channel (+l)"
2595 472 ERR_UNKNOWNMODE
2596 "<char> :is unknown mode char to me"
2597 473 ERR_INVITEONLYCHAN
2598 "<channel> :Cannot join channel (+i)"
2599 474 ERR_BANNEDFROMCHAN
2600 "<channel> :Cannot join channel (+b)"
2601 475 ERR_BADCHANNELKEY
2602 "<channel> :Cannot join channel (+k)"
2603 481 ERR_NOPRIVILEGES
2604 ":Permission Denied- You're not an IRC operator"
2605
2606 - Any command requiring operator privileges to operate
2607 must return this error to indicate the attempt was
2608 unsuccessful.
2609
2610 482 ERR_CHANOPRIVSNEEDED
2611 "<channel> :You're not channel operator"
2612
2613 - Any command requiring 'chanop' privileges (such as
2614 MODE messages) must return this error if the client
2615 making the attempt is not a chanop on the specified
2616 channel.
2617
2618 483 ERR_CANTKILLSERVER
2619 ":You cant kill a server!"
2620
2621 - Any attempts to use the KILL command on a server
2622 are to be refused and this error returned directly
2623 to the client.
2624
2625
2626
2627
2628 Oikarinen & Reed [Page 47]
2629
2630 RFC 1459 Internet Relay Chat Protocol May 1993
2631
2632
2633 491 ERR_NOOPERHOST
2634 ":No O-lines for your host"
2635
2636 - If a client sends an OPER message and the server has
2637 not been configured to allow connections from the
2638 client's host as an operator, this error must be
2639 returned.
2640
2641 501 ERR_UMODEUNKNOWNFLAG
2642 ":Unknown MODE flag"
2643
2644 - Returned by the server to indicate that a MODE
2645 message was sent with a nickname parameter and that
2646 the a mode flag sent was not recognized.
2647
2648 502 ERR_USERSDONTMATCH
2649 ":Cant change mode for other users"
2650
2651 - Error sent to any user trying to view or change the
2652 user mode for a user other than themselves.
2653
2654 6.2 Command responses.
2655
2656 300 RPL_NONE
2657 Dummy reply number. Not used.
2658
2659 302 RPL_USERHOST
2660 ":[<reply>{<space><reply>}]"
2661
2662 - Reply format used by USERHOST to list replies to
2663 the query list. The reply string is composed as
2664 follows:
2665
2666 <reply> ::= <nick>['*'] '=' <'+'|'-'><hostname>
2667
2668 The '*' indicates whether the client has registered
2669 as an Operator. The '-' or '+' characters represent
2670 whether the client has set an AWAY message or not
2671 respectively.
2672
2673 303 RPL_ISON
2674 ":[<nick> {<space><nick>}]"
2675
2676 - Reply format used by ISON to list replies to the
2677 query list.
2678
2679 301 RPL_AWAY
2680 "<nick> :<away message>"
2681
2682
2683
2684 Oikarinen & Reed [Page 48]
2685
2686 RFC 1459 Internet Relay Chat Protocol May 1993
2687
2688
2689 305 RPL_UNAWAY
2690 ":You are no longer marked as being away"
2691 306 RPL_NOWAWAY
2692 ":You have been marked as being away"
2693
2694 - These replies are used with the AWAY command (if
2695 allowed). RPL_AWAY is sent to any client sending a
2696 PRIVMSG to a client which is away. RPL_AWAY is only
2697 sent by the server to which the client is connected.
2698 Replies RPL_UNAWAY and RPL_NOWAWAY are sent when the
2699 client removes and sets an AWAY message.
2700
2701 311 RPL_WHOISUSER
2702 "<nick> <user> <host> * :<real name>"
2703 312 RPL_WHOISSERVER
2704 "<nick> <server> :<server info>"
2705 313 RPL_WHOISOPERATOR
2706 "<nick> :is an IRC operator"
2707 317 RPL_WHOISIDLE
2708 "<nick> <integer> :seconds idle"
2709 318 RPL_ENDOFWHOIS
2710 "<nick> :End of /WHOIS list"
2711 319 RPL_WHOISCHANNELS
2712 "<nick> :{[@|+]<channel><space>}"
2713
2714 - Replies 311 - 313, 317 - 319 are all replies
2715 generated in response to a WHOIS message. Given that
2716 there are enough parameters present, the answering
2717 server must either formulate a reply out of the above
2718 numerics (if the query nick is found) or return an
2719 error reply. The '*' in RPL_WHOISUSER is there as
2720 the literal character and not as a wild card. For
2721 each reply set, only RPL_WHOISCHANNELS may appear
2722 more than once (for long lists of channel names).
2723 The '@' and '+' characters next to the channel name
2724 indicate whether a client is a channel operator or
2725 has been granted permission to speak on a moderated
2726 channel. The RPL_ENDOFWHOIS reply is used to mark
2727 the end of processing a WHOIS message.
2728
2729 314 RPL_WHOWASUSER
2730 "<nick> <user> <host> * :<real name>"
2731 369 RPL_ENDOFWHOWAS
2732 "<nick> :End of WHOWAS"
2733
2734 - When replying to a WHOWAS message, a server must use
2735 the replies RPL_WHOWASUSER, RPL_WHOISSERVER or
2736 ERR_WASNOSUCHNICK for each nickname in the presented
2737
2738
2739
2740 Oikarinen & Reed [Page 49]
2741
2742 RFC 1459 Internet Relay Chat Protocol May 1993
2743
2744
2745 list. At the end of all reply batches, there must
2746 be RPL_ENDOFWHOWAS (even if there was only one reply
2747 and it was an error).
2748
2749 321 RPL_LISTSTART
2750 "Channel :Users Name"
2751 322 RPL_LIST
2752 "<channel> <# visible> :<topic>"
2753 323 RPL_LISTEND
2754 ":End of /LIST"
2755
2756 - Replies RPL_LISTSTART, RPL_LIST, RPL_LISTEND mark
2757 the start, actual replies with data and end of the
2758 server's response to a LIST command. If there are
2759 no channels available to return, only the start
2760 and end reply must be sent.
2761
2762 324 RPL_CHANNELMODEIS
2763 "<channel> <mode> <mode params>"
2764
2765 331 RPL_NOTOPIC
2766 "<channel> :No topic is set"
2767 332 RPL_TOPIC
2768 "<channel> :<topic>"
2769
2770 - When sending a TOPIC message to determine the
2771 channel topic, one of two replies is sent. If
2772 the topic is set, RPL_TOPIC is sent back else
2773 RPL_NOTOPIC.
2774
2775 341 RPL_INVITING
2776 "<channel> <nick>"
2777
2778 - Returned by the server to indicate that the
2779 attempted INVITE message was successful and is
2780 being passed onto the end client.
2781
2782 342 RPL_SUMMONING
2783 "<user> :Summoning user to IRC"
2784
2785 - Returned by a server answering a SUMMON message to
2786 indicate that it is summoning that user.
2787
2788 351 RPL_VERSION
2789 "<version>.<debuglevel> <server> :<comments>"
2790
2791 - Reply by the server showing its version details.
2792 The <version> is the version of the software being
2793
2794
2795
2796 Oikarinen & Reed [Page 50]
2797
2798 RFC 1459 Internet Relay Chat Protocol May 1993
2799
2800
2801 used (including any patchlevel revisions) and the
2802 <debuglevel> is used to indicate if the server is
2803 running in "debug mode".
2804
2805 The "comments" field may contain any comments about
2806 the version or further version details.
2807
2808 352 RPL_WHOREPLY
2809 "<channel> <user> <host> <server> <nick> \
2810 <H|G>[*][@|+] :<hopcount> <real name>"
2811 315 RPL_ENDOFWHO
2812 "<name> :End of /WHO list"
2813
2814 - The RPL_WHOREPLY and RPL_ENDOFWHO pair are used
2815 to answer a WHO message. The RPL_WHOREPLY is only
2816 sent if there is an appropriate match to the WHO
2817 query. If there is a list of parameters supplied
2818 with a WHO message, a RPL_ENDOFWHO must be sent
2819 after processing each list item with <name> being
2820 the item.
2821
2822 353 RPL_NAMREPLY
2823 "<channel> :[[@|+]<nick> [[@|+]<nick> [...]]]"
2824 366 RPL_ENDOFNAMES
2825 "<channel> :End of /NAMES list"
2826
2827 - To reply to a NAMES message, a reply pair consisting
2828 of RPL_NAMREPLY and RPL_ENDOFNAMES is sent by the
2829 server back to the client. If there is no channel
2830 found as in the query, then only RPL_ENDOFNAMES is
2831 returned. The exception to this is when a NAMES
2832 message is sent with no parameters and all visible
2833 channels and contents are sent back in a series of
2834 RPL_NAMEREPLY messages with a RPL_ENDOFNAMES to mark
2835 the end.
2836
2837 364 RPL_LINKS
2838 "<mask> <server> :<hopcount> <server info>"
2839 365 RPL_ENDOFLINKS
2840 "<mask> :End of /LINKS list"
2841
2842 - In replying to the LINKS message, a server must send
2843 replies back using the RPL_LINKS numeric and mark the
2844 end of the list using an RPL_ENDOFLINKS reply.
2845
2846 367 RPL_BANLIST
2847 "<channel> <banid>"
2848 368 RPL_ENDOFBANLIST
2849
2850
2851
2852 Oikarinen & Reed [Page 51]
2853
2854 RFC 1459 Internet Relay Chat Protocol May 1993
2855
2856
2857 "<channel> :End of channel ban list"
2858
2859 - When listing the active 'bans' for a given channel,
2860 a server is required to send the list back using the
2861 RPL_BANLIST and RPL_ENDOFBANLIST messages. A separate
2862 RPL_BANLIST is sent for each active banid. After the
2863 banids have been listed (or if none present) a
2864 RPL_ENDOFBANLIST must be sent.
2865
2866 371 RPL_INFO
2867 ":<string>"
2868 374 RPL_ENDOFINFO
2869 ":End of /INFO list"
2870
2871 - A server responding to an INFO message is required to
2872 send all its 'info' in a series of RPL_INFO messages
2873 with a RPL_ENDOFINFO reply to indicate the end of the
2874 replies.
2875
2876 375 RPL_MOTDSTART
2877 ":- <server> Message of the day - "
2878 372 RPL_MOTD
2879 ":- <text>"
2880 376 RPL_ENDOFMOTD
2881 ":End of /MOTD command"
2882
2883 - When responding to the MOTD message and the MOTD file
2884 is found, the file is displayed line by line, with
2885 each line no longer than 80 characters, using
2886 RPL_MOTD format replies. These should be surrounded
2887 by a RPL_MOTDSTART (before the RPL_MOTDs) and an
2888 RPL_ENDOFMOTD (after).
2889
2890 381 RPL_YOUREOPER
2891 ":You are now an IRC operator"
2892
2893 - RPL_YOUREOPER is sent back to a client which has
2894 just successfully issued an OPER message and gained
2895 operator status.
2896
2897 382 RPL_REHASHING
2898 "<config file> :Rehashing"
2899
2900 - If the REHASH option is used and an operator sends
2901 a REHASH message, an RPL_REHASHING is sent back to
2902 the operator.
2903
2904 391 RPL_TIME
2905
2906
2907
2908 Oikarinen & Reed [Page 52]
2909
2910 RFC 1459 Internet Relay Chat Protocol May 1993
2911
2912
2913 "<server> :<string showing server's local time>"
2914
2915 - When replying to the TIME message, a server must send
2916 the reply using the RPL_TIME format above. The string
2917 showing the time need only contain the correct day and
2918 time there. There is no further requirement for the
2919 time string.
2920
2921 392 RPL_USERSSTART
2922 ":UserID Terminal Host"
2923 393 RPL_USERS
2924 ":%-8s %-9s %-8s"
2925 394 RPL_ENDOFUSERS
2926 ":End of users"
2927 395 RPL_NOUSERS
2928 ":Nobody logged in"
2929
2930 - If the USERS message is handled by a server, the
2931 replies RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS and
2932 RPL_NOUSERS are used. RPL_USERSSTART must be sent
2933 first, following by either a sequence of RPL_USERS
2934 or a single RPL_NOUSER. Following this is
2935 RPL_ENDOFUSERS.
2936
2937 200 RPL_TRACELINK
2938 "Link <version & debug level> <destination> \
2939 <next server>"
2940 201 RPL_TRACECONNECTING
2941 "Try. <class> <server>"
2942 202 RPL_TRACEHANDSHAKE
2943 "H.S. <class> <server>"
2944 203 RPL_TRACEUNKNOWN
2945 "???? <class> [<client IP address in dot form>]"
2946 204 RPL_TRACEOPERATOR
2947 "Oper <class> <nick>"
2948 205 RPL_TRACEUSER
2949 "User <class> <nick>"
2950 206 RPL_TRACESERVER
2951 "Serv <class> <int>S <int>C <server> \
2952 <nick!user|*!*>@<host|server>"
2953 208 RPL_TRACENEWTYPE
2954 "<newtype> 0 <client name>"
2955 261 RPL_TRACELOG
2956 "File <logfile> <debug level>"
2957
2958 - The RPL_TRACE* are all returned by the server in
2959 response to the TRACE message. How many are
2960 returned is dependent on the the TRACE message and
2961
2962
2963
2964 Oikarinen & Reed [Page 53]
2965
2966 RFC 1459 Internet Relay Chat Protocol May 1993
2967
2968
2969 whether it was sent by an operator or not. There
2970 is no predefined order for which occurs first.
2971 Replies RPL_TRACEUNKNOWN, RPL_TRACECONNECTING and
2972 RPL_TRACEHANDSHAKE are all used for connections
2973 which have not been fully established and are either
2974 unknown, still attempting to connect or in the
2975 process of completing the 'server handshake'.
2976 RPL_TRACELINK is sent by any server which handles
2977 a TRACE message and has to pass it on to another
2978 server. The list of RPL_TRACELINKs sent in
2979 response to a TRACE command traversing the IRC
2980 network should reflect the actual connectivity of
2981 the servers themselves along that path.
2982 RPL_TRACENEWTYPE is to be used for any connection
2983 which does not fit in the other categories but is
2984 being displayed anyway.
2985
2986 211 RPL_STATSLINKINFO
2987 "<linkname> <sendq> <sent messages> \
2988 <sent bytes> <received messages> \
2989 <received bytes> <time open>"
2990 212 RPL_STATSCOMMANDS
2991 "<command> <count>"
2992 213 RPL_STATSCLINE
2993 "C <host> * <name> <port> <class>"
2994 214 RPL_STATSNLINE
2995 "N <host> * <name> <port> <class>"
2996 215 RPL_STATSILINE
2997 "I <host> * <host> <port> <class>"
2998 216 RPL_STATSKLINE
2999 "K <host> * <username> <port> <class>"
3000 218 RPL_STATSYLINE
3001 "Y <class> <ping frequency> <connect \
3002 frequency> <max sendq>"
3003 219 RPL_ENDOFSTATS
3004 "<stats letter> :End of /STATS report"
3005 241 RPL_STATSLLINE
3006 "L <hostmask> * <servername> <maxdepth>"
3007 242 RPL_STATSUPTIME
3008 ":Server Up %d days %d:%02d:%02d"
3009 243 RPL_STATSOLINE
3010 "O <hostmask> * <name>"
3011 244 RPL_STATSHLINE
3012 "H <hostmask> * <servername>"
3013
3014 221 RPL_UMODEIS
3015 "<user mode string>"
3016
3017
3018
3019
3020 Oikarinen & Reed [Page 54]
3021
3022 RFC 1459 Internet Relay Chat Protocol May 1993
3023
3024
3025 - To answer a query about a client's own mode,
3026 RPL_UMODEIS is sent back.
3027
3028 251 RPL_LUSERCLIENT
3029 ":There are <integer> users and <integer> \
3030 invisible on <integer> servers"
3031 252 RPL_LUSEROP
3032 "<integer> :operator(s) online"
3033 253 RPL_LUSERUNKNOWN
3034 "<integer> :unknown connection(s)"
3035 254 RPL_LUSERCHANNELS
3036 "<integer> :channels formed"
3037 255 RPL_LUSERME
3038 ":I have <integer> clients and <integer> \
3039 servers"
3040
3041 - In processing an LUSERS message, the server
3042 sends a set of replies from RPL_LUSERCLIENT,
3043 RPL_LUSEROP, RPL_USERUNKNOWN,
3044 RPL_LUSERCHANNELS and RPL_LUSERME. When
3045 replying, a server must send back
3046 RPL_LUSERCLIENT and RPL_LUSERME. The other
3047 replies are only sent back if a non-zero count
3048 is found for them.
3049
3050 256 RPL_ADMINME
3051 "<server> :Administrative info"
3052 257 RPL_ADMINLOC1
3053 ":<admin info>"
3054 258 RPL_ADMINLOC2
3055 ":<admin info>"
3056 259 RPL_ADMINEMAIL
3057 ":<admin info>"
3058
3059 - When replying to an ADMIN message, a server
3060 is expected to use replies RLP_ADMINME
3061 through to RPL_ADMINEMAIL and provide a text
3062 message with each. For RPL_ADMINLOC1 a
3063 description of what city, state and country
3064 the server is in is expected, followed by
3065 details of the university and department
3066 (RPL_ADMINLOC2) and finally the administrative
3067 contact for the server (an email address here
3068 is required) in RPL_ADMINEMAIL.
3069
3070
3071
3072
3073
3074
3075
3076 Oikarinen & Reed [Page 55]
3077
3078 RFC 1459 Internet Relay Chat Protocol May 1993
3079
3080
3081 6.3 Reserved numerics.
3082
3083 These numerics are not described above since they fall into one of
3084 the following categories:
3085
3086 1. no longer in use;
3087
3088 2. reserved for future planned use;
3089
3090 3. in current use but are part of a non-generic 'feature' of
3091 the current IRC server.
3092
3093 209 RPL_TRACECLASS 217 RPL_STATSQLINE
3094 231 RPL_SERVICEINFO 232 RPL_ENDOFSERVICES
3095 233 RPL_SERVICE 234 RPL_SERVLIST
3096 235 RPL_SERVLISTEND
3097 316 RPL_WHOISCHANOP 361 RPL_KILLDONE
3098 362 RPL_CLOSING 363 RPL_CLOSEEND
3099 373 RPL_INFOSTART 384 RPL_MYPORTIS
3100 466 ERR_YOUWILLBEBANNED 476 ERR_BADCHANMASK
3101 492 ERR_NOSERVICEHOST
3102
3103 7. Client and server authentication
3104
3105 Clients and servers are both subject to the same level of
3106 authentication. For both, an IP number to hostname lookup (and
3107 reverse check on this) is performed for all connections made to the
3108 server. Both connections are then subject to a password check (if
3109 there is a password set for that connection). These checks are
3110 possible on all connections although the password check is only
3111 commonly used with servers.
3112
3113 An additional check that is becoming of more and more common is that
3114 of the username responsible for making the connection. Finding the
3115 username of the other end of the connection typically involves
3116 connecting to an authentication server such as IDENT as described in
3117 RFC 1413.
3118
3119 Given that without passwords it is not easy to reliably determine who
3120 is on the other end of a network connection, use of passwords is
3121 strongly recommended on inter-server connections in addition to any
3122 other measures such as using an ident server.
3123
3124 8. Current implementations
3125
3126 The only current implementation of this protocol is the IRC server,
3127 version 2.8. Earlier versions may implement some or all of the
3128 commands described by this document with NOTICE messages replacing
3129
3130
3131
3132 Oikarinen & Reed [Page 56]
3133
3134 RFC 1459 Internet Relay Chat Protocol May 1993
3135
3136
3137 many of the numeric replies. Unfortunately, due to backward
3138 compatibility requirements, the implementation of some parts of this
3139 document varies with what is laid out. On notable difference is:
3140
3141 * recognition that any LF or CR anywhere in a message marks the
3142 end of that message (instead of requiring CR-LF);
3143
3144 The rest of this section deals with issues that are mostly of
3145 importance to those who wish to implement a server but some parts
3146 also apply directly to clients as well.
3147
3148 8.1 Network protocol: TCP - why it is best used here.
3149
3150 IRC has been implemented on top of TCP since TCP supplies a reliable
3151 network protocol which is well suited to this scale of conferencing.
3152 The use of multicast IP is an alternative, but it is not widely
3153 available or supported at the present time.
3154
3155 8.1.1 Support of Unix sockets
3156
3157 Given that Unix domain sockets allow listen/connect operations, the
3158 current implementation can be configured to listen and accept both
3159 client and server connections on a Unix domain socket. These are
3160 recognized as sockets where the hostname starts with a '/'.
3161
3162 When providing any information about the connections on a Unix domain
3163 socket, the server is required to supplant the actual hostname in
3164 place of the pathname unless the actual socket name is being asked
3165 for.
3166
3167 8.2 Command Parsing
3168
3169 To provide useful 'non-buffered' network IO for clients and servers,
3170 each connection is given its own private 'input buffer' in which the
3171 results of the most recent read and parsing are kept. A buffer size
3172 of 512 bytes is used so as to hold 1 full message, although, this
3173 will usually hold several commands. The private buffer is parsed
3174 after every read operation for valid messages. When dealing with
3175 multiple messages from one client in the buffer, care should be taken
3176 in case one happens to cause the client to be 'removed'.
3177
3178 8.3 Message delivery
3179
3180 It is common to find network links saturated or hosts to which you
3181 are sending data unable to send data. Although Unix typically
3182 handles this through the TCP window and internal buffers, the server
3183 often has large amounts of data to send (especially when a new
3184 server-server link forms) and the small buffers provided in the
3185
3186
3187
3188 Oikarinen & Reed [Page 57]
3189
3190 RFC 1459 Internet Relay Chat Protocol May 1993
3191
3192
3193 kernel are not enough for the outgoing queue. To alleviate this
3194 problem, a "send queue" is used as a FIFO queue for data to be sent.
3195 A typical "send queue" may grow to 200 Kbytes on a large IRC network
3196 with a slow network connection when a new server connects.
3197
3198 When polling its connections, a server will first read and parse all
3199 incoming data, queuing any data to be sent out. When all available
3200 input is processed, the queued data is sent. This reduces the number
3201 of write() system calls and helps TCP make bigger packets.
3202
3203 8.4 Connection 'Liveness'
3204
3205 To detect when a connection has died or become unresponsive, the
3206 server must ping each of its connections that it doesn't get a
3207 response from in a given amount of time.
3208
3209 If a connection doesn't respond in time, its connection is closed
3210 using the appropriate procedures. A connection is also dropped if
3211 its sendq grows beyond the maximum allowed, because it is better to
3212 close a slow connection than have a server process block.
3213
3214 8.5 Establishing a server to client connection
3215
3216 Upon connecting to an IRC server, a client is sent the MOTD (if
3217 present) as well as the current user/server count (as per the LUSER
3218 command). The server is also required to give an unambiguous message
3219 to the client which states its name and version as well as any other
3220 introductory messages which may be deemed appropriate.
3221
3222 After dealing with this, the server must then send out the new user's
3223 nickname and other information as supplied by itself (USER command)
3224 and as the server could discover (from DNS/authentication servers).
3225 The server must send this information out with NICK first followed by
3226 USER.
3227
3228 8.6 Establishing a server-server connection.
3229
3230 The process of establishing of a server-to-server connection is
3231 fraught with danger since there are many possible areas where
3232 problems can occur - the least of which are race conditions.
3233
3234 After a server has received a connection following by a PASS/SERVER
3235 pair which were recognised as being valid, the server should then
3236 reply with its own PASS/SERVER information for that connection as
3237 well as all of the other state information it knows about as
3238 described below.
3239
3240 When the initiating server receives a PASS/SERVER pair, it too then
3241
3242
3243
3244 Oikarinen & Reed [Page 58]
3245
3246 RFC 1459 Internet Relay Chat Protocol May 1993
3247
3248
3249 checks that the server responding is authenticated properly before
3250 accepting the connection to be that server.
3251
3252 8.6.1 Server exchange of state information when connecting
3253
3254 The order of state information being exchanged between servers is
3255 essential. The required order is as follows:
3256
3257 * all known other servers;
3258
3259 * all known user information;
3260
3261 * all known channel information.
3262
3263 Information regarding servers is sent via extra SERVER messages, user
3264 information with NICK/USER/MODE/JOIN messages and channels with MODE
3265 messages.
3266
3267 NOTE: channel topics are *NOT* exchanged here because the TOPIC
3268 command overwrites any old topic information, so at best, the two
3269 sides of the connection would exchange topics.
3270
3271 By passing the state information about servers first, any collisions
3272 with servers that already exist occur before nickname collisions due
3273 to a second server introducing a particular nickname. Due to the IRC
3274 network only being able to exist as an acyclic graph, it may be
3275 possible that the network has already reconnected in another
3276 location, the place where the collision occurs indicating where the
3277 net needs to split.
3278
3279 8.7 Terminating server-client connections
3280
3281 When a client connection closes, a QUIT message is generated on
3282 behalf of the client by the server to which the client connected. No
3283 other message is to be generated or used.
3284
3285 8.8 Terminating server-server connections
3286
3287 If a server-server connection is closed, either via a remotely
3288 generated SQUIT or 'natural' causes, the rest of the connected IRC
3289 network must have its information updated with by the server which
3290 detected the closure. The server then sends a list of SQUITs (one
3291 for each server behind that connection) and a list of QUITs (again,
3292 one for each client behind that connection).
3293
3294
3295
3296
3297
3298
3299
3300 Oikarinen & Reed [Page 59]
3301
3302 RFC 1459 Internet Relay Chat Protocol May 1993
3303
3304
3305 8.9 Tracking nickname changes
3306
3307 All IRC servers are required to keep a history of recent nickname
3308 changes. This is required to allow the server to have a chance of
3309 keeping in touch of things when nick-change race conditions occur
3310 with commands which manipulate them. Commands which must trace nick
3311 changes are:
3312
3313 * KILL (the nick being killed)
3314
3315 * MODE (+/- o,v)
3316
3317 * KICK (the nick being kicked)
3318
3319 No other commands are to have nick changes checked for.
3320
3321 In the above cases, the server is required to first check for the
3322 existence of the nickname, then check its history to see who that
3323 nick currently belongs to (if anyone!). This reduces the chances of
3324 race conditions but they can still occur with the server ending up
3325 affecting the wrong client. When performing a change trace for an
3326 above command it is recommended that a time range be given and
3327 entries which are too old ignored.
3328
3329 For a reasonable history, a server should be able to keep previous
3330 nickname for every client it knows about if they all decided to
3331 change. This size is limited by other factors (such as memory, etc).
3332
3333 8.10 Flood control of clients
3334
3335 With a large network of interconnected IRC servers, it is quite easy
3336 for any single client attached to the network to supply a continuous
3337 stream of messages that result in not only flooding the network, but
3338 also degrading the level of service provided to others. Rather than
3339 require every 'victim' to be provide their own protection, flood
3340 protection was written into the server and is applied to all clients
3341 except services. The current algorithm is as follows:
3342
3343 * check to see if client's `message timer' is less than
3344 current time (set to be equal if it is);
3345
3346 * read any data present from the client;
3347
3348 * while the timer is less than ten seconds ahead of the current
3349 time, parse any present messages and penalize the client by
3350 2 seconds for each message;
3351
3352 which in essence means that the client may send 1 message every 2
3353
3354
3355
3356 Oikarinen & Reed [Page 60]
3357
3358 RFC 1459 Internet Relay Chat Protocol May 1993
3359
3360
3361 seconds without being adversely affected.
3362
3363 8.11 Non-blocking lookups
3364
3365 In a real-time environment, it is essential that a server process do
3366 as little waiting as possible so that all the clients are serviced
3367 fairly. Obviously this requires non-blocking IO on all network
3368 read/write operations. For normal server connections, this was not
3369 difficult, but there are other support operations that may cause the
3370 server to block (such as disk reads). Where possible, such activity
3371 should be performed with a short timeout.
3372
3373 8.11.1 Hostname (DNS) lookups
3374
3375 Using the standard resolver libraries from Berkeley and others has
3376 meant large delays in some cases where replies have timed out. To
3377 avoid this, a separate set of DNS routines were written which were
3378 setup for non-blocking IO operations and then polled from within the
3379 main server IO loop.
3380
3381 8.11.2 Username (Ident) lookups
3382
3383 Although there are numerous ident libraries for use and inclusion
3384 into other programs, these caused problems since they operated in a
3385 synchronous manner and resulted in frequent delays. Again the
3386 solution was to write a set of routines which would cooperate with
3387 the rest of the server and work using non-blocking IO.
3388
3389 8.12 Configuration File
3390
3391 To provide a flexible way of setting up and running the server, it is
3392 recommended that a configuration file be used which contains
3393 instructions to the server on the following:
3394
3395 * which hosts to accept client connections from;
3396
3397 * which hosts to allow to connect as servers;
3398
3399 * which hosts to connect to (both actively and
3400 passively);
3401
3402 * information about where the server is (university,
3403 city/state, company are examples of this);
3404
3405 * who is responsible for the server and an email address
3406 at which they can be contacted;
3407
3408 * hostnames and passwords for clients which wish to be given
3409
3410
3411
3412 Oikarinen & Reed [Page 61]
3413
3414 RFC 1459 Internet Relay Chat Protocol May 1993
3415
3416
3417 access to restricted operator commands.
3418
3419 In specifying hostnames, both domain names and use of the 'dot'
3420 notation (127.0.0.1) should both be accepted. It must be possible to
3421 specify the password to be used/accepted for all outgoing and
3422 incoming connections (although the only outgoing connections are
3423 those to other servers).
3424
3425 The above list is the minimum requirement for any server which wishes
3426 to make a connection with another server. Other items which may be
3427 of use are:
3428
3429 * specifying which servers other server may introduce;
3430
3431 * how deep a server branch is allowed to become;
3432
3433 * hours during which clients may connect.
3434
3435 8.12.1 Allowing clients to connect
3436
3437 A server should use some sort of 'access control list' (either in the
3438 configuration file or elsewhere) that is read at startup and used to
3439 decide what hosts clients may use to connect to it.
3440
3441 Both 'deny' and 'allow' should be implemented to provide the required
3442 flexibility for host access control.
3443
3444 8.12.2 Operators
3445
3446 The granting of operator privileges to a disruptive person can have
3447 dire consequences for the well-being of the IRC net in general due to
3448 the powers given to them. Thus, the acquisition of such powers
3449 should not be very easy. The current setup requires two 'passwords'
3450 to be used although one of them is usually easy guessed. Storage of
3451 oper passwords in configuration files is preferable to hard coding
3452 them in and should be stored in a crypted format (ie using crypt(3)
3453 from Unix) to prevent easy theft.
3454
3455 8.12.3 Allowing servers to connect
3456
3457 The interconnection of server is not a trivial matter: a bad
3458 connection can have a large impact on the usefulness of IRC. Thus,
3459 each server should have a list of servers to which it may connect and
3460 which servers may connect to it. Under no circumstances should a
3461 server allow an arbitrary host to connect as a server. In addition
3462 to which servers may and may not connect, the configuration file
3463 should also store the password and other characteristics of that
3464 link.
3465
3466
3467
3468 Oikarinen & Reed [Page 62]
3469
3470 RFC 1459 Internet Relay Chat Protocol May 1993
3471
3472
3473 8.12.4 Administrivia
3474
3475 To provide accurate and valid replies to the ADMIN command (see
3476 section 4.3.7), the server should find the relevant details in the
3477 configuration.
3478
3479 8.13 Channel membership
3480
3481 The current server allows any registered local user to join upto 10
3482 different channels. There is no limit imposed on non-local users so
3483 that the server remains (reasonably) consistant with all others on a
3484 channel membership basis
3485
3486 9. Current problems
3487
3488 There are a number of recognized problems with this protocol, all of
3489 which hope to be solved sometime in the near future during its
3490 rewrite. Currently, work is underway to find working solutions to
3491 these problems.
3492
3493 9.1 Scalability
3494
3495 It is widely recognized that this protocol does not scale
3496 sufficiently well when used in a large arena. The main problem comes
3497 from the requirement that all servers know about all other servers
3498 and users and that information regarding them be updated as soon as
3499 it changes. It is also desirable to keep the number of servers low
3500 so that the path length between any two points is kept minimal and
3501 the spanning tree as strongly branched as possible.
3502
3503 9.2 Labels
3504
3505 The current IRC protocol has 3 types of labels: the nickname, the
3506 channel name and the server name. Each of the three types has its
3507 own domain and no duplicates are allowed inside that domain.
3508 Currently, it is possible for users to pick the label for any of the
3509 three, resulting in collisions. It is widely recognized that this
3510 needs reworking, with a plan for unique names for channels and nicks
3511 that don't collide being desirable as well as a solution allowing a
3512 cyclic tree.
3513
3514 9.2.1 Nicknames
3515
3516 The idea of the nickname on IRC is very convenient for users to use
3517 when talking to each other outside of a channel, but there is only a
3518 finite nickname space and being what they are, its not uncommon for
3519 several people to want to use the same nick. If a nickname is chosen
3520 by two people using this protocol, either one will not succeed or
3521
3522
3523
3524 Oikarinen & Reed [Page 63]
3525
3526 RFC 1459 Internet Relay Chat Protocol May 1993
3527
3528
3529 both will removed by use of KILL (4.6.1).
3530
3531 9.2.2 Channels
3532
3533 The current channel layout requires that all servers know about all
3534 channels, their inhabitants and properties. Besides not scaling
3535 well, the issue of privacy is also a concern. A collision of
3536 channels is treated as an inclusive event (both people who create the
3537 new channel are considered to be members of it) rather than an
3538 exclusive one such as used to solve nickname collisions.
3539
3540 9.2.3 Servers
3541
3542 Although the number of servers is usually small relative to the
3543 number of users and channels, they two currently required to be known
3544 globally, either each one separately or hidden behind a mask.
3545
3546 9.3 Algorithms
3547
3548 In some places within the server code, it has not been possible to
3549 avoid N^2 algorithms such as checking the channel list of a set
3550 of clients.
3551
3552 In current server versions, there are no database consistency checks,
3553 each server assumes that a neighbouring server is correct. This
3554 opens the door to large problems if a connecting server is buggy or
3555 otherwise tries to introduce contradictions to the existing net.
3556
3557 Currently, because of the lack of unique internal and global labels,
3558 there are a multitude of race conditions that exist. These race
3559 conditions generally arise from the problem of it taking time for
3560 messages to traverse and effect the IRC network. Even by changing to
3561 unique labels, there are problems with channel-related commands being
3562 disrupted.
3563
3564 10. Current support and availability
3565
3566 Mailing lists for IRC related discussion:
3567 Future protocol: ircd-three-request@eff.org
3568 General discussion: operlist-request@eff.org
3569
3570 Software implemenations
3571 cs.bu.edu:/irc
3572 nic.funet.fi:/pub/irc
3573 coombs.anu.edu.au:/pub/irc
3574
3575 Newsgroup: alt.irc
3576
3577
3578
3579
3580 Oikarinen & Reed [Page 64]
3581
3582 RFC 1459 Internet Relay Chat Protocol May 1993
3583
3584
3585 Security Considerations
3586
3587 Security issues are discussed in sections 4.1, 4.1.1, 4.1.3, 5.5, and
3588 7.
3589
3590 12. Authors' Addresses
3591
3592 Jarkko Oikarinen
3593 Tuirantie 17 as 9
3594 90500 OULU
3595 FINLAND
3596
3597 Email: jto@tolsun.oulu.fi
3598
3599
3600 Darren Reed
3601 4 Pateman Street
3602 Watsonia, Victoria 3087
3603 Australia
3604
3605 Email: avalon@coombs.anu.edu.au
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636 Oikarinen & Reed [Page 65]
3637