World Packet

From wowdev
Revision as of 17:30, 19 July 2021 by Deadbeef (talk | contribs) (Mention default port)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

World Packets are the majority of communication between the client and the world server, in contrast with Login Packets which are used for authentication and realm selection.

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

World packets default to port 8085.

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.