X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fclient%2Fprotocol.c;h=fb698504b8298b2745f221adbac863e4bde47e09;hb=6ce2ae9922415d9f65ded1c468e45eed50758666;hp=ad8a6bf6c2657b0c448a66a721f7396ffadef535;hpb=afc4569cb98d4cc498e78ebb51767e5521ba2ea8;p=tpg%2Fopendispense2.git diff --git a/src/client/protocol.c b/src/client/protocol.c index ad8a6bf..fb69850 100644 --- a/src/client/protocol.c +++ b/src/client/protocol.c @@ -21,6 +21,7 @@ #include // close/getuid #include // INT_MIN/INT_MAX #include +#include // isdigit #include "common.h" // === PROTOTYPES === @@ -520,14 +521,14 @@ int DispenseCheckPin(int Socket, const char *Username, const char *Pin) return RV_ARGUMENTS; } - for( int i = 0; i < 4; i ++ ) + for( int i = 0; i < 4; i ++ ) { if( !isdigit(Pin[i]) ) { fprintf(stderr, "Pin format incorrect (character %i not a digit)\n", i); return RV_ARGUMENTS; } } - sendf(Socket, "CHECK_PIN %s %s\n", Username, Pin); + sendf(Socket, "PIN_CHECK %s %s\n", Username, Pin); buf = ReadLine(Socket); responseCode = atoi(buf); @@ -566,6 +567,49 @@ int DispenseCheckPin(int Socket, const char *Username, const char *Pin) return ret; } +int DispenseSetPin(int Socket, const char *Pin) +{ + int ret, responseCode; + char *buf; + + if( strlen(Pin) != 4 ) { + fprintf(stderr, "Pin format incorrect (not 4 characters long)\n"); + return RV_ARGUMENTS; + } + + for( int i = 0; i < 4; i ++ ) { + if( !isdigit(Pin[i]) ) { + fprintf(stderr, "Pin format incorrect (character %i not a digit)\n", i); + return RV_ARGUMENTS; + } + } + + sendf(Socket, "PIN_SET %s\n", Pin); + buf = ReadLine(Socket); + + responseCode = atoi(buf); + switch(responseCode) + { + case 200: + printf("Pin Updated\n"); + ret = 0; + break; + case 401: + printf("Not authenticated\n"); + ret = RV_PERMISSIONS; + break; + case 407: + printf("Client/server disagreement on pin format\n"); + ret = RV_SERVER_ERROR; + break; + default: + printf("Unknown response code %i ('%s')\n", responseCode, buf); + ret = RV_UNKNOWN_ERROR; + break; + } + return ret; +} + /** * \brief Dispense an item * \return Boolean Failure @@ -657,7 +701,7 @@ int Dispense_AlterBalance(int Socket, const char *Username, int Ammount, const c rv = RV_BAD_ITEM; break; case 403: // Not in coke - fprintf(stderr, "You are not in coke (sucker)\n"); + fprintf(stderr, "Permissions error: %s\n", buf+4); rv = RV_PERMISSIONS; break; case 404: // Unknown user @@ -698,7 +742,7 @@ int Dispense_SetBalance(int Socket, const char *Username, int Balance, const cha switch(responseCode) { case 200: return 0; // OK - case 403: // Not in coke + case 403: // Not an administrator fprintf(stderr, "You are not an admin\n"); return RV_PERMISSIONS; case 404: // Unknown user