Server protocol:PROTOCTL command

The PROTOCTL command is used to enable certain server protocol features. In almost all cases you are expected to send one or more PROTOCTL lines after having sent PASS.

If you are editing an existing program or services, upgrading the protocol, then see also Server protocol changes for a list of changes between 3.2.x - 4.x - 5.x.

= Syntax = Syntax: PROTOCTL option1 option2 option3 ..

= Example = These are the recommended tokens for you to send: PROTOCTL EAUTH=my.server.name SID=999 PROTOCTL NOQUIT NICKv2 SJOIN SJ3 CLK TKLEXT TKLEXT2 NICKIP ESVID MLOCK EXTSWHOIS

= Required options = We mark options as Required if you should really be using the option and/or without it your link may get rejected or experience trouble.

NOQUIT (Required)
When a remote server disconnects and NOQUIT is enabled then you will recieve just the SQUIT command. If you leave out NOQUIT then you will also recieve a QUIT for each user on the server that disconnected (and for users and servers behind it).

Everyone must enable this. In the future we may always require NOQUIT.

EAUTH (Required)
Early Authorization / Extended Authorization. This makes it possible for servers to authenticate each other before the regular SERVER command and at the same time provide additional information.

Needs to be done prior to using the SERVERS token, and possibly other tokens or commands in the future. Hence, is recommended to be sent as the first PROTOCTL token. Also note that the PASS command must be sent prior to this PROTOCTL token. Syntax: EAUTH=my.server.name[,protocolversion[,versionflags,fullversiontext]]

Example: EAUTH=maintest.test.net,5002

SID (Required)
This enables User ID and Server ID support, meaning that you'll get to see unique user- and server ID's for each user. Required since U5, highly recommended since U4.

Note that SID= requires you to do EAUTH *before* it.

NICKv2 (Required)
Notifies the server that it supports the extended NICK command (version 2). You must always enable this.

SJOIN (Required)
Enables the SJOIN command. You must always enable this.

SJ3 (Required)
Enables more verbose syntax/information for the SJOIN command. You must always enable this.

NICKIP (Required)
Enables displaying of the users' IP in the NICK command. You must always enable this.

TKLEXT2 (Required)
Enhances the TKL command to include even more details on spamfilters. You must always enable this.

= Optional options =

CLK (Recommended)
Enables displaying of the users' cloaked host in the NICK command. Highly recommended.

EXTSWHOIS (Recommended)
Extended SWHOIS. This allows setting multiple 'swhois' titles for /WHOIS. It also allows other servers to see what/who set the 'swhois' and to specifiy a 'priority' which is used for the swhois display order in /WHOIS.

MLOCK (Recommended)
If you enable this then your server will receive information about server-side MLOCK's (channel modes being locked from editing).

CHANMODES (Optional)
This communicates the same information as CHANMODES= in the 005 numeric. Useful to see which channel modes are supported/used, and can also be used to properly eat parameters in parameter modes in the MODE command: for example if you receive "+jk 1:1 a" then thanks to CHANMODES= you know which channel mode has parameters and which one does not.

TS (Optional)
Upon linking newer servers send TS=current_unix_timestamp. This way a link can be rejected if the difference between the clock of two servers is too large (since such a difference would lead to serious issues).

Services normally don't send this, but they can.

NICKCHARS (Optional)
This specifies a list of language characters that are allowed in nicks. See the Nick Character Sets feature.

USMARC codes are used, with a suffix if needed. See src/charsys.c for the full list (ctrl+f, static LangList) of possible languages (2nd column). The items in the list sent as NICKCHARS=.. must always be sorted. If a server sends NICKCHARS= and if the remote parameters do not match the charsets in use locally, then the server link is rejected.

Normally Services don't send this, hence optional.

Syntax: NICKCHARS=aaa,bbb,ccc

SJSBY (Optional)
If you enable this you can send and receive SJOIN setby information (TS and nick). This assumes SJ3 is enabled as well.

This affects the SJOIN command. When a server links in and adds +beI items and the user later queries the mode list, they will see modes/bans/invex set by the original user and timestamp instead of being set by some.serv.er.