X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fclient%2Fmain.c;h=bf22fab7bd7c6f26f814e1e519c67fba6bc34eb7;hb=586e8014f5d6a588f4614831b53c5d8d8efab4d2;hp=d5ef77a06c2110f3b1eadeaf38a176c27527f088;hpb=9bc797abfe195ad2740255839aaacfa71875b34e;p=tpg%2Fopendispense2.git diff --git a/src/client/main.c b/src/client/main.c index d5ef77a..bf22fab 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -23,7 +23,7 @@ #include #include #include -#include // SHA1 +//#include // SHA1 #define USE_NCURSES_INTERFACE 0 #define DEBUG_TRACE_SERVER 0 @@ -97,7 +97,7 @@ char *trim(char *string); void CompileRegex(regex_t *regex, const char *pattern, int flags); // === GLOBALS === -char *gsDispenseServer = "heathred"; +char *gsDispenseServer = "merlo.ucc.gu.uwa.edu.au"; int giDispensePort = 11020; tItem *gaItems; @@ -146,6 +146,11 @@ void ShowUsage(void) " dispense iteminfo \n" " Get the name and price for an item\n" ); +// if( giTextArgc == 0 || strcmp(gsTextArgs[0], "enumitems") == 0 ) +// printf( +// " dispense enumitems\n" +// " List avaliable items\n" +// ); if( giTextArgc == 0 ) printf(" == Coke members == \n"); if( giTextArgc == 0 || strcmp(gsTextArgs[0], "acct") == 0 ) @@ -161,6 +166,8 @@ void ShowUsage(void) printf( " dispense refund []\n" " Refund an item to a user (with optional price override)\n" + " Item IDs can be seen in the cokelog (in the brackets after the item name)\n" + " e.g. coke:6 for a coke, snack:33 for slot 33 of the snack machine\n" ); if( giTextArgc == 0 || strcmp(gsTextArgs[0], "slot") == 0 ) printf( @@ -402,7 +409,11 @@ int main(int argc, char *argv[]) ret = Dispense_AlterBalance(sock, gsTextArgs[1], atoi(gsTextArgs[2]), gsTextArgs[3]); } } - // TODO: Preserve ret if non-zero + // On error, quit + if( ret ) { + close(sock); + return ret; + } // Show user information ret = Dispense_ShowUser(sock, gsTextArgs[1]); @@ -550,7 +561,7 @@ int main(int argc, char *argv[]) // TODO: More close(sock); - return RV_UNKNOWN_ERROR; + return ret; } // Query an item price else if( strcmp(gsTextArgs[0], "iteminfo") == 0 ) @@ -810,10 +821,10 @@ int main(int argc, char *argv[]) if( j > 1 ) { printf("%i items dispensed\n", j); } + Dispense_ShowUser(sock, gsUserName); close(sock); - } - Dispense_ShowUser(sock, gsUserName); + } return ret; } @@ -1121,7 +1132,7 @@ int ShowItemAt(int Row, int Col, int Width, int Index, int bHilighted) } // If the item isn't availiable for sale, return -1 (so it's skipped) - if( status || price >= giUserBalance ) + if( status || price > giUserBalance ) Index = -1; return Index; @@ -1533,7 +1544,7 @@ void PopulateItemList(int Socket) char *buf; int responseCode; - char *itemType, *itemStart; + char *arrayType; int count, i; regmatch_t matches[4]; @@ -1556,19 +1567,16 @@ void PopulateItemList(int Socket) // 202 Item RunRegex(&gArrayRegex, buf, 4, matches, "Malformed server response"); - itemType = &buf[ matches[2].rm_so ]; buf[ matches[2].rm_eo ] = '\0'; + arrayType = &buf[ matches[2].rm_so ]; buf[ matches[2].rm_eo ] = '\0'; count = atoi( &buf[ matches[3].rm_so ] ); // Check array type - if( strcmp(itemType, "Items") != 0 ) { + if( strcmp(arrayType, "Items") != 0 ) { // What the?! fprintf(stderr, "Unexpected array type, expected 'Items', got '%s'\n", - itemType); + arrayType); exit(RV_UNKNOWN_ERROR); } - - itemStart = &buf[ matches[3].rm_eo ]; - free(buf); giNumItems = count; @@ -1683,7 +1691,7 @@ int DispenseItem(int Socket, const char *Type, int ID) int Dispense_AlterBalance(int Socket, const char *Username, int Ammount, const char *Reason) { char *buf; - int responseCode; + int responseCode, rv = -1; // Check for a dry run if( gbDryRun ) { @@ -1701,26 +1709,32 @@ int Dispense_AlterBalance(int Socket, const char *Username, int Ammount, const c buf = ReadLine(Socket); responseCode = atoi(buf); - free(buf); switch(responseCode) { - case 200: return 0; // OK + case 200: + rv = 0; // OK + break; case 402: fprintf(stderr, "Insufficient balance\n"); - return RV_BAD_ITEM; + rv = RV_BAD_ITEM; + break; case 403: // Not in coke fprintf(stderr, "You are not in coke (sucker)\n"); - return RV_PERMISSIONS; + rv = RV_PERMISSIONS; + break; case 404: // Unknown user fprintf(stderr, "Unknown user '%s'\n", Username); - return RV_INVALID_USER; + rv = RV_INVALID_USER; + break; default: - fprintf(stderr, "Unknown response code %i\n", responseCode); - return RV_UNKNOWN_RESPONSE; + fprintf(stderr, "Unknown response code %i\n'%s'\n", responseCode, buf); + rv = RV_UNKNOWN_RESPONSE; + break; } + free(buf); - return -1; + return rv; } /** @@ -2205,12 +2219,12 @@ char *ReadLine(int Socket) } else { len = recv(Socket, buf+bufPos, BUFSIZ-1-bufPos, 0); - if( len < 0 ) { + if( len <= 0 ) { free(ret); - return strdup("499 Client Connection Error\n"); + return strdup("599 Client Connection Error\n"); } - buf[bufPos+len] = '\0'; } + buf[bufPos+len] = '\0'; newline = strchr( buf+bufPos, '\n' ); if( newline ) {