2002-09-02 23:04:27 +02:00
|
|
|
|
|
|
|
ngIRCd - Next Generation IRC Server
|
|
|
|
|
2003-03-09 21:04:44 +01:00
|
|
|
(c)2001-2003 by Alexander Barton,
|
2002-09-02 23:04:27 +02:00
|
|
|
alex@barton.de, http://www.barton.de/
|
|
|
|
|
2003-03-09 21:04:44 +01:00
|
|
|
ngIRCd is free software and published under the
|
|
|
|
terms of the GNU General Public License.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
|
|
|
-- Protocol.txt --
|
|
|
|
|
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
I. Compatibility
|
|
|
|
~~~~~~~~~~~~~~~~
|
2003-01-04 14:07:54 +01:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
The ngIRCd implements the Internet Relay Chat (IRC) protocol version 2.10
|
|
|
|
as defined in RFC ("request for comment") 1459 and 2810-2813. These (and
|
|
|
|
probably further relevant RFCs) are listed in doc/RFC.txt.
|
2003-01-04 14:07:54 +01:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
Unfortunately, even the "original" ircd doesn't follow these specifications
|
|
|
|
in all details. But because the ngIRCd should be a fully compatible
|
|
|
|
replacement for this server ("ircd") it tries to emulate these differences.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
If you don't like this behavior please ./configure the ngIRCd using the
|
2003-11-30 21:30:56 +01:00
|
|
|
"--enable-strict-rfc" command line option. But keep in mind: not all IRC
|
|
|
|
clients are compatible with a server configured that way, some can't even
|
|
|
|
connect at all! Therefore this option usually isn't desired for "normal
|
|
|
|
server operation".
|
2002-09-02 23:04:27 +02:00
|
|
|
|
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
II. The IRC+ Protocol
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
Starting with version 0.5.0, the ngIRCd extends the original IRC protocol
|
|
|
|
as defined in RFC 2810-2813. This enhanced protocol is named "IRC+". It is
|
|
|
|
backwards compatible to the "plain" IRC protocol and will only be used by
|
|
|
|
the ngIRCd if it detects that the peer supports it as well.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-11-30 21:30:56 +01:00
|
|
|
The "PASS" command is used to detect the protocol and peer versions see
|
|
|
|
RFC 2813 (section 4.1.1) and below.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
II.1 Register new server link
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
Command: PASS
|
|
|
|
Parameters: <password> <version> <flags> [<options>]
|
|
|
|
Used by: servers only (with these parameters)
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
<password> is the password for this new server link as defined in the server
|
|
|
|
configuration which is sent to the peer or received from it.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
<version> consists of two parts and is at least 4, at most 14 characters
|
|
|
|
long: the first four bytes contain the IRC protocol version number, whereas
|
|
|
|
the first two bytes represent the major version, the last two bytes the
|
|
|
|
minor version (the string "0210" indicates version 2.10, e.g.).
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
The following optional(!) 10 bytes contain an implementation-dependent
|
|
|
|
version number. Servers supporting the IRC+ protocol as defined in this
|
|
|
|
document provide the string "-IRC+" here.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-11-30 21:30:56 +01:00
|
|
|
Example for <version>: "0210-IRC+".
|
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
<flags> consists of two parts separated with the character "|" and is at
|
|
|
|
most 100 bytes long. The first part contains the name of the implementation
|
2003-11-30 21:30:56 +01:00
|
|
|
(ngIRCd sets this to "ngircd", the original ircd to "IRC", e.g.). The second
|
2003-04-21 14:48:40 +02:00
|
|
|
part is implementation-dependent and should only be parsed if the peer
|
|
|
|
supports the IRC+ protocol as well. In this case the following syntax is
|
|
|
|
used: "<serverversion>[:<serverflags>]".
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
<serverversion> is an ASCII representation of the clear-text server version
|
|
|
|
number, <serverflags> indicates the supported IRC+ protocol extensions (and
|
|
|
|
may be empty!).
|
2002-09-03 13:32:58 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
The following <serverflags> are defined at the moment:
|
2002-09-03 13:32:58 +02:00
|
|
|
|
2003-11-30 21:30:56 +01:00
|
|
|
- C: The server supports the CHANINFO command.
|
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
- o: IRC operators are allowed to change channel- and channel-user-modes
|
|
|
|
even if they aren't channel-operator of the affected channel.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-11-30 21:30:56 +01:00
|
|
|
- Z: Compressed server links are supported by the server.
|
|
|
|
|
|
|
|
Example for a complete <flags> string: "ngircd|0.7.5:CZ".
|
|
|
|
|
|
|
|
The optional parameter <options> is used to propagate server options as
|
|
|
|
defined in RFC 2813, section 4.1.1.
|
2002-09-02 23:04:27 +02:00
|
|
|
|
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
II.2 Exchange channel-modes, topics, and persistent channels
|
2002-09-04 02:06:19 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
Command: CHANINFO
|
|
|
|
Parameters: <channel> +<modes> <key> <maxusers> [<topic>]
|
|
|
|
Used by: servers only
|
2002-09-02 23:04:27 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
CHANINFO is used by servers to inform each other about a channel: its
|
|
|
|
modes, channel key, user limits and its topic. <topic> is optional.
|
2002-09-04 02:00:43 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
If the channel already exists on the server receiving the CHANINFO command,
|
|
|
|
it only adopts the <modes> (or the <topic>) if there are no modes (or topic)
|
|
|
|
already set. It there are already values set the server ignores the
|
|
|
|
corresponding parameter.
|
2002-09-04 02:00:43 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
If the channel doesn't exists at all it will be created.
|
2002-09-04 02:00:43 +02:00
|
|
|
|
2003-04-21 14:48:40 +02:00
|
|
|
The parameter <key> must be ignored if a channel has no key (the parameter
|
|
|
|
<modes> doesn't list the "k" channel mode). In this case <key> should
|
|
|
|
contain "*" because the parameter <key> is required by the CHANINFO syntax
|
|
|
|
and therefore can't be omitted. The parameter <limit> must be ignored when
|
|
|
|
a channel has no user limit (the parameter <modes> doesn't list the "l"
|
|
|
|
channel mode). In this case <limit> should be "0".
|
2003-01-15 14:45:59 +01:00
|
|
|
|
2002-09-04 02:00:43 +02:00
|
|
|
|
2002-09-02 23:04:27 +02:00
|
|
|
--
|
2003-11-30 21:30:56 +01:00
|
|
|
$Id: Protocol.txt,v 1.11 2003/11/30 20:30:56 alex Exp $
|