From 508472979d7742e7ac9658ce33ed7da4add142d0 Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Mon, 7 Feb 2022 23:46:40 -0800
Subject: [PATCH] Parse/apply [COM:x] section upon prompted key press of 'x'

Another hack for Nelgin: this'll allow (in theory) the serial device to switch parity modes (e.g. 8N1 or 7E1) depending on what the user selects (key pressed).

I did not add byte/stop bit size configurations. We may need that.
---
 src/sexpots/sexpots.c | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/sexpots/sexpots.c b/src/sexpots/sexpots.c
index 3db74442c2..094b1d48fb 100644
--- a/src/sexpots/sexpots.c
+++ b/src/sexpots/sexpots.c
@@ -1390,6 +1390,20 @@ void parse_tcp_section(const char* section)
 	telnet					= iniGetBool(ini,section,"Telnet", telnet);
 }
 
+void parse_com_section(const char* section)
+{
+	iniGetExistingWord(ini, section, "Device", NULL, com_dev);
+	com_baudrate    = iniGetLongInt(ini, section, "BaudRate", com_baudrate);
+	com_parity		= iniGetBool(ini, section, "Parity", com_parity);
+	com_parity_odd	= iniGetBool(ini, section, "ParityOdd", com_parity_odd);
+	com_hangup	    = iniGetBool(ini, section, "Hangup", com_hangup);
+	hangup_attempts = iniGetInteger(ini, section, "HangupAttempts", hangup_attempts);
+	dcd_timeout     = iniGetInteger(ini, section, "DCDTimeout", dcd_timeout);
+	dcd_ignore      = iniGetBool(ini, section, "IgnoreDCD", dcd_ignore);
+	dtr_delay		= iniGetLongInt(ini, section, "DTRDelay", dtr_delay);
+	mdm_null	    = iniGetBool(ini, section, "NullModem", mdm_null);
+}
+
 void parse_ini_file(const char* ini_fname)
 {
 	FILE* fp;
@@ -1413,17 +1427,7 @@ void parse_ini_file(const char* ini_fname)
 		log_level=LOG_DEBUG;
 	
 	/* [COM] Section */
-	section="COM";
-	iniGetExistingWord(ini, section, "Device", NULL, com_dev);
-	com_baudrate    = iniGetLongInt(ini, section, "BaudRate", com_baudrate);
-	com_parity		= iniGetBool(ini, section, "Parity", com_parity);
-	com_parity_odd	= iniGetBool(ini, section, "ParityOdd", com_parity_odd);
-	com_hangup	    = iniGetBool(ini, section, "Hangup", com_hangup);
-	hangup_attempts = iniGetInteger(ini, section, "HangupAttempts", hangup_attempts);
-	dcd_timeout     = iniGetInteger(ini, section, "DCDTimeout", dcd_timeout);
-	dcd_ignore      = iniGetBool(ini, section, "IgnoreDCD", dcd_ignore);
-	dtr_delay		= iniGetLongInt(ini, section, "DTRDelay", dtr_delay);
-	mdm_null	    = iniGetBool(ini, section, "NullModem", mdm_null);
+	parse_com_section("COM");
 
 	/* [Modem] Section */
 	section="Modem";
@@ -1626,6 +1630,8 @@ service_loop(int argc, char** argv)
 					lprintf(LOG_DEBUG, "Received character '%c' (%d) in response to prompt", ch, ch);
 					SAFEPRINTF(str, "TCP:%c", ch);
 					parse_tcp_section(str);
+					SAFEPRINTF(str, "COM:%c", ch);
+					parse_com_section(str);
 				}
 			} else
 				lprintf(LOG_NOTICE, "Timeout (%d seconds) waiting for response to prompt", prompt_timeout);
-- 
GitLab