Message 0x4A
This message deals with user permissions and the user editor.
Subtypes
| Subtype | Direction | Purpose
|
| 0 | both | open user editor (list accounts)
|
| 1 | both | add account
|
| 2 | both | delete account
|
| 3 | both | update account
|
| 4 | client->server | close user editor
|
| 5 | server->client | permissions for the local user, sent to everyone
|
| 6 | both | change owners
|
Only one user at a time can access the user editor. to claim the user editor a client sends a 0x00 subtype message and to release it a 0x04 subtype message. changes in the account list are sent only to the active lock holder.
Subtype 0 Packet
| Offset | Description
|
| 0 | User permissions header
|
| 20 | Array of UserAccount? structs (header.count elements)
|
May span multiple packets, last packet is marked by header.error_id == 10.
Subtype 1,3 Packet
| Offset | Description
|
| 0 | User permissions header
|
| 20 | UserAccount? struct
|
Subtype 2,5,6 Packet
Below are the structs used in the packet definitions:
| Type | Description | Offset
|
| uint32_t | packet type | 0
|
| uint16_t | subtype (see subtypes table) | 4
|
| uint16_t | error_id (see errors table) | 6
|
| uint16_t | unknown | 8
|
| uint16_t | number of user-permissions items in packet (max is 4) | 10
|
| uint16_t | unknown | 12
|
| uint16_t | unknown | 14
|
| uint32_t | unknown | 16
|
Errors
| Error ID | Error message
|
| 1 | Specified ID is no longer valid.
|
| 2 | Duplicate name.
|
| 3 | Server reported an error.
|
| 4 | All user accounts must have a valid password.
|
| 5 | Missing required fields.
|
| 6 | Not allowed to delete Guest account.
|
| 7 | The specified login name is not allowed.
|
| 8 | The specified login name contains characters that are not allowed.
|
| 9 | Insufficient access rights to complete the request.
|
| 11 | Specified alternate ID is not valid.
|
| 12 | Specified new owner does not have 'Add Users' rights.
|
| 13 | The user account database is full. You must delete an existing account before you can add a new one.
|
| 14 | The Guest account can not be locked without having at least one other account defined and is not locked it self. Otherwise, you would be locking everyone out of the server.
|