Difference between revisions of "Classic Protocol Extension"
(Fixed ExtEntry packet ID, made ExtensionVersion into an int) |
|||
Line 1: | Line 1: | ||
==Negotiation== | ==Negotiation== | ||
+ | Extended clients should use magic number of <code>0x42</code> for the padding byte of the [[Classic_Protocol#Client_.E2.86.92_Server_packets|Player Identification packet]]. All standard/non-extended clients pad this packet with <code>0x00</code>, 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 <code>0x42</code>, it should immediately reply with an <b>ExtInfo</b> packet, followed by zero or more <b>ExtEntry</b> packets, and await a response (<code>ExtInfo</code> packet) from the client. | ||
+ | |||
+ | After the client has sent its identification packet, it should await a response. If the server responds with an <b>ExtInfo</b> packet, it should parse it and any <b>ExtEntry</b> 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 <code>ExtInfo</code> packet of its own, followed by the list of mutually-supported extensions. After receiving the last of <b>ExtEntry</b> packets, server should activate the mutually-supported extensions, and resume normal login procedure. | ||
+ | |||
===ExtInfo=== | ===ExtInfo=== | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 18: | Line 26: | ||
| class="col1 centeralign" | short | | class="col1 centeralign" | short | ||
| class="col2 centeralign" | 1 | | class="col2 centeralign" | 1 | ||
− | | class="col3" | | + | | class="col3" | Between 0 and 32767 |
|- class="row8" | |- class="row8" | ||
| class="col0" | Total Size: | | class="col0" | Total Size: |
Revision as of 16:05, 11 October 2012
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 |