diff --git a/client.conf b/client.conf new file mode 100644 index 0000000000000000000000000000000000000000..ff657ee984e38b3ecbbb46c498447d2cc7ba4eae --- /dev/null +++ b/client.conf @@ -0,0 +1,5 @@ +# +# OpenDispense2 Client config file +# +dispense_server merlo.ucc.asn.au +dispense_port 11021 diff --git a/src/client/Makefile b/src/client/Makefile index b70551eade5ee9b9a47bb8ba2ac174d9ec762ac5..5045d983fc0fd97aaccc73616516f855c6d60b75 100644 --- a/src/client/Makefile +++ b/src/client/Makefile @@ -8,7 +8,7 @@ LDFLAGS := -g -lncurses BIN := ../../dispense OBJ := main.o protocol.o menu.o -OBJ += doregex.o +OBJ += doregex.o config.o DEPFILES := $(OBJ:%.o=%.d) diff --git a/src/client/main.c b/src/client/main.c index ddf37799661f6091cefbcff6aaeca77ece350c4e..4dd70df90150cde1852926b354a48390e487ceca 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -17,6 +17,7 @@ #include <limits.h> // 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 @@ -38,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; @@ -149,6 +154,8 @@ void ShowUsage(void) " -m <min balance>\n" " -M <max balance>\n" " Set the Maximum/Minimum balances shown in `dispense acct`\n" + " -f <configfile>\n" + " Set the config file path (default: `/etc/opendispense/client.conf'\n" "Definitions:\n" " <itemid>\n" " Item ID of the form <type>:<num> where <type> is a non-empty string of alpha-numeric characters, and <num> is a non-negative integer\n" @@ -604,6 +611,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(); @@ -865,6 +884,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]); @@ -881,6 +909,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 ) { @@ -889,6 +918,7 @@ int ParseArguments(int argc, char *argv[]) return RV_ARGUMENTS; } giDispensePort = atoi(argv[++i]); + giDispensePortSet = 1; break; // Set slot name/price