REMOTE_CONSOLE: Allow user selectable command output buffer size

The output of remote console commands gets truncated at the configured
buffer size.  The default has been raised from 1400 to 8192.
Common remote console usage is from the same host as the simulator and
as such localhost TCP traffic is delivered in chunks at least 8192 so no extra
packets will be involved in transporting the potential extra data and no
transmission delays on the send() call.
The minumum size is now 1400 (which was the prior default).
This commit is contained in:
Mark Pizzolato 2016-12-08 11:27:07 -08:00
parent a7593385aa
commit c393675b5b
3 changed files with 26 additions and 2 deletions

Binary file not shown.

3
scp.c
View file

@ -1049,6 +1049,9 @@ static const char simh_help[] =
"3Remote\n" "3Remote\n"
"+set remote TELNET=port specify remote console telnet port\n" "+set remote TELNET=port specify remote console telnet port\n"
"+set remote NOTELNET disables remote console\n" "+set remote NOTELNET disables remote console\n"
"+set remote BUFFERSIZE=bufsize\n"
"++++++++ specify remote console command output buffer\n"
"++++++++ size\n"
"+set remote CONNECTIONS=n specify number of concurrent remote\n" "+set remote CONNECTIONS=n specify number of concurrent remote\n"
"++++++++ console sessions\n" "++++++++ console sessions\n"
"+set remote TIMEOUT=n specify number of seconds without input\n" "+set remote TIMEOUT=n specify number of seconds without input\n"

View file

@ -147,6 +147,7 @@ static t_stat sim_os_ttclose (void);
static t_bool sim_os_ttisatty (void); static t_bool sim_os_ttisatty (void);
static t_stat sim_set_rem_telnet (int32 flag, CONST char *cptr); static t_stat sim_set_rem_telnet (int32 flag, CONST char *cptr);
static t_stat sim_set_rem_bufsize (int32 flag, CONST char *cptr);
static t_stat sim_set_rem_connections (int32 flag, CONST char *cptr); static t_stat sim_set_rem_connections (int32 flag, CONST char *cptr);
static t_stat sim_set_rem_timeout (int32 flag, CONST char *cptr); static t_stat sim_set_rem_timeout (int32 flag, CONST char *cptr);
static t_stat sim_set_rem_master (int32 flag, CONST char *cptr); static t_stat sim_set_rem_master (int32 flag, CONST char *cptr);
@ -281,6 +282,7 @@ static CTAB set_con_tab[] = {
static CTAB set_rem_con_tab[] = { static CTAB set_rem_con_tab[] = {
{ "CONNECTIONS", &sim_set_rem_connections, 0 }, { "CONNECTIONS", &sim_set_rem_connections, 0 },
{ "TELNET", &sim_set_rem_telnet, 1 }, { "TELNET", &sim_set_rem_telnet, 1 },
{ "BUFFERSIZE", &sim_set_rem_bufsize, 1 },
{ "NOTELNET", &sim_set_rem_telnet, 0 }, { "NOTELNET", &sim_set_rem_telnet, 0 },
{ "TIMEOUT", &sim_set_rem_timeout, 0 }, { "TIMEOUT", &sim_set_rem_timeout, 0 },
{ "MASTER", &sim_set_rem_master, 1 }, { "MASTER", &sim_set_rem_master, 1 },
@ -471,8 +473,10 @@ if (sim_rem_read_timeout)
fprintf (st, "Remote Console Input automatically continues after %d seconds\n", sim_rem_read_timeout); fprintf (st, "Remote Console Input automatically continues after %d seconds\n", sim_rem_read_timeout);
if (!sim_rem_con_tmxr.master) if (!sim_rem_con_tmxr.master)
fprintf (st, "Remote Console Command input is disabled\n"); fprintf (st, "Remote Console Command input is disabled\n");
else else {
fprintf (st, "Remote Console Command Input listening on TCP port: %s\n", sim_rem_con_unit[0].filename); fprintf (st, "Remote Console Command Input listening on TCP port: %s\n", sim_rem_con_unit[0].filename);
fprintf (st, "Remote Console Per Command Output buffer size: %d bytes\n", sim_rem_con_tmxr.buffered);
}
for (i=connections=0; i<sim_rem_con_tmxr.lines; i++) { for (i=connections=0; i<sim_rem_con_tmxr.lines; i++) {
lp = &sim_rem_con_tmxr.ldsc[i]; lp = &sim_rem_con_tmxr.ldsc[i];
if (!lp->conn) if (!lp->conn)
@ -1126,7 +1130,7 @@ if (flag) {
sim_set_rem_telnet (0, NULL); /* close first */ sim_set_rem_telnet (0, NULL); /* close first */
if (sim_rem_con_tmxr.lines == 0) /* Ir no connection limit set */ if (sim_rem_con_tmxr.lines == 0) /* Ir no connection limit set */
sim_set_rem_connections (0, "1"); /* use 1 */ sim_set_rem_connections (0, "1"); /* use 1 */
sim_rem_con_tmxr.buffered = 1400; /* Use big enough buffers */ sim_rem_con_tmxr.buffered = 8192; /* Use big enough buffers */
sim_register_internal_device (&sim_remote_console); sim_register_internal_device (&sim_remote_console);
r = tmxr_attach (&sim_rem_con_tmxr, &sim_rem_con_unit[0], cptr);/* open master socket */ r = tmxr_attach (&sim_rem_con_tmxr, &sim_rem_con_unit[0], cptr);/* open master socket */
if (r == SCPE_OK) if (r == SCPE_OK)
@ -1202,6 +1206,23 @@ else
return SCPE_OK; return SCPE_OK;
} }
static t_stat sim_set_rem_bufsize (int32 flag, CONST char *cptr)
{
char cmdbuf[CBUFSIZE];
int32 bufsize;
t_stat r;
if (cptr == NULL)
return SCPE_ARG;
bufsize = (int32) get_uint (cptr, 10, 32768, &r);
if (r != SCPE_OK)
return r;
if (bufsize < 1400)
return sim_messagef (SCPE_ARG, "%d is too small. Minimum size is 1400\n", bufsize);
sprintf(cmdbuf, "BUFFERED=%d", bufsize);
return tmxr_open_master (&sim_rem_con_tmxr, cmdbuf); /* open master socket */
}
/* Enable or disable Remote Console master mode */ /* Enable or disable Remote Console master mode */
/* In master mode, commands are subsequently processed from the /* In master mode, commands are subsequently processed from the