diff --git a/extensions/extended-isupport.md b/extensions/extended-isupport.md new file mode 100644 index 00000000..488c70ab --- /dev/null +++ b/extensions/extended-isupport.md @@ -0,0 +1,71 @@ +--- +title: "`extended-isupport` Extension" +layout: spec +copyrights: + - + name: "Simon Ser" + period: "2024" + email: "contact@emersion.fr" +--- + +## Notes for implementing work-in-progress version + +This is a work-in-progress specification. + +Software implementing this work-in-progress specification MUST NOT use the +unprefixed `extended-isupport` capability name. Instead, implementations SHOULD +use the `draft/extended-isupportt` capability name to be interoperable with +other software implementing a compatible work-in-progress version. The final +version of the specification will use unprefixed capability names. + +## Introduction + +`RPL_ISUPPORT` is used to advertise metadata about the server as key-value +entries. However, `RPL_ISUPPORT` is only sent by servers after connection +registration. This undermines the usefulness of `RPL_ISUPPORT`: some of the +metadata would be useful to clients prior to connection registration. This +extension adds a mechanism to send `RPL_ISUPPORT` messages before connection +registration, as well as an end of `RPL_ISUPPORT` list indication. + +## Implementation + +### `draft/extended-isupport` capability + +When the `draft/extended-isupport` capability is enabled by the client, the +server MUST send one or more `RPL_ISUPPORT` messages (grouped inside a +`draft/isupport` batch if the `batch` capability is enabled). While +`draft/extended-isupport` is enabled, the server MAY send updates to the +key-value entries via subsequent `RPL_ISUPPORT` messages. + +The server MAY skip the `RPL_ISUPPORT` replies usually sent when connection +registration completes, if it already sent all information. + +Before connection registration, the server MAY send only a subset of the full +`RPL_ISUPPORT` list. In that case, the server MUST send a `RPL_ISUPPORT` list +when connection registration completes with entries previously omitted. + +### `draft/isupport` batch + +The server MUST group all `RPL_ISUPPORT` messages inside a `draft/isupport` +batch when the [`batch`][] and `draft/extended-isupport` capabilities are +enabled. + +The batch MUST only contain one or more `RPL_ISUPPORT` messages. + +## Examples + +Enabling the capability: + + C: CAP LS 302 + S: :irc.example.org CAP * LS :multi-prefix sasl draft/extended-isupport + C: CAP REQ draft/extended-isupport + S: :irc.example.org CAP * ACK draft/extended-isupport + S: :irc.example.org BATCH +asdf draft/isupport + S: @batch=asdf :irc.example.org 005 * NETWORK=Example NICKLEN=30 + S: :irc.example.org BATCH -asdf + +Sending a change: + + S: :irc.example.org BATCH +asdf draft/isupport + S: @batch=asdf :irc.example.org 005 * CHANNELLEN=64 -NETWORK + S: :irc.example.org BATCH -asdf