2 Client/Server Dispense Protocol
4 The protocol is ASCII based, similar to the FTP protocol
5 All server responses are on one line and are prefixed by a three digit response code.
9 200 Command succeeded, no extra information
10 201 Command succeeded, multiple lines follow (<length>)
11 202 Command succeeded, per-command format
13 401 Not Authenticated (or Authentication failure)
14 402 Balance insufficient
15 403 User not allowed to perform this action
16 404 Bad other username
19 500 Unknown Dispense Failure
23 <item_id> represents the item ID
24 Item IDs are allowed to contain any non-whitespace character, but in
25 general they will be limited to the standard alpha-numeric set
29 s 100 SALT <string>\n or 100 User Set\n (If no salt used)
30 c PASS <hash>\n (Hex-Encoded SHA-1 Hash of <username><salt><password>)
31 s 200 Auth OK\n or 401 Auth Failure\n
32 User is now authenticated
33 --- Alternate Method (Implicit Trust Authentication) ---
34 If the client is connecting from a trusted machine on a root port then
35 automatic authentication is allowed
36 c AUTOAUTH <username>\n
37 s 200 Auth OK\n or 404 Bad Username\n or 401 Untrusted\n
38 --- Set effective user (User in `dispense -u`) ---
39 c SETEUSER <username>\n
40 s 200 User set\n or 403 Not in coke\n or 404 User not found\n
43 --- Dispense an item ---
44 c DISPENSE <item_id>\n
45 s 200 Dispense OK\n or 402 Poor You\n or 500 Dispense Error\n or 406 Bad Item\n
46 --- Give to another user ---
47 c GIVE <user> <ammount> <reason>\n
48 s 200 Give OK\n or 402 Poor You\n or 404 Bad User\n
50 c ADD <user> <ammount> <reason>\n
51 s 200 Add OK\n or 402 No balance\n or 403 Not Coke\n or 404 Bad User\n
53 c SET <user> <ammount> <reason>\n
54 s 200 Set OK\n or 403 Not Coke\n or 404 Bad User\n
59 s 202 Item <item_id> <price> <description>\n
62 --- Get Item Information ---
63 c ITEM_INFO <item_id>\n
64 s 202 Item <item_id> <price> <description>\n
66 --- Get Users' Balances ---
67 <max balance> and <min balance> can be '-' to indicate "none"
68 c ENUM_USERS[ <min balance> [<max balance>]]\n
70 s 202 User <username> <balance> <flags>\n
73 --- Get a User's Balance ---
75 s 202 User <username> <balance> <flags>\n
77 --- Add a new user ---
78 c USER_ADD <username>\n
79 s 200 User Added\n or 403 Not Wheel\n or 404 User Exists\n
80 --- Set user flags ---
81 <flags> is a comma-separated list of flag values (optionally preceded by
82 - to remove the flag) Valid values are: user,coke,wheel,meta,disabled,door
83 c USER_FLAGS <username> <flags>\n
84 s 200 User Updated\n or 403 Not Wheel\n or 404 Bad User\n or 407 Unknown Flags\n