DRD Get User — Group 16, Code 141
Fetches one directory record by denomination + serial number. Open read: no authentication required. This is how a QMail client learns a correspondent’s display name, avatar symbols, inbox fee, and account age before sending.
Quick reference
| Command Group | 16 (DRD) |
| Command Code | 141 (0x8D) |
| Server function | cmd_drd_get_user in cmd_drd.c |
| Request body | Exactly 23 bytes: challenge(16) + DN(1) + SN(4) + terminator(2) |
| Authentication | None — user records are public |
| Success response | Status 250 + one user record (34 + name bytes) |
| Not found | Status 193 (ERROR_NO_ENTRY), no payload |
Request body (23 bytes)
| Body offset | Size | Field | Description |
|---|---|---|---|
| 0–11 | 12 | Challenge random | Random bytes generated by the client. |
| 12–15 | 4 | Challenge CRC32 | Big-endian CRC32 of bytes 0–11. |
| 16 | 1 | Denomination | Denomination of the record being fetched. |
| 17–20 | 4 | Serial Number | Serial number of the record being fetched, big-endian. |
| 21–22 | 2 | Terminator | Fixed 3E 3E. The body must be exactly 23 bytes. |
Response
On success the payload is one user record in the standard DRD serialization:
User record payload (34 + FL + LL bytes)
+------+--------+-----------+----+----+----+------------+------------+----+-------+----+------+
| DN | SN | inbox fee | S1 | S2 | CR | created_at | updated_at | FL | first | LL | last |
| 1 | 4 (BE) | 8 (BE) | 1 | 1 | 1 | 8 (BE) | 8 (BE) | 1 | FL | 1 | LL |
+------+--------+-----------+----+----+----+------------+------------+----+-------+----+------+
offset 0 1 5 13 14 15 16 24 32 33 ... ...
| Payload offset | Size | Field | Description |
|---|---|---|---|
| 0 | 1 | Denomination | Echo of the record key. |
| 1–4 | 4 | Serial Number | Echo of the record key, big-endian. |
| 5–12 | 8 | Inbox fee | Big-endian signed int64, units of 10−8 CC. |
| 13 | 1 | First symbol | Avatar symbol index. |
| 14 | 1 | Second symbol | Avatar symbol index. |
| 15 | 1 | Class rejection (CR) | Signed minimum sender denomination (0x00 = accepts all; 0xFF = −1 = 0.1 CC). Senders below this denomination are rejected at the Tell gate with ERROR_SENDER_CLASS_REJECTED (237). |
| 16–23 | 8 | created_at | Big-endian Unix seconds. First-post time; never changes. Display account age from this. |
| 24–31 | 8 | updated_at | Big-endian Unix seconds of the latest post. |
| 32 | 1 | First-name length (FL) | 0–63. |
| 33... | FL | First name | UTF-8. |
| 33+FL | 1 | Last-name length (LL) | 0–63. |
| 34+FL... | LL | Last name | UTF-8. |
Status codes
| Decimal | Hex | Symbol | Meaning |
|---|---|---|---|
| 250 | 0xFA | STATUS_SUCCESS | Record returned in the payload. |
| 193 | 0xC1 | ERROR_NO_ENTRY | No record exists for that denomination/serial on this RAIDA. |
| 16 | 0x10 | ERROR_INVALID_PACKET_LENGTH | Body is not exactly 23 bytes. |
| 252 | 0xFC | ERROR_INTERNAL | Database failure. |
| 254 | 0xFE | ERROR_MEMORY_ALLOC | Server allocation failure. |
Common mistakes
Treating 193 on one RAIDA as “user does not exist”
RAIDAs are independent. A record can be present on 24 servers and missing on one that was offline during the post. Query a few servers before concluding a user is unregistered.
Reading names as fixed-width fields
Both names are length-prefixed and variable. The record has no fixed total size; always honor FL and LL.