]> arthur.barton.de Git - ngircd-alex.git/blobdiff - doc/Protocol.txt
Spelling fix: "nick name" -> "nickname"
[ngircd-alex.git] / doc / Protocol.txt
index 3226fc0833940e93d1aca7f3d4b504ca065b7c3d..c7fd7826b85539d6e6615362b9693897a2e7fa27 100644 (file)
 
                      ngIRCd - Next Generation IRC Server
+                           http://ngircd.barton.de/
 
-                      (c)2001-2003 by Alexander Barton,
-                    alex@barton.de, http://www.barton.de/
-
+               (c)2001-2012 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
 
                               -- Protocol.txt --
 
 
-  +-----------------------------------------------------------------------+
-  | This text is only available in german at the moment, but this should  |
-  | change until the release of ngIRCd 0.7.0, so feel free to contribute! |
-  +-----------------------------------------------------------------------+
+I. Compatibility
+~~~~~~~~~~~~~~~~
+
+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.
+
+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.
+
+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".
+
+
+II. The IRC+ Protocol
+~~~~~~~~~~~~~~~~~~~~~
+
+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.
+
+
+II.1 Register new server link
+
+     Command: PASS
+  Parameters: <password> <version> <flags> [<options>]
+     Used by: servers only (with these parameters)
+
+<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.
+
+<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.).
+
+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+".
+
+<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
+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>]".
+
+<serverversion> is an ASCII representation of the clear-text server version
+number, <serverflags> indicates the supported IRC+ protocol extensions (and
+may be empty!).
+
+The following <serverflags> are defined at the moment:
+
+- 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.
+
+- H: The server supports the "enhanced server handshake", see section II.2
+     for a detailed description.
+
+- o: IRC operators are allowed to change channel- and channel-user-modes
+     even if they aren't channel-operator of the affected channel.
+
+- S: The server supports the SERVICE command (on this link).
+
+- 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.
+
+
+II.2 Enhanced Server Handshake
+
+The "enhanced server handshake" is used when both servers support this IRC+
+extension, which is indicated by the 'H' flag in the <serverflags> sent with
+the PASS command, see section II.1.
+
+It basically means, that after exchanging the PASS and SERVER commands the
+server is not registered in the network (as usual), but that IRC numerics
+are exchanged until the numeric 376 (ENDOFMOTD) is received. Afterwards the
+peer is registered in the network as with the regular IRC protocol.
+
+A server implementing the enhanced server handshake (and indicating this
+using 'H' in the <serverflags>) MUST ignore all unknown numerics to it
+silently.
+
+In addition, such a server should at least send the numeric 005 (ISUPPORT)
+to its peer, containing the following information. Syntax: <key>=<value>,
+one token per IRC parameter. If the server has to send more than 12 token
+it must send separate ISUPPORT numerics (this is a limitation of the IRC
+protocol which allows at max 15 arguments per command).
 
+ - NICKLEN: Maximum nickname length. Default: 9.
+ - CASEMAPPING: Case mapping used for nick- and channel name comparing.
+   Default: "ascii", the chars [a-z] are lowercase of [A-Z].
+ - PREFIX: List of channel modes a person can get and the respective prefix
+   a channel or nickname will get in case the person has it. The order of the
+   modes goes from most powerful to least powerful. Default: "(ov)@+"
+ - CHANTYPES: Supported channel prefixes. Default: "#".
+ - CHANMODES: List of channel modes for 4 types, separated by comma (","):
+   Mode that adds or removes a nick or address to a list, mode that changes
+   a setting (both have always has a parameter), mode that changes a setting
+   and only has a parameter when set, and mode that changes a setting and
+   never has a parameter. For example "bI,k,l,imnPst".
+ - CHANLIMIT: Maximum number of channels allowed to join by channel prefix,
+   for example "#:10".
 
-I. Kompatibilitaet
-~~~~~~~~~~~~~~~~~~
+Please see <http://www.irc.org/tech_docs/005.html> for details.
 
-Der ngIRCd haelt sich an das IRC-Protokoll Version 2.10, wie es in den RFCs
-1459 und 2810-2813 beschrieben ist. Diese (und ggf. weitere fuer den ngIRCd
-relevante) RFCs sind in RFC.txt aufgefuehrt.
+The information exchanged using ISUPPORT can be used to detect configuration
+incompatibilities (different maximum nickname length, for example) and
+therefore to disconnect the peer prior to registering it in the network.
 
-Leider verhaelt sich aber schon der "Originalserver" nicht immer genau so,
-wie es in den RFCs beschrieben ist. Da der ngIRCd aber ein Ersatz fuer
-eben diesen Server sein soll, werden diese Abweichungen in der Regel vom
-ngIRCd emuliert um die Kompatibilitaet zu wahren.
 
-Sollte dieses Verhalten nicht erwuenscht sein, so kann mit der configure-
-Option "--enable-strict-rfc" der ngIRCd so compiliert werden, dass er sich
-strikt an die entsprechenden RFCs haelt.
+II.3 Exchange channel-modes, topics, and persistent channels
 
-ACHTUNG: an einem so compilierten Server koennen sich andere Server und
-Clients, die sich nicht genau an das Protokoll halten, u.U. nicht mehr
-anmelden oder alle Funktionen nutzen! In der Regel ist diese Option daher
-nicht erwuenscht.
+     Command: CHANINFO
+  Parameters: <channel> +<modes> [[<key> <limit>] <topic>]
+     Used by: servers only
 
+CHANINFO is used by servers to inform each other about a channel: its
+modes, channel key, user limits and its topic. The parameter combination
+<key> and <limit> is optional, as well as the <topic> parameter, so that
+there are three possible forms of this command:
 
-II. Das IRC+-Protokoll
-~~~~~~~~~~~~~~~~~~~~~~
+  CHANINFO <channel> +<modes>
+  CHANINFO <channel> +<modes> <topic>
+  CHANINFO <channel> +<modes> <key> <limit> <topic>
 
-Der ngIRCd unterstuetzt als Erweiterung zum IRC-Protokoll wie es in den RFCs
-2810-2813 beschrieben ist, das IRC+-Protokoll. Dieses Protokoll ist dabei
-kompatibel zum IRC-Protokoll und wird nur verwendet, wenn der ngIRCd fest-
-stellt, dass ein connectierter Server ebenfalls dieses erweiterte Protokoll
-unterstuetzt.
+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.
 
-Die Protokoll- und Server-Erkennung wird mit dem "PASS"-Befehl durchgefuehrt
-(vgl. RFC 2813, Sektion 4.1.1):
+If the channel doesn't exists at all it will be created.
 
+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".
 
-II.1 neuen Server-Link registrieren
 
-     Befehl: PASS
-  Parameter: <password> <version> <flags> [<options>]
-       Fuer: mit dieser Syntax nur Server
+II.4 Update webchat/proxy client information
 
-<password> enthaelt das Passwort fur den neu aufzubauenden Server-Link,
-so wie es in der Konfigurationsdatei definiert wurde.
+     Command: WEBIRC
+  Parameters: <password> <username> <hostname> <ip-address>
+     Used by: unregistered clients only
 
-<version> setzt sich aus zwei Teilen zusammen und ist mindestens 4, maximal
-14 Zeichen lang: die ersten vier Bytes enthalten die Versionsnummer des
-unterstuetzten IRC-Protokolls, wobei die ersten zwei Bytes die Major-, die
-letzten beiden die Minor-Revision angeben. Der String "0210" steht also
-fuer Protokollversion 2.10.
-Die folgenden (optionalen!) 10 Bytes enthalten eine von der jeweiligen
-Implementation abhaengige Versionsnummer. Server, die das IRC+-Protokoll
-unterstuetzen, liefern hier "-IRC+".
+The WEBIRC command is used by some Web-to-IRC gateways to set the correct
+user name and host name of users instead of their own. It must be the very
+first command sent to the server, even before USER and NICK commands!
 
-<flags> setzt sich ebenfalls aus zwei Bestandteilen zusammen und ist
-maximal 100 Bytes lang. Getrennt werden die beiden Teile mit dem Zeichen
-"|". Der erste Teil enthaelt den Namen der Implementation, der ngIRCd
-liefert hier z.B. "ngIRCd", der Originalserver "IRC". Anhand dieser "ID"
-kann zwischen Serverimplementationen unterschieden werden. Der zweite Teil
-(nach dem "|") ist implementationsabhaengig und wird nur ausgewertet,
-wenn die Gegenseite das IRC+-Protokoll unterstuetzt. In diesem Fall wird
-folgende Syntax erwartet: "<serverversion>[:<serverflags>]".
+The <password> must be set in the server configuration file to prevent
+unauthorized clients to fake their identity; it is an arbitrary string.
 
-<serverversion> ist hier eine ASCII-Klartext-Darstellung der Versionsnummer,
-<serverflags> zeigt die vom Server unterstuetzten Erweiterungen an (und
-kann die leere Menge sein).
 
-Mit dem optionalen Parameter <options> werden Server-Optionen uebermittelt,
-wie sie in RFC 2813, Sektion 4.1.1 definiert sind.
+II.5 Client character encoding conversion
 
-Folgende <serverflags> sind zur Zeit definiert:
+     Command: CHARCONV
+  Parameters: <client-charset>
+     Used by: registered clients
+     Replies: RPL_IP_CHARCONV_MSG, ERR_IP_CHARCONV_MSG
 
-- o: IRC-Operatoren duerfen auch dann Channel- und Channel-User-Modes
-     aendern, wenn sie kein Channel-Operator im betroffenen Channel sind.
 
-- C: der Server unterstuetzt den CHANINFO-Befehl.     
+III. Numerics used by IRC+ Protocol
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+The IRC+ protocol uses numerics in the range 800-899 which aren't used by
+RFC 2812 and hopefully don't clash with other implementations ...
 
-II.2 Channel-Modes, persistente Channel und Topic austauschen
+Numerics 800-849 are used for status and success messages, and numerics
+850-899 are failure and error messages.
 
-     Befehl: CHANINFO
-  Parameter: <channel> +<modes> <key> <maxusers> [<topic>]
-       Fuer: Server
 
-Mit CHANINFO Informiert ein Server den anderen ueber einen Channel: dessen
-Modes, Channel-Key, User-Limit und dessen Topic. <topic> ist optional.
+III.1 IRC+ status and success numerics
 
-Existiert auf dem Server, der das CHANINFO empfaengt, der Channel bereits,
-so uebernimmt er die Werte jeweils nur dann, wenn er selber noch keine
-Modes bzw. kein Topic definiert hat. Ansonsten wird der jeweilige Parameter
-ignoriert.
+800 - RPL_IP_CHARCONV_MSG
+       %1 :Client encoding set"
 
-Existiert der Channel noch nicht, so wird er mit den entsprechenden Angaben
-erzeugt.
+               %1      client character set
 
-Hat ein Channel keinen Key (in <modes> ist der Mode "k" nicht vorhanden),
-so muss der Parameter <key> ignoriert werden (da <key> vorhanden sein muss,
-sollte in diesem Fall "*" uebergeben werden). Hat er kein User-Limit (kein
-"l" in <modes>), so muss <limit> ignoriert werden (<limit> sollte hierbei
-als "0" uebergeben werden).
 
+III.2 IRC+ failure and error numerics
 
--- 
-$Id: Protocol.txt,v 1.8 2003/03/09 20:04:44 alex Exp $
+850 - ERR_IP_CHARCONV_MSG
+       :Can't initialize client encoding