Skip to content
Snippets Groups Projects
Commit 7dbe06bf authored by rswindell's avatar rswindell
Browse files

Integrated Incident Commander's "already connected" mod, sorta.

The new command-line option is -live, followed by an optional COM handle
(for passing live com handles from 32-bit programs, ala Argus).
Also added -nohangup option to not hangup modem (drop DTR) after call.
parent 8f6e8398
No related branches found
No related tags found
No related merge requests found
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
/* Synchronet External Plain Old Telephone System (POTS) support */ /* Synchronet External Plain Old Telephone System (POTS) support */
// other name ideas: pots2tcp
/* $Id$ */ /* $Id$ */
/**************************************************************************** /****************************************************************************
...@@ -71,9 +69,14 @@ int mdm_timeout=5; /* seconds */ ...@@ -71,9 +69,14 @@ int mdm_timeout=5; /* seconds */
char com_dev[MAX_PATH+1]; char com_dev[MAX_PATH+1];
HANDLE com_handle=INVALID_HANDLE_VALUE; HANDLE com_handle=INVALID_HANDLE_VALUE;
BOOL terminated=FALSE; BOOL com_handle_passed=FALSE;
BOOL com_alreadyconnected=FALSE;
BOOL com_hangup=TRUE;
int dcd_timeout=10; /* seconds */ int dcd_timeout=10; /* seconds */
BOOL terminated=FALSE;
BOOL terminate_after_one_call=FALSE;
SOCKET sock=INVALID_SOCKET; SOCKET sock=INVALID_SOCKET;
char host[MAX_PATH+1]; char host[MAX_PATH+1];
ushort port; ushort port;
...@@ -100,7 +103,14 @@ int telnet_cmdlen; ...@@ -100,7 +103,14 @@ int telnet_cmdlen;
/****************************************************************************/ /****************************************************************************/
int usage(const char* fname) int usage(const char* fname)
{ {
printf("usage: %s <COM device> <hostname or IP> <TCP port>\n" printf("usage: %s [ini file] [options]\n"
"\nOptions:"
"\n-null No 'AT commands' sent to modem"
"\n-com <device> Specify communications port device"
"\n-live [handle] Communications port is already open/connected"
"\n-nohangup Do not hangup (drop DTR) after call"
"\n-host <addr | name> Specify TCP server hostname or IP address"
"\n-port <number> Specify TCP port number"
,getfname(fname)); ,getfname(fname));
return 0; return 0;
...@@ -266,9 +276,10 @@ void cleanup(void) ...@@ -266,9 +276,10 @@ void cleanup(void)
if(com_handle!=COM_HANDLE_INVALID) { if(com_handle!=COM_HANDLE_INVALID) {
if(!mdm_null&& mdm_cleanup[0]) if(!mdm_null && mdm_cleanup[0])
modem_command(com_handle, mdm_cleanup); modem_command(com_handle, mdm_cleanup);
comClose(com_handle); if(!com_handle_passed)
comClose(com_handle);
} }
close_socket(&sock); close_socket(&sock);
...@@ -293,6 +304,9 @@ BOOL wait_for_call(HANDLE com_handle) ...@@ -293,6 +304,9 @@ BOOL wait_for_call(HANDLE com_handle)
BOOL result=TRUE; BOOL result=TRUE;
DWORD events=0; DWORD events=0;
if(com_alreadyconnected)
return TRUE;
if(!mdm_null && mdm_init[0]) { if(!mdm_null && mdm_init[0]) {
lprintf(LOG_INFO,"Initializing modem:"); lprintf(LOG_INFO,"Initializing modem:");
if(!modem_command(com_handle, mdm_init)) if(!modem_command(com_handle, mdm_init))
...@@ -729,8 +743,8 @@ int main(int argc, char** argv) ...@@ -729,8 +743,8 @@ int main(int argc, char** argv)
/*******************************/ /*******************************/
sscanf("$Revision$", "%*s %s", revision); sscanf("$Revision$", "%*s %s", revision);
sprintf(banner,"\nSynchronet External POTS<->TCP Driver v%s-%s" sprintf(banner,"\nSynchronet External POTS<->TCP Driver v%s-%s"
" Copyright %s Rob Swindell\n" " Copyright %s Rob Swindell\n"
,revision ,revision
,PLATFORM_DESC ,PLATFORM_DESC
,__DATE__+7 ,__DATE__+7
...@@ -741,7 +755,7 @@ int main(int argc, char** argv) ...@@ -741,7 +755,7 @@ int main(int argc, char** argv)
/******************/ /******************/
/* Read .ini file */ /* Read .ini file */
/******************/ /******************/
/* Generate path/sexyz[.host].ini from path/sexyz[.exe] */ /* Generate path/sexpots[.host].ini from path/sexpots[.exe] */
SAFECOPY(path,argv[0]); SAFECOPY(path,argv[0]);
p=getfname(path); p=getfname(path);
SAFECOPY(fname,p); SAFECOPY(fname,p);
...@@ -769,22 +783,35 @@ int main(int argc, char** argv) ...@@ -769,22 +783,35 @@ int main(int argc, char** argv)
parse_ini_file(arg); parse_ini_file(arg);
continue; continue;
} }
while(*arg=='-') while(*arg=='-')
arg++; arg++;
if(stricmp(arg,"null")==0) if(stricmp(arg,"null")==0)
mdm_null=TRUE; mdm_null=TRUE;
else if(stricmp(arg,"com")==0 && argc > argn+1) else if(stricmp(arg,"com")==0 && argc > argn+1)
SAFECOPY(com_dev, argv[++argn]); SAFECOPY(com_dev, argv[++argn]);
else if(stricmp(arg,"host")==0 && argc > argn+1) else if(stricmp(arg,"host")==0 && argc > argn+1)
SAFECOPY(host, argv[++argn]); SAFECOPY(host, argv[++argn]);
else if(stricmp(arg,"port")==0 && argc > argn+1) else if(stricmp(arg,"port")==0 && argc > argn+1)
port = (ushort)strtol(argv[++argn], NULL, 0); port = (ushort)strtol(argv[++argn], NULL, 0);
else if(stricmp(arg,"help")==0 || *arg=='?') else if(stricmp(arg,"live")==0) {
return usage(argv[0]); if(argc > argn+1 &&
else { (com_handle = (HANDLE)strtol(argv[argn+1], NULL, 0)) != 0) {
fprintf(stderr,"Invalid option: %s\n", arg); argn++;
return usage(argv[0]); com_handle_passed=TRUE;
} }
com_alreadyconnected=TRUE;
terminate_after_one_call=TRUE;
mdm_null=TRUE;
}
else if(stricmp(arg,"nohangup")==0) {
com_hangup=FALSE;
}
else if(stricmp(arg,"help")==0 || *arg=='?')
return usage(argv[0]);
else {
fprintf(stderr,"Invalid option: %s\n", arg);
return usage(argv[0]);
}
} }
#if defined(_WIN32) #if defined(_WIN32)
...@@ -806,11 +833,13 @@ int main(int argc, char** argv) ...@@ -806,11 +833,13 @@ int main(int argc, char** argv)
lprintf(LOG_INFO,"TCP Host: %s", host); lprintf(LOG_INFO,"TCP Host: %s", host);
lprintf(LOG_INFO,"TCP Port: %u", port); lprintf(LOG_INFO,"TCP Port: %u", port);
lprintf(LOG_INFO,"Opening Communications Device: %s", com_dev); if(!com_handle_passed) {
if((com_handle=comOpen(com_dev)) == COM_HANDLE_INVALID) { lprintf(LOG_INFO,"Opening Communications Device: %s", com_dev);
lprintf(LOG_ERR,"ERROR %u opening %s", COM_ERROR_VALUE, com_dev); if((com_handle=comOpen(com_dev)) == COM_HANDLE_INVALID) {
return -1; lprintf(LOG_ERR,"ERROR %u opening %s", COM_ERROR_VALUE, com_dev);
return -1;
}
} }
lprintf(LOG_INFO,"%s set to %ld bps DTE rate", com_dev, comGetBaudRate(com_handle)); lprintf(LOG_INFO,"%s set to %ld bps DTE rate", com_dev, comGetBaudRate(com_handle));
...@@ -829,15 +858,17 @@ int main(int argc, char** argv) ...@@ -829,15 +858,17 @@ int main(int argc, char** argv)
comWriteByte(com_handle,'\r'); comWriteByte(com_handle,'\r');
comWriteString(com_handle, banner); comWriteString(com_handle, banner);
if((sock=connect_socket(host, port)) == INVALID_SOCKET) { if((sock=connect_socket(host, port)) == INVALID_SOCKET) {
comWriteString(com_handle,"\7\r\n!ERROR connecting to TCP port\r\n"); comWriteString(com_handle,"\7\r\n!ERROR connecting to TCP port\r\n");
} else { } else {
handle_call(); handle_call();
close_socket(&sock); close_socket(&sock);
total_calls++; total_calls++;
lprintf(LOG_INFO,"Call completed (%lu total)", total_calls); lprintf(LOG_INFO,"Call completed (%lu total)", total_calls);
} }
if(!hangup_call(com_handle)) if(com_hangup && !hangup_call(com_handle))
return -1; return -1;
if(terminate_after_one_call)
break;
} }
return 0; return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment