World Packet

From wowdev
Revision as of 19:25, 31 May 2021 by Deadbeef (talk | contribs) (Add more explanatory text)
Jump to navigation Jump to search

World Packets are the majority of communication between the client and the world server.

World packets consist of a packet size, an Opcode and a body.

Headers

All world packet headers are encrypted using the session key negotiated during login, except for SMSG_AUTH_CHALLENGE and CMSG_AUTH_SESSION.

For server messages (SMSG) the headers look like:

SMSG Header
Offset Size / Endianness Type Name Description
0x0 2 / Big uint16 size Size of the packet including the opcode field.
0x2 2 / Little uint16 opcode Opcode for the packet.
Determines the structure of the body.


For client messages (CMSG) the headers look like:

CMSG Header
Offset Size / Endianness Type Name Description
0x0 2 / Big uint16 size Size of the packet including the opcode field.
0x2 4 / Little uint32 opcode Opcode for the packet.
Determines the structure of the body.

Process

World packets begin with the client making a TCP to the world server and then:

  1. The server sends a SMSG_AUTH_CHALLENGE.
  2. The client sends a CMSG_AUTH_SESSION.
  3. The server sends a SMSG_AUTH_RESPONSE.
  4. The client requests a character screen with CMSG_CHAR_ENUM.
  5. The server responds with a list of characters in a SMSG_CHAR_ENUM.
  6. The client is now at the character screen.