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