Login Protocol
The Login Protocol for the 342 is very similar in structure to that of the 317 (and other versions I believe). The login is comprised of four stages in which the client and server switch in regards to which one is reading and which one is writing.
Variables:
- "name hash": A hash of the player name, thought to be used to select an appropriate login server. This has no use in current private servers.
- "return code": A code used to identify which stage in login the session is currently in. Return code values:
- 0: Exchange session key to establish encryption.
- 1: Retry the login procedure.
- 2: Login has finished.
- 3: Client displays message - "Invalid username or password".
- 4: Client displays message - "Your account has been disabled".
- 5: Client displays message - "Your account is already logged in".
- 6: Client displays message - "RuneScape has been updated!".
- 7: Client displays message - "This world is full".
- 8: Client displays message - "Unable to connect, loginserver offline".
- 9: Client displays message - "Login limit exceeded".
- 10: Client displays message - "Unable to connect, bad session ID".
- 11: Client displays message - "Loginserver rejected session".
- 12: Client displays message - "You need a members account to sign into this world".
- 13: Client displays message - "Could not complete login".
- 14: Client displays message - "Server is being updated".
- 15: unknown
- 16: Client displays message - "Login attempts exceeded".
- 17: Client displays message - "You are standing in a members only area".
- 20: Client displays message - "Invalid loginserver requested".
- 21: Client displays message - "You have only just left another world".
- 22: Client displays message - "Malformed login packet".
- "server session key": Server-side session key used for encrypting the stream.
- "data file version": unknown
- "user ID": The ID of the user.
- "username": The username of the player.
- "password": The password of the player.
- "client session key": Client-side session key used for encrypting the stream.
- "connect status": The status of the connection, values:
- 16: Connecting a new connection.
- 18: Reconnecting a lost connection.
- "size": the size of the login packet when unencrypted.
- "client version": The memory version of the game client, values:
- 0: Low-memory
- 1: High-memory
- "crc values": unknown
- "player status": The in-game player status, values:
- 0: Normal player
- 1: Player Moderator
- 2: Administrator
=Login Process:
Client -> Server:
Type
|
Value
|
ubyte
|
14
|
ubyte
|
"name hash"
|
Server -> Client:
Type
|
Value
|
byte
|
0
|
byte
|
0
|
byte
|
0
|
byte
|
0
|
byte
|
0
|
byte
|
0
|
byte
|
0
|
byte
|
0
|
byte
|
"return code"
|
long
|
"server session key"
|
Client -> Server:
Type
|
Value
|
byte
|
10
|
int
|
"datafileversion"[0]
|
int
|
"datafileversion"[1]
|
int
|
"datafileversion"[2]
|
int
|
"datafileversion"[3]
|
int
|
"user id"
|
string
|
"username"
|
string
|
"password"
|
long
|
"client session key"
|
long
|
"server session key"
|
byte
|
"connect status"
|
byte
|
"size"
|
byte
|
255
|
short
|
342
|
byte
|
"client version"
|
int
|
"crc values"[0]
|
int
|
"crc values"[1]
|
int
|
"crc values"[2]
|
int
|
"crc values"[3]
|
int
|
"crc values"[4]
|
int
|
"crc values"[5]
|
int
|
"crc values"[6]
|
int
|
"crc values"[7]
|
int
|
"crc values"[8]
|
Server -> Client:
Type
|
Value
|
byte
|
"return code"
|
byte
|
"player status"
|
byte
|
0
|