Difference between revisions of "Classic Protocol Extension"
m (Formatting fixes) |
|||
Line 2: | Line 2: | ||
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. | 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 | + | When the server sees that padding byte is <code>0x42</code>, 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 | + | 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 | + | 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=== | ===ExtInfo=== |
Revision as of 16:06, 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 |