Client Server handshake
From ioquake3 wiki
The client/server handshake sequence begins when the client side calls CL_CheckForResend(). If the client is not yet connected to a server, the connection handshake ensues with a sequence of OOB commands in roughly the following order:
- Client sends a getKeyAuthorize command that contains its CD key to
AUTHORIZE_SERVER_NAME("authorize.quake3arena.com"). - Client sends a getchallenge command to server.
- Server sends a getIpAuthorize command with client's IP address to
AUTHORIZE_SERVER_NAME("authorize.quake3arena.com"). - Auth server sends a "ipAuthorize" command back to server. If a client with the given IP has submitted a getKeyAuthorize command with a valid CD key in the last 15 minutes, the "ipAuthorize" command will contain an "accept" status.
- Server sends a challengeResponse command to the client that contains a randomly generated challenge key.
- Client responds with a connect command that contains the given challenge key.
- Server responds back with a connectResponse command to acknowledge a successful connection.
Caveats
- If the client and server are on the same LAN, neither side bothers to authorize with the authorize server.
- If the server does not receive a response from the authorize server after a while, the client will be let in anyway.
- Since these commands are sent via UDP, which does not guarantee delivery, there is some resending involved on both sides when it does not receive a timely response.