ngircd-tor/doc/Protocol.txt

119 lines
4.6 KiB
Plaintext
Raw Normal View History

ngIRCd - Next Generation IRC Server
(c)2001-2003 by Alexander Barton,
alex@barton.de, http://www.barton.de/
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- Protocol.txt --
2003-04-21 14:48:40 +02:00
I. Compatibility
~~~~~~~~~~~~~~~~
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-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.
2003-04-21 14:48:40 +02:00
If you don't like this behavior please ./configure the ngIRCd using the
"--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".
2003-04-21 14:48:40 +02:00
II. The IRC+ Protocol
~~~~~~~~~~~~~~~~~~~~~
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.
The "PASS" command is used to detect the protocol and peer versions see
RFC 2813 (section 4.1.1) and below.
2003-04-21 14:48:40 +02:00
II.1 Register new server link
2003-04-21 14:48:40 +02:00
Command: PASS
Parameters: <password> <version> <flags> [<options>]
Used by: servers only (with these parameters)
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.
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.).
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.
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
(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>]".
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
- C: The server supports the CHANINFO command.
- L: INVITE- and BAN-lists should be synchronized between servers: if the
peer understands this flag, it will send "MODE +I" and "MODE +b"
commands after the server link has been established.
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.
- 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.
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
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.
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.
2003-04-21 14:48:40 +02:00
If the channel doesn't exists at all it will be created.
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
--
$Id: Protocol.txt,v 1.12 2004/04/25 15:44:10 alex Exp $