CMD AUTH LOGON CHALLENGE Client: Difference between revisions

From wowdev
Jump to navigation Jump to search
(→‎Field: Add maximum allowed values)
m (Add introductory text)
Line 1: Line 1:
Is a [[Login Packet]] initially sent by the client to start the [[Login]] process.
[[CMD_AUTH_LOGON_CHALLENGE]] and [[CMD_AUTH_RECONNECT_CHALLENGE]] have the same client packet.
[[CMD_AUTH_LOGON_CHALLENGE]] and [[CMD_AUTH_RECONNECT_CHALLENGE]] have the same client packet.



Revision as of 15:43, 26 May 2021

Is a Login Packet initially sent by the client to start the Login process.

CMD_AUTH_LOGON_CHALLENGE and CMD_AUTH_RECONNECT_CHALLENGE have the same client packet.

Packet Layout

This packet does not change at all between versions.

CMD_AUTH_LOGON_CHALLENGE Client
Offset Size / Endianness Type Name Description
0x00 1 / - uint8 opcode 0x00 for CMD_AUTH_LOGON_CHALLENGE,
0x02 for CMD_AUTH_RECONNECT_CHALLENGE
0x01 1 / - uint8 protocol_version Exact purpose unknown. See table in #Protocol Versions.
0x02 2 / Little uint16 size Length of package minus the size of the command,
protocol_version and size fields.
See #Field.
0x04 4 / Little uint8[4] game_name Always null terminated 'WoW\0' string.
0x08 3 / - uint8[3] version [0x01, 0x01, 0x02] for 1.1.2. [0x01, 0x0C, 0x01] for 1.12.1.
0x0B 2 / Little uint16 build 4125, aka Revision
0x0D 4 / Big uint8[4] platform eg '\0x86'. Has a leading zero for 'x86'.
0x11 4 / Big uint8[4] os eg '\0Win'. Has a leading zero for 'Win'.
0x15 4 / Big uint8[4] locale eg 'enUS'
0x19 4 / Little uint32 worldregion_bias Offset in minutes from UTC time,
eg. 180 means 180 minutes
0x1D 4 / Big uint32 ip client_ip
0x21 1 / - uint8 account_name_length Length of the account_name field in bytes.
The client can only send 16 characters,
but this can still be more than 16 bytes if non-ASCII characters are used.
0x22 account_name_length / Big uint8[account_name_len] account_name UTF-8 encoded uppercase string of the username.
Not all unicode characters are uppercased correctly.

Size

Entire packet

The only variable field is account_name_length which is limited to 16 UTF-8 characters by the client. ASCII characters take up one byte, and UTF-8 characters are limited to a maximum of 4 bytes per character which means that the theoretical maximum is:

  • 34 + 16 = 50 bytes, for a well behaved client if only ASCII characters are accepted.
  • 34 + (16 * 4) = 98 bytes, for a well behaved client if all UTF-8 characters are accepted.
  • 34 + 255 = 289 bytes, for the absolute theoretical maximum since account_name_length is an unsigned byte limited to 255.

Field

The value of the size field can be calculated as 30 + account_name_length. This field is calculated without the opcode, protocol_version and size fields.

The maximum values of the field are:

  • 16, if only ASCII characters from a well behaving client are allowed.
  • 16 * 4 = 64, if only valid UTF-8 characters from a well behaving client are allowed.
  • 255, since it is the maximum value of an unsigned byte.

Protocol Versions

Below is a table of verified protocol version for specific patches.

RealmFooter_Server
Game Version Connect Protocol Version Reconnect Protocol Version Notes
Vanilla (1.1.2.4125) 2 ?
Vanilla (1.12.1.5875) 3 2
BC (2.4.3.8606) 8 8