Classic Protocol Extension
Negotiation
Extended clients should use magic number of 0x42
for the padding byte of the Player Identification packet. All standard/non-extended clients pad this packet with 0x00
, so extended servers should be able to easily notice extended clients. All standard/non-extended servers will ignore the modified padding byte, preserving compatibility.
When the server sees that padding byte is 0x42
, it should immediately reply with an ExtInfo packet, followed by zero or more ExtEntry packets, and await a response (ExtInfo packet) from the client.
After the client has sent its identification packet, it should await a response. If the server responds with an ExtInfo packet, it should parse it and any ExtEntry packets that follow. Client should then compare its locally-supported set of extensions with the list of extensions provided by the server, and find an intersection of these sets. These are the mutually-supported extensions.
At this time, client should send ExtInfo packet of its own, followed by the list of mutually-supported extensions. After receiving the last of ExtEntry packets, server should activate the mutually-supported extensions, and resume normal login procedure.
ExtInfo
Packet ID | Field Name | Field Type | Example | Notes |
0x10 | AppName | string | MyServer
|
Client or server software name |
ExtensionCount | short | 1 | Between 0 and 32767 | |
Total Size: | 67 bytes |
ExtEntry
Packet ID | Field Name | Field Type | Example | Notes |
0x11 | ExtName | string | MyExtension
|
Name of a supported extension |
Version | int | 1 | ||
Total Size: | 69 bytes |