From 9642cfe413e6be3ad0a880b00cde64bc0ddec3c9 Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Fri, 27 May 2022 18:15:02 -0700
Subject: [PATCH] Fix port parsing in dial string

More case-insensitivity in parsing special "number" values (e.g. 'L' for last number).

Default to Telnet mode (not Raw TCP).
Default to unspecific address family (not IPv4).
Case-insensitive "-telnet" and "-raw" option recognition.
---
 src/vdmodem/vdmodem.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/vdmodem/vdmodem.c b/src/vdmodem/vdmodem.c
index 934905e5e4..69b9872bd5 100644
--- a/src/vdmodem/vdmodem.c
+++ b/src/vdmodem/vdmodem.c
@@ -574,7 +574,7 @@ char* dial(struct modem* modem, const char* number)
 	char* p = strrchr(host, ':');
 	char* b = strrchr(host, ']'); 
 	if(p != NULL && p > b) {
-		port = (uint16_t)strtol(p, &p, 10);
+		port = (uint16_t)strtol(p + 1, NULL, 10);
 		*p = 0;
 	}
 	dprintf("Connecting to port %hu at host '%s' via %s", port, host, protocol(mode));
@@ -591,7 +591,7 @@ char* dial(struct modem* modem, const char* number)
 	SAFEPRINTF(portnum, "%hu", port);
 	int result = getaddrinfo(host, portnum, &hints, &res);
 	if(result != 0) {
-		dprintf("getaddrinfo(%s, %s) returned %d", host, portnum, result);
+		dprintf("getaddrinfo(%s, %s) [family=%d] returned %d", host, portnum, hints.ai_family, result);
 		return response(modem, NO_ANSWER);
 	}
 
@@ -725,13 +725,13 @@ char* atmodem_exec(struct modem* modem)
 							return error(modem);
 						if(*p == '=') {
 							p++;
-							if(strcmp(p, "L") == 0)
+							if(stricmp(p, "L") == 0)
 								p = modem->last;
 							SAFECOPY(modem->save[val], p);
 							return write_save(modem, val) ? ok(modem) : error(modem);
 						}
-						if(*p == '?' || strcmp(p, "L?") == 0) {
-							if(strcmp(p, "L?") == 0)
+						if(*p == '?' || stricmp(p, "L?") == 0) {
+							if(stricmp(p, "L?") == 0)
 								p = modem->last;
 							else
 								p = modem->save[val];
@@ -1025,9 +1025,10 @@ int main(int argc, char** argv)
 	}
 
 	// Default configuration values
+	mode = TELNET;
 	cfg.server_echo = TRUE;
 	cfg.port = IPPORT_TELNET;
-	cfg.address_family = ADDRESS_FAMILY_INET;
+	cfg.address_family = ADDRESS_FAMILY_UNSPEC;
 	SAFECOPY(cfg.busy_notice, "\r\nSorry, not available right now\r\n");
 
 	ini = strListInit();
@@ -1045,11 +1046,11 @@ int main(int argc, char** argv)
 			break;
 		while(*arg == '-')
 			arg++;
-		if(strcmp(arg, "telnet") == 0) {
+		if(stricmp(arg, "telnet") == 0) {
 			mode = TELNET;
 			continue;
 		}
-		if(strcmp(arg, "raw") == 0) {
+		if(stricmp(arg, "raw") == 0) {
 			mode = RAW;
 			continue;
 		}
-- 
GitLab