Server protocol:Changes

Below we outline the changes in the server-to-server (S2S) protocol between UnrealIRCd versions.

= UnrealIRCd 4.x to UnrealIRCd 5.0.0 = These are the server protocol changes between UnrealIRCd 4.x and 5.0.0 stable.

Required options
UnrealIRCd 5 now assumes you support the following PROTOCTL options:.

If you fail to use  or   then you will receive an error. For the other options, support is assumed, no warning or error is shown when you lack support.

Fortunately these are options that most, if not all, services already support since UnrealIRCd 4.x so it shouldn't be a problem and shouldn't even need any changes for UnrealIRCd 5.

For more information about why this change was implemented, see FAQ

New optional options

 * indicates that the server is capable of handling message tags and that the server can cope with 4K lines. (Note that the ordinary non-message-tag part is still limited to 512 bytes).

Other changes

 * Pseudo-ID support in SASL was removed. We now use real UID's. This can break services. For example anope had fixes added and requires 2.0.7 on an UnrealIRCd 5 network.

= UnrealIRCd 3.2.x to UnrealIRCd 4.0.0 =

Below are the server protocol changes between UnrealIRCd 3.2.x an UnrealIRCd 4.0.0 stable. Note that these changes were made more than 5 years ago! It is only kept for historic purposes.

All traffic we discuss below is server-to-server traffic. At no point we expose such traffic to regular clients (eg: the use of UID's).

Removed features
The following features were removed in UnrealIRCd 4

SJB64 (Base64 timestamps)
This feature was removed because it only saves a few bytes of bandwidth per line at a cost of complicating the code too much.

ZIP (Zip links)
This feature was removed when the I/O engine was rewritten. It may or may not be re-introduced at a later point.

NS (Server numerics)
Server numerics have been removed but have been replaced by SID's (see next section)

New features
These are new features that you can choose to enable (or not).

SID's
Server id's (SID's) work very similar to the removed server numerics feature and consist of 3 alphanumerical characters which uniquely identify a server (where the first character is always a digit). No base64 encoding involved. You can (theoretically) use a SID anywhere a server name is used, like: :server.name NOTICE #chan :Hello Can become: :001 NOTICE #chan :Hello

SID command
When a server links in you now receive a "SID" rather than a "SERVER" command. Refer to the Server ID page for more information.

UID's
When you enable SID you also get user id's (UID's). UID's consist of alphanumerical characters and  can  (not must!) theoretically be used at any place where you use a nick name. The first 3 characters identify the SID of the server where the user is on (this is part of the UID) and thus a UID will always start with a digit.

The benefit of using UID's is that it really uniquely identifies a user regardless of the current nick name. This allows us to solve some long-standing problems where nick collisions and race conditions cause desynchs such as 'ghosts' in a channel.

Example: :One NOTICE Two :Hi there Can become: :001AAAAAA NOTICE 002AAAAAA :Hi there

As you can see, it doesn't necessarily shorten the length. That isn't the purpose of UID. The benefit of UID is the uniqueness described earlier.

UID command
Instead of "NICK" protocol messages you will receive "UID". See also:
 * User ID
 * UID command

Recommendations
If you want to support SID's and UID's then we suggest:
 * store the SID & UID in your server & client structs
 * make functions like find_person also search this field. UID's and SID's just look like regular names after all, except they start with a digit
 * ensure you handle the SID and UID commands
 * send SID in PROTOCTL to indicate your software supports SID & UID