From f4fe7da1fbf9f0f108cd8496ed0f2f67bf4a972f Mon Sep 17 00:00:00 2001 From: Tom Dickson-Hunt Date: Fri, 2 Apr 2010 10:47:41 +0200 Subject: [PATCH] New client option -s to specify server host and port Overrides EMPIREHOST and EMPIREPORT. --- man/empire.6 | 11 +++++++++++ src/client/main.c | 28 +++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/man/empire.6 b/man/empire.6 index 186064fc9..ae4d731ce 100644 --- a/man/empire.6 +++ b/man/empire.6 @@ -10,6 +10,9 @@ empire \- Empire client .BI \-2 " outfile" ] [ +.BI \-s " host:port" +] +[ .I country [ .I password @@ -34,6 +37,12 @@ Help. Print brief usage information and exit. .B \-k If someone else is connected to your country, kill their connection. .TP +.BI \-s " host:port" +Specify host and port to which to connect. +.IP +Connect to \fIhost\fR using port \fIport\fR. You can specify only +one; just leave the other empty (include the colon). +.TP .B \-u Use UTF-8 rather than ASCII character set. .IP @@ -60,9 +69,11 @@ client: .TP .I EMPIREHOST Specifies the host to connect to, i.e. where the server runs. +Only effective if no host specified via \-s. .TP .I EMPIREPORT Specifies the port number or service name to connect to. +Only effective if no port specified via \-s. .TP .I COUNTRY The name of your country in the game. diff --git a/src/client/main.c b/src/client/main.c index 0a55067fb..b6c2298f8 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -37,6 +37,7 @@ #include #include +#include #ifdef _WIN32 #include #include "sys/socket.h" @@ -68,6 +69,7 @@ print_usage(char *program_name) printf("Usage: %s [OPTION]...[COUNTRY [PASSWORD]]\n" " -2 FILE Append log of session to FILE\n" " -k Kill connection\n" + " -s HOST:PORT Set host and port to connect\n" " -u Use UTF-8\n" " -h display this help and exit\n" " -v display version information and exit\n", @@ -80,16 +82,16 @@ main(int argc, char **argv) int opt; char *auxfname = NULL; int send_kill = 0; + char *host = NULL; + char *port = NULL; int utf8 = 0; char **ap; char *country; char *passwd; char *uname; - char *host; - char *port; int sock; - while ((opt = getopt(argc, argv, "2:kuhv")) != EOF) { + while ((opt = getopt(argc, argv, "2:ks:uhv")) != EOF) { switch (opt) { case '2': auxfname = optarg; @@ -97,6 +99,20 @@ main(int argc, char **argv) case 'k': send_kill = 1; break; + case 's': + host = strdup(optarg); + port = strchr(host, ':'); + if (port == host) { /* if no host specified, then set to null */ + host = NULL; + } + if (port) { /* make port the bit after the colon */ + port[0] = 0; + port++; + if (port[0] == 0) { /* handle colon-at-end-of-string */ + port = NULL; + } + } + break; case 'u': utf8 = eight_bit_clean = 1; break; @@ -121,10 +137,12 @@ main(int argc, char **argv) passwd = *ap++; else passwd = getenv("PLAYER"); - port = getenv("EMPIREPORT"); + if (!port) + port = getenv("EMPIREPORT"); if (!port) port = empireport; - host = getenv("EMPIREHOST"); + if (!host) + host = getenv("EMPIREHOST"); if (!host) host = empirehost; uname = getenv("LOGNAME"); -- 2.43.0