Packets/Login/Vanilla

From wowdev
Revision as of 18:53, 21 May 2021 by Deadbeef (talk | contribs) (→‎Proof packets: Add link to client)
Jump to navigation Jump to search

It's worth noting that, for build Vanilla (1.1.2.4125), the client automatically disconnects after a successful login challenge and proof exchange and sends a reconnect packet right away instead of asking for the realm list.

Opcodes and Errors

See Login Packets. The opcode value corresponds to the packet name.

Error codes
Name Value Client Message
SUCCESS 0x00
FAIL_UNKNOWN0 0x01 "Unable to Connect"
FAIL_UNKNOWN1 0x02 "Unable to Connect"
FAIL_BANNED 0x03 "The World of Warcraft account has been closed and is no longer available for use.
Please go to http://www.wow-europe.com/en/misc/banned.html for further information.
FAIL_UNKNOWN_ACCOUNT 0x04 "The information you have entered is not valid.
Please check the spelling of the account name and password.
If you need help in retrieving a lost or stolen password and account,
see http://www.wow-europe.com for more information."
FAIL_INCORRECT_PASSWORD 0x05 "The information you have entered is not valid.
Please check the spelling of the account name and password.
If you need help in retrieving a lost or stolen password and account,
see http://www.wow-europe.com for more information."
FAIL_ALREADY_ONLINE 0x06 "This account is already logged into World of Warcraft.
Please check the spelling and try again."
FAIL_NO_TIME 0x07 "You have used up your prepaid time for this account.
Please purchase more to continue playing."
FAIL_DB_BUSY 0x08 "Could not log in to World of Warcraft at this time.
Please try again later."
FAIL_VERSION_INVALID 0x09 "Unable to validate game version.
This may be caused by file corruption or the interference of another program.
Please visit http://www.wow-europe.com/en/support/ for more information and possible solutions to this issue."
LOGIN_DOWNLOAD_FILE 0x0A "Downloading"
FAIL_INVALID_SERVER 0x0B "Unable to Connect"
FAIL_SUSPENDED 0x0C "The World of Warcraft account has been temporarily suspended.
Please go to http://www.wow-europe.com/en/misc/banned.html for further information.
FAIL_NO_ACCESS 0x0D "Unable to Connect"
SUCCESS_SURVEY 0x0E "Success!"
Pressing cancel either shows a cached realmlist or "Retrieving realm list".
FAIL_PARENTALCONTROL 0x0F "Access to this account has been blocked by parental controls.
Your settings may be changed in your account preferences at http://www.worldofwarcraft.com."
FAIL_LOCKED_ENFORCED 0x10 Does not appear to be valid on 1.12.1.

Challenge packets

Client

See CMD_AUTH_LOGON_CHALLENGE_Client.

Server

See CMD_AUTH_LOGON_CHALLENGE_Server.

Proof packets

Client

See CMD_AUTH_LOGON_PROOF_Client.

Server

AuthLogonProof_Server
Offset Size Type Name Description
Header
0x0 1 / - uint8 command LOGIN_PROOF (0x1)
0x1 1 / - uint8 error The fields below are only included if this is LOGIN_OK (0x0).
Body
0x2 20 / Little uint8[20] m2 SRP6 Server proof.
0x16 4 / Little uint32 hardware_survey_id ID of a hardware survey that the client should perform.
Set to 0 to not use. Can safely be set to 0.

Reconnection challenge packets

Client

The reconnect client packet has the same format as CMD_AUTH_LOGON_CHALLENGE_Client except that the opcode field is 0x2 instead of 0x0.

Server

See CMD_AUTH_RECONNECT_CHALLENGE_Server.

Reconnection proof packets

Client

See CMD_AUTH_RECONNECT_PROOF_Client.

To check if the client proof is correct, the server must calculate SHA1(account_name | proof_data | challenge_data | session_key) and compare it to client_proof.

Server

See CMD_AUTH_RECONNECT_PROOF_Server.

Realm list packets

Client

RealmList_Client
Offset Size / Endianness Type Name Description
0x0 1 / - uint8 cmd REALMLIST (0x10)
0x1 4 / - uint32 unknown Hardcoded to 0 in the client. Can be expected to always be 0.

Server

The server answers with a packet composed of a RealmHeader_Server, as many RealmInfo_Server as specified and a RealmFooter_Server.

Header

RealmHeader_Server
Offset Size / Endianness Type Name Description
0x0 1 / - uint8 command REALMLIST (0x10)
0x1 2 / Little uint16 size Size of the rest of packet, without the command and size fields (3 bytes).
0x3 4 / - uint32 unknown Not used in public clients. Set to 0.
0x7 1 / - uint8 num_realms Number of RealmInfo_Server.

The size value can be computed with the part of the header taken into account plus the footer (5+2 bytes) and the size of every RealmInfo_Server which is variable.

Body

RealmInfo_Server
Offset Size / Endianness Type Name Description
0x0 4 / Little uint32 realm_type 0 is normal, 1 is PvP, 6 is RP and 8 is RPPvP.
0x4 1 / - uint8 flags See RealmInfo_Server.flags table below.
0x5 - / Big char[] realm_name Zero terminated string; name of the Realm
- / Big char[] address_port Zero terminated string; address of the Realm ("ip:port")
4 / Little float population Population value.
200 is always green "Recommended",
400 is always red "Full",
600 is always blue "Recommended".
Low/Medium/High are calculated based on the population values sent.
1 / - uint8 num_chars The number of characters the client has on the server.
1 / - uint8 realm_category The language or region of the server.
How this is interpreted depends on the locale of the client.
It is shown as tabs at the bottom of the realmlist screen.
If there are only realms of one category no tabs are shown.
See table RealmInfo_Server.realm_category Values.
1 / - uint8 realm_id Used for the initial sorting of the realms. Identical values are not a problem.
RealmInfo_Server.flags Values
Value Name Description
0x00 NONE No changes.
0x01 INVALID Color realm name in read.
0x02 OFFLINE Gray out name and prevent selection.
0x04 SPECIFY_BUILD Unused. Possibly used to list realm build numbers previously.
0x08 UNK1 Unused.
0x10 UNK2 Unused.
0x20 FORCE_RECOMMENDED Forces the client to show the server as "Recommended" in blue text,
no matter what the population value is.
0x40 FORCE_NEW_PLAYERS Forces the client to show the server as "Recommended" in green text,
no matter what the population value is.
0x80 FORCE_FULL Forces the client to show the population as "Full" in red text,
no matter what the population value is.
RealmInfo_Server.realm_category Values
Value Name Description
0x00 DEFAULT Same as the first value for a locale.
US
0x01 UNITED_STATES United States.
0x05 OCEANIC Oceania.
EUROPE
0x01 ENGLISH English.
0x02 GERMAN German.
0x03 FRENCH French.
0x05 SPANISH Spanish.
KOREA
0x01 KOREA Korea.
TAIWAN
0x01 TAIWAN Taiwan.
CHINA
0x01 CHINA China.
0x02 CN3 Unknown.
0x03 CN7 Unknown.
TEST
0x01 TEST_SERVER Test.
0x05 OCEANIC_TEST Oceanic test.
QA
0x01 QA_SERVER QA server.

Footer

RealmFooter_Server
Offset Size / Endianness Type Name Description
0x0 2 / ? uint16 unknown Ignored in public clients. Set to 0.