Skip to content

Instantly share code, notes, and snippets.

@Earnestly
Created September 19, 2013 23:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Earnestly/6631162 to your computer and use it in GitHub Desktop.
Save Earnestly/6631162 to your computer and use it in GitHub Desktop.

IRC protocol extensions

Original IRC protocol

Original protocol (IRCv2): RFC 1459

Later updated by RFC 2810, RFC 2811, RFC 2812, RFC 2813, but few servers follow these completely. IRCnet is probably the most complete implementation.

Client-server protocol:

Server-server protocol:

CTCP and DCC

Client-To-Client Protocol (CTCP) messages are carried over standard PRIVMSGs and NOTICEs. The original specification allows for quoting special characters, sending "extended data" and commands.

However, most clients do not implement the quoting, and only recognize messages consisting entirely of a single "extended data" command.

IRCII introduced the Direct Client Connection (DCC) subprotocol. Often, "DCC" refers specifically to the file transfer part.

User identification

  • SASL (IRCv3 style)
  • SASL (IRCX style)
  • privileged bots – NickServ, Q
  • RFC 1459 server password (PASS command)
  • Ident (OS-level authentication)

Capability negotiation

  • The 005 numeric, aka RPL_ISUPPORT
  • IRCv3 CAP
  • Dancer/Hyperion CAPAB
  • PROTOCTL
  • Microsoft IRCX

ISUPPORT

Implemented by almost all servers. Only advertises extensions; they are assumed to be always enabled, unless declared otherwise. (For example, UHNAMES has to enabled by client.) Many extensions in ISUPPORT deal with core IRC features; for example, supported channel types (e.g. CHANTYPES=#&) or the longest permitted nickname (NICKLEN).

Draft specifications:

Known extensions:

CAP and IRCv3

The IRCv3 Working Group defines a standard set of extensions to IRCv2. The central part of IRCv3 is capability negotiation using CAP, which is implemented by all current servers.

Known extensions:

Features:

  • Server acknowledges successful and failed requests.
  • Can disable extensions (using CAP REQ -foo).
  • Can list extensions during registration (using CAP LS).

Downsides:

  • For sasl, supported SASL mechanisms are not advertised. (This may be fixed soon.)

CAPAB (obsolete; Hybrid, Dancer, Hyperion)

Known extensions:

  • IDENTIFY-MSG – identical to CAP identify-msg
  • IDENTIFY-CTCP (Dancer) – merged into IDENTIFY-MSG by Hyperion

Features:

  • Server acknowledges successful requests.

Downsides:

  • Server does not acknowledge failed requests.
  • Cannot disable extensions once enabled.
  • Extensions are only advertised after registration (in ISUPPORT).

PROTOCTL (deprecated; Dreamforge, UnrealIRCd)

Known extensions:

  • UHNAMES – identical to CAP userhost-in-names
  • NAMESX – identical to CAP multi-prefix

Downsides:

  • Server does not acknowledge requests.
  • Cannot disable extensions once enabled.
  • Extensions are only advertised after registration (in ISUPPORT).

HANDSHAKE (obsolete; never used)

Draft specification.

Known extensions (listed in draft):

Features:

  • Extensions can be enabled during registration.
  • Server acknowledges successful requests.

Downsides:

  • Cannot request extensions after registration.
  • Cannot disable extensions once enabled.
  • Supported extensions are not advertised by the server (the client must request all extensions it wants).

IRCX (obsolete; Microsoft)

An extension of the IRC protocol as a whole, used by Microsoft Chat client as well as Microsoft Exchange Chat server.

Edited draft specification exists; it describes several new commands implemented by IRCX-compatible servers, as well as modes and privilege levels. Adds SASL support using AUTH, predating CAP.

There are plans to add several IRCX features to IRCv3.

Features:

  • Extension must be enabled during registration (using IRCX).
  • All supported extensions are part of the specification.
  • Supported SASL mechanisms are advertised by server during registration.

Other extensions

Color codes:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment