OpenDispense^2 Client/Server Dispense Protocol The protocol is ASCII based, similar to the FTP protocol All server responses are on one line and are prefixed by a three digit response code. == Response Codes == 100 Information 200 Command succeeded, no extra information 201 Command succeeded, array follows ( ...) 202 Command succeeded, per-command format 400 Unknown Command 401 Not Authenticated (or Authentication failure) 402 Balance insufficient 403 User not allowed to perform this action 404 Bad other username 406 Bad Item ID 407 Invalid arguments 500 Unknown Dispense Failure 501 Action Rejected == Item IDs == represents the item ID Item IDs are allowed to contain any non-whitespace character, but in general they will be limited to the standard alpha-numeric set === User Auth === c USER \n s 100 SALT \n or 100 User Set\n (If no salt used) c PASS \n (Hex-Encoded SHA-1 Hash of ) s 200 Auth OK\n or 401 Auth Failure\n User is now authenticated --- Alternate Method (Implicit Trust Authentication) --- If the client is connecting from a trusted machine on a root port then automatic authentication is allowed c AUTOAUTH \n s 200 Auth OK\n or 404 Bad Username\n or 401 Untrusted\n === Commands === --- Dispense an item --- c DISPENSE \n s 200 Dispense OK\n or 402 Poor You\n or 500 Dispense Error\n or 406 Bad Item\n --- Give to another user --- c GIVE \n s 200 Give OK\n or 402 Poor You\n or 404 Bad User\n --- Update balance --- c ADD \n s 200 Add OK\n or 403 Not Coke\n or 404 Bad User\n --- Get Item list --- c ENUM_ITEMS\n s 201 Items ...\n --- Get Item Information --- c ITEM_INFO \n s 202 Item \n --- Set Balance --- c SET \n s 200 Set OK\n or 403 Not allowed\n or 404 Bad User\n --- Get Users Balances --- c ENUM_USERS[ ]\n s 201 Users ...\n --- Get a User's Balance --- c USERINFO\n s 202 User \n