From 863245f09fb765ad088589860a619f7f0cf0778f Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Thu, 26 Nov 2020 00:09:47 -0800 Subject: [PATCH] Read/set socket options from [sockopts] section of sexpots.ini Only in Socket I/O mode. This will allow us to tweak the SNDBUF size (to account for slow ZMODEM downloads - sends from sexyz) and frob other socket knobs. Also added a line feed to Windows OutputDebugString() messages since MSVC's debug log viewer now assumes that you will. --- src/sbbs3/sexyz.c | 109 ++++++++++++++++++++++++---------------------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c index ee1c77a52d..3d5341932a 100644 --- a/src/sbbs3/sexyz.c +++ b/src/sbbs3/sexyz.c @@ -190,7 +190,7 @@ static int lputs(void* unused, int level, const char* str) #if defined(_WIN32) && defined(_DEBUG) if(log_level==LOG_DEBUG) { char dbgstr[1024]; - SAFEPRINTF(dbgstr, "SEXYZ: %s", str); + SAFEPRINTF(dbgstr, "SEXYZ: %s\n", str); OutputDebugString(dbgstr); } #endif @@ -1528,6 +1528,7 @@ int main(int argc, char **argv) BOOL tcp_nodelay; char compiler[32]; BOOL telnet_requested=FALSE; + str_list_t ini = strListInit(); str_list_t fname_list; fname_list=strListInit(); @@ -1562,68 +1563,68 @@ int main(int argc, char **argv) *p=0; if((p=getfext(fname))!=NULL) *p=0; - strcat(fname,".ini"); + SAFECAT(fname,".ini"); iniFileName(ini_fname,sizeof(ini_fname),str,fname); - if((fp=fopen(ini_fname,"r"))!=NULL) + if((fp=fopen(ini_fname,"r"))!=NULL) { fprintf(statfp,"Reading %s\n",ini_fname); + ini = iniReadFile(fp); + fclose(fp); + } - tcp_nodelay =iniReadBool(fp,ROOT_SECTION,"TCP_NODELAY",TRUE); + tcp_nodelay =iniGetBool(ini, ROOT_SECTION,"TCP_NODELAY",TRUE); - telnet =iniReadBool(fp,ROOT_SECTION,"Telnet",TRUE); - debug_tx =iniReadBool(fp,ROOT_SECTION,"DebugTx",FALSE); - debug_rx =iniReadBool(fp,ROOT_SECTION,"DebugRx",FALSE); - debug_telnet =iniReadBool(fp,ROOT_SECTION,"DebugTelnet",FALSE); + telnet =iniGetBool(ini, ROOT_SECTION,"Telnet",TRUE); + debug_tx =iniGetBool(ini, ROOT_SECTION,"DebugTx",FALSE); + debug_rx =iniGetBool(ini, ROOT_SECTION,"DebugRx",FALSE); + debug_telnet =iniGetBool(ini, ROOT_SECTION,"DebugTelnet",FALSE); - pause_on_exit =iniReadBool(fp,ROOT_SECTION,"PauseOnExit",FALSE); - pause_on_abend =iniReadBool(fp,ROOT_SECTION,"PauseOnAbend",FALSE); + pause_on_exit =iniGetBool(ini, ROOT_SECTION,"PauseOnExit",FALSE); + pause_on_abend =iniGetBool(ini, ROOT_SECTION,"PauseOnAbend",FALSE); - log_level =iniReadLogLevel(fp,ROOT_SECTION,"LogLevel",log_level); - use_syslog =iniReadBool(fp,ROOT_SECTION,"SysLog",use_syslog); + log_level =iniGetLogLevel(ini, ROOT_SECTION,"LogLevel",log_level); + use_syslog =iniGetBool(ini, ROOT_SECTION,"SysLog",use_syslog); - outbuf.highwater_mark =(ulong)iniReadBytes(fp,ROOT_SECTION,"OutbufHighwaterMark",1,1100); - outbuf_drain_timeout =iniReadInteger(fp,ROOT_SECTION,"OutbufDrainTimeout",10); - outbuf_size =(ulong)iniReadBytes(fp,ROOT_SECTION,"OutbufSize",1,16*1024); + outbuf.highwater_mark =(ulong)iniGetBytes(ini, ROOT_SECTION,"OutbufHighwaterMark",1,1100); + outbuf_drain_timeout =iniGetInteger(ini, ROOT_SECTION,"OutbufDrainTimeout",10); + outbuf_size =(ulong)iniGetBytes(ini, ROOT_SECTION,"OutbufSize",1,16*1024); - progress_interval =iniReadInteger(fp,ROOT_SECTION,"ProgressInterval",1); - max_file_size =iniReadBytes(fp,ROOT_SECTION,"MaxFileSize",/* unit: */1,MAX_FILE_SIZE); + progress_interval =iniGetInteger(ini, ROOT_SECTION,"ProgressInterval",1); + max_file_size =iniGetBytes(ini, ROOT_SECTION,"MaxFileSize",/* unit: */1,MAX_FILE_SIZE); - if(iniReadBool(fp,ROOT_SECTION,"Debug",FALSE)) + if(iniGetBool(ini, ROOT_SECTION,"Debug",FALSE)) log_level=LOG_DEBUG; - xm.send_timeout =iniReadInteger(fp,"Xmodem","SendTimeout",xm.send_timeout); /* seconds */ - xm.recv_timeout =iniReadInteger(fp,"Xmodem","RecvTimeout",xm.recv_timeout); /* seconds */ - xm.byte_timeout =iniReadInteger(fp,"Xmodem","ByteTimeout",xm.byte_timeout); /* seconds */ - xm.ack_timeout =iniReadInteger(fp,"Xmodem","AckTimeout",xm.ack_timeout); /* seconds */ - xm.block_size =(ulong)iniReadBytes(fp,"Xmodem","BlockSize",1,xm.block_size); /* 128 or 1024 */ - xm.max_block_size =(ulong)iniReadBytes(fp,"Xmodem","MaxBlockSize",1,xm.max_block_size); /* 128 or 1024 */ - xm.max_errors =iniReadInteger(fp,"Xmodem","MaxErrors",xm.max_errors); - xm.g_delay =iniReadInteger(fp,"Xmodem","G_Delay",xm.g_delay); - xm.crc_mode_supported =iniReadBool(fp,"Xmodem","SendCRC",xm.crc_mode_supported); - xm.g_mode_supported =iniReadBool(fp,"Xmodem","SendG",xm.g_mode_supported); - - xm.fallback_to_xmodem =iniReadInteger(fp,"Ymodem","FallbackToXmodem", xm.fallback_to_xmodem); - - zm.init_timeout =iniReadInteger(fp,"Zmodem","InitTimeout",zm.init_timeout); /* seconds */ - zm.send_timeout =iniReadInteger(fp,"Zmodem","SendTimeout",zm.send_timeout); /* seconds */ - zm.recv_timeout =iniReadInteger(fp,"Zmodem","RecvTimeout",zm.recv_timeout); /* seconds */ - zm.crc_timeout =iniReadInteger(fp,"Zmodem","CrcTimeout",zm.crc_timeout); /* seconds */ - zm.block_size =(ulong)iniReadBytes(fp,"Zmodem","BlockSize",1,zm.block_size); /* 1024 */ - zm.max_block_size =(ulong)iniReadBytes(fp,"Zmodem","MaxBlockSize",1,zm.max_block_size); /* 1024 or 8192 */ - zm.max_errors =iniReadInteger(fp,"Zmodem","MaxErrors",zm.max_errors); - zm.recv_bufsize =(ulong)iniReadBytes(fp,"Zmodem","RecvBufSize",1,0); - zm.no_streaming =!iniReadBool(fp,"Zmodem","Streaming",TRUE); - zm.want_fcs_16 =!iniReadBool(fp,"Zmodem","CRC32",TRUE); - zm.escape_telnet_iac =iniReadBool(fp,"Zmodem","EscapeTelnetIAC",TRUE); - zm.escape_8th_bit =iniReadBool(fp,"Zmodem","Escape8thBit",FALSE); - zm.escape_ctrl_chars =iniReadBool(fp,"Zmodem","EscapeCtrlChars",FALSE); - - dszlog_path =iniReadBool(fp,"DSZLOG","Path",TRUE); - dszlog_short =iniReadBool(fp,"DSZLOG","Short",FALSE); - dszlog_quotes =iniReadBool(fp,"DSZLOG","Quotes",FALSE); - - if(fp!=NULL) - fclose(fp); + xm.send_timeout =iniGetInteger(ini, "Xmodem","SendTimeout",xm.send_timeout); /* seconds */ + xm.recv_timeout =iniGetInteger(ini, "Xmodem","RecvTimeout",xm.recv_timeout); /* seconds */ + xm.byte_timeout =iniGetInteger(ini, "Xmodem","ByteTimeout",xm.byte_timeout); /* seconds */ + xm.ack_timeout =iniGetInteger(ini, "Xmodem","AckTimeout",xm.ack_timeout); /* seconds */ + xm.block_size =(ulong)iniGetBytes(ini, "Xmodem","BlockSize",1,xm.block_size); /* 128 or 1024 */ + xm.max_block_size =(ulong)iniGetBytes(ini, "Xmodem","MaxBlockSize",1,xm.max_block_size); /* 128 or 1024 */ + xm.max_errors =iniGetInteger(ini, "Xmodem","MaxErrors",xm.max_errors); + xm.g_delay =iniGetInteger(ini, "Xmodem","G_Delay",xm.g_delay); + xm.crc_mode_supported =iniGetBool(ini, "Xmodem","SendCRC",xm.crc_mode_supported); + xm.g_mode_supported =iniGetBool(ini, "Xmodem","SendG",xm.g_mode_supported); + + xm.fallback_to_xmodem =iniGetInteger(ini, "Ymodem","FallbackToXmodem", xm.fallback_to_xmodem); + + zm.init_timeout =iniGetInteger(ini, "Zmodem","InitTimeout",zm.init_timeout); /* seconds */ + zm.send_timeout =iniGetInteger(ini, "Zmodem","SendTimeout",zm.send_timeout); /* seconds */ + zm.recv_timeout =iniGetInteger(ini, "Zmodem","RecvTimeout",zm.recv_timeout); /* seconds */ + zm.crc_timeout =iniGetInteger(ini, "Zmodem","CrcTimeout",zm.crc_timeout); /* seconds */ + zm.block_size =(ulong)iniGetBytes(ini, "Zmodem","BlockSize",1,zm.block_size); /* 1024 */ + zm.max_block_size =(ulong)iniGetBytes(ini, "Zmodem","MaxBlockSize",1,zm.max_block_size); /* 1024 or 8192 */ + zm.max_errors =iniGetInteger(ini, "Zmodem","MaxErrors",zm.max_errors); + zm.recv_bufsize =(ulong)iniGetBytes(ini, "Zmodem","RecvBufSize",1,0); + zm.no_streaming =!iniGetBool(ini, "Zmodem","Streaming",TRUE); + zm.want_fcs_16 =!iniGetBool(ini, "Zmodem","CRC32",TRUE); + zm.escape_telnet_iac =iniGetBool(ini, "Zmodem","EscapeTelnetIAC",TRUE); + zm.escape_8th_bit =iniGetBool(ini, "Zmodem","Escape8thBit",FALSE); + zm.escape_ctrl_chars =iniGetBool(ini, "Zmodem","EscapeCtrlChars",FALSE); + + dszlog_path =iniGetBool(ini, "DSZLOG","Path",TRUE); + dszlog_short =iniGetBool(ini, "DSZLOG","Short",FALSE); + dszlog_quotes =iniGetBool(ini, "DSZLOG","Quotes",FALSE); if(zm.recv_bufsize > 0xffff) zm.recv_bufsize = 0xffff; @@ -1887,8 +1888,10 @@ int main(int argc, char **argv) #ifdef __unix__ if(!stdio) { #endif - lprintf(LOG_DEBUG,"Setting TCP_NODELAY to %d",tcp_nodelay); - (void)setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,(char*)&tcp_nodelay,sizeof(tcp_nodelay)); + char error[256] = ""; + lprintf(LOG_DEBUG, "Setting socket options"); + if(iniGetSocketOptions(ini, "sockopts", sock, error, sizeof(error)) != 0) + lprintf(LOG_ERR, "ERROR %s", error); #ifdef __unix__ } #endif -- GitLab