X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fclient%2Fmain.c;h=3938beaff39bcbad6a5496956024bfd5f2f7c2cb;hb=1fab0f284eb9f04b5a7b9e9c59baa306ae47f06b;hp=83d2bdefe70838817f4a8b1cec68bdaf33cd81c2;hpb=15038b1c31d2912682dccdc553258f6431952105;p=tpg%2Fopendispense2.git diff --git a/src/client/main.c b/src/client/main.c index 83d2bde..3938bea 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -16,6 +16,8 @@ #include // close/getuid #include // INT_MIN/INT_MAX #include "common.h" +#include "../common/doregex.h" +#include "../common/config.h" #define USE_NCURSES_INTERFACE 0 #define DEBUG_TRACE_SERVER 0 @@ -37,8 +39,12 @@ char *trim(char *string); void CompileRegex(regex_t *regex, const char *pattern, int flags); // === GLOBALS === -char *gsDispenseServer = "merlo.ucc.gu.uwa.edu.au"; +const char *gsConfigFile = "/etc/opendispense/client.conf"; + +const char *gsDispenseServer = "merlo.ucc.gu.uwa.edu.au"; int giDispensePort = 11020; + int giDispenseServerSet = 0; // True if set by command line + int giDispensePortSet = 0; // True if set by command line tItem *gaItems; int giNumItems; @@ -143,11 +149,19 @@ void ShowUsage(void) " Show help text\n" " -G\n" " Use simple textual interface (instead of ncurses)\n" + " -D\n" + " Drinks only in user interface\n" " -n\n" " Dry run - Do not actually do dispenses\n" " -m \n" " -M \n" " Set the Maximum/Minimum balances shown in `dispense acct`\n" + " -f \n" + " Set the config file path (default: `/etc/opendispense/client.conf'\n" + " -H \n" + " Set a different dispense host\n" + " -P \n" + " Set a different dispense port\n" "Definitions:\n" " \n" " Item ID of the form : where is a non-empty string of alpha-numeric characters, and is a non-negative integer\n" @@ -197,7 +211,7 @@ int subcommand_finger(void) // int subcommand_acct(void) { - int ret; + int ret = 0; // Connect to server int sock = OpenConnection(gsDispenseServer, giDispensePort); @@ -236,6 +250,7 @@ int subcommand_acct(void) if( gsTextArgs[2][0] == '=' ) { // Set balance + ret = Dispense_ShowUser(sock, gsTextArgs[1]); ret = Dispense_SetBalance(sock, gsTextArgs[1], balance, gsTextArgs[3]); } else { @@ -602,6 +617,18 @@ int main(int argc, char *argv[]) if( ret ) return ret; + // Load config file + Config_ParseFile(gsConfigFile); + + // Parse config values + if (!giDispenseServerSet) { + gsDispenseServer = Config_GetValue("dispense_server",0); + } + if (!giDispensePortSet) { + giDispensePort = Config_GetValue_Int("dispense_port",0); + } + + // Sub-commands if( strcmp(gsTextArgs[0], "finger") == 0 ) { return subcommand_finger(); @@ -863,6 +890,15 @@ int ParseArguments(int argc, char *argv[]) giMaximumBalance = atoi(argv[++i]); break; + case 'f': // Override Config File + if( i + 1 >= argc ) { + fprintf(stderr, "%s: -f takes an argument\n", argv[0]); + ShowUsage(); + return RV_ARGUMENTS; + } + gsConfigFile = argv[++i]; + break; + case 'u': // Override User if( i + 1 >= argc ) { fprintf(stderr, "%s: -u takes an argument\n", argv[0]); @@ -879,6 +915,7 @@ int ParseArguments(int argc, char *argv[]) return RV_ARGUMENTS; } gsDispenseServer = argv[++i]; + giDispenseServerSet = 1; break; case 'P': // Override remote port if( i + 1 >= argc ) { @@ -887,6 +924,7 @@ int ParseArguments(int argc, char *argv[]) return RV_ARGUMENTS; } giDispensePort = atoi(argv[++i]); + giDispensePortSet = 1; break; // Set slot name/price @@ -981,32 +1019,3 @@ char *trim(char *string) return string; } - -int RunRegex(regex_t *regex, const char *string, int nMatches, regmatch_t *matches, const char *errorMessage) -{ - int ret; - - ret = regexec(regex, string, nMatches, matches, 0); - if( ret && errorMessage ) { - size_t len = regerror(ret, regex, NULL, 0); - char errorStr[len]; - regerror(ret, regex, errorStr, len); - printf("string = '%s'\n", string); - fprintf(stderr, "%s\n%s", errorMessage, errorStr); - exit(-1); - } - - return ret; -} - -void CompileRegex(regex_t *regex, const char *pattern, int flags) -{ - int ret = regcomp(regex, pattern, flags); - if( ret ) { - size_t len = regerror(ret, regex, NULL, 0); - char errorStr[len]; - regerror(ret, regex, errorStr, len); - fprintf(stderr, "Regex compilation failed - %s\n", errorStr); - exit(-1); - } -}