diff --git a/src/sbbs3/download.cpp b/src/sbbs3/download.cpp index 1cb0316d454fcbfd68ce2444ab46cb32f43d887c..031097d56399a771b89506e231abcb9f051ed945 100644 --- a/src/sbbs3/download.cpp +++ b/src/sbbs3/download.cpp @@ -101,6 +101,24 @@ const char* sbbs_t::protcmdline(prot_t* prot, enum XFER_TYPE type) return("invalid transfer type"); } +void sbbs_t::data_transfer_begin(void) +{ + sys_status|=SS_FILEXFER; /* disable spy during file xfer */ + /* enable telnet binary transmission in both directions */ + request_telnet_opt(TELNET_DO,TELNET_BINARY_TX); + request_telnet_opt(TELNET_WILL,TELNET_BINARY_TX); + console |= CON_RAW_IN; +} + +void sbbs_t::data_transfer_end(void) +{ + sys_status&=~SS_FILEXFER; + /* Got back to Text/NVT mode */ + request_telnet_opt(TELNET_DONT,TELNET_BINARY_TX); + request_telnet_opt(TELNET_WONT,TELNET_BINARY_TX); + console &= ~CON_RAW_IN; +} + /****************************************************************************/ /* Handles start and stop routines for transfer protocols */ /****************************************************************************/ @@ -143,19 +161,11 @@ int sbbs_t::protocol(prot_t* prot, enum XFER_TYPE type cmdline=cmdstr(protcmdline(prot,type), fpath, fspec, NULL, ex_mode); SAFEPRINTF(msg,"Transferring %s",cmdline); spymsg(msg); - sys_status|=SS_FILEXFER; /* disable spy during file xfer */ - /* enable telnet binary transmission in both directions */ - request_telnet_opt(TELNET_DO,TELNET_BINARY_TX); - request_telnet_opt(TELNET_WILL,TELNET_BINARY_TX); - + data_transfer_begin(); time_t start = time(NULL); i=external(cmdline,ex_mode,p); time_t end = time(NULL); - /* Got back to Text/NVT mode */ - request_telnet_opt(TELNET_DONT,TELNET_BINARY_TX); - request_telnet_opt(TELNET_WONT,TELNET_BINARY_TX); - - sys_status&=~SS_FILEXFER; + data_transfer_end(); // Save DSZLOG to logfile if((stream=fnopen(NULL,protlog,O_RDONLY))!=NULL) { diff --git a/src/sbbs3/inkey.cpp b/src/sbbs3/inkey.cpp index ec45bb1c57a43cecfcc4c0c701ebd6ca1ea83ff9..f3c3ae96a354456474c9471d129da4c06b21338b 100644 --- a/src/sbbs3/inkey.cpp +++ b/src/sbbs3/inkey.cpp @@ -40,8 +40,6 @@ int sbbs_t::kbincom(unsigned int timeout) } ch = incom(timeout); - if(ch != NOINP) - ch = translate_input(ch); return ch; } @@ -86,7 +84,7 @@ int sbbs_t::translate_input(int ch) return ch; } -void sbbs_t::translate_input(char* buf, size_t len) +void sbbs_t::translate_input(uchar* buf, size_t len) { for(size_t i =0; i < len; i++) buf[i] = translate_input(buf[i]); diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 044767cbb1706fc32aed8897a4777566b678ed9d..bf19a832d5a0c45d6cbe8e1dd5280041ef0b191e 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -2131,6 +2131,9 @@ void input_thread(void *arg) if(wr > (int)sizeof(telbuf)) lprintf(LOG_ERR,"!TELBUF OVERFLOW (%d>%d)",wr,(int)sizeof(telbuf)); + if(!(sbbs->console & CON_RAW_IN)) + sbbs->translate_input(wrbuf, wr); + if(sbbs->passthru_socket_active == true) { BOOL writable = FALSE; if(socket_check(sbbs->passthru_socket, NULL, &writable, 1000) && writable) diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index 600be5a12cd20651b568520b3d6bdaa25892adc1..dc6f5d345b2c9b4dcfdb218534bea88bc8b9d205 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -449,7 +449,7 @@ public: int incom(unsigned int timeout=0); // receive character int kbincom(unsigned int timeout=0); // " " or return keyboard buffer int translate_input(int ch); - void translate_input(char* buf, size_t); + void translate_input(uchar* buf, size_t); void spymsg(const char *msg); // send message to active spies @@ -1053,6 +1053,8 @@ public: bool bulkupload(uint dirnum); /* download.cpp */ + void data_transfer_begin(void); + void data_transfer_end(void); void downloadedfile(file_t* f); void notdownloaded(off_t size, time_t elapsed); void downloadedbytes(off_t size, time_t elapsed); diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 11ea36c005e7ee8e85663994716688830234592e..731a11350821d7e0b689b1167b8c1cd6722ea400 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -418,7 +418,6 @@ typedef enum { /* Values for xtrn_t.event */ #define XTRN_UART (1<<25) /* Enable the virtual UART driver */ #define XTRN_FOSSIL (1<<26) /* Enable the int14h/FOSSIL driver */ #define XTRN_NODISPLAY (1<<27) /* Disable local screen/display */ -#define XTRN_COOKEDINP (1<<28) /* Perform keyboard input translations */ #define XTRN_CONIO (1<<31) /* Intercept Windows Console I/O (Drwy) */ /* Bits in user.qwk */ @@ -753,7 +752,6 @@ enum { /* readmail and delmailidx which types */ #define EX_UART XTRN_UART #define EX_FOSSIL XTRN_FOSSIL #define EX_NODISPLAY XTRN_NODISPLAY -#define EX_COOKEDINP XTRN_COOKEDINP #define EX_NOLOG (1<<30) /* Don't log intercepted stdio */ #define EX_CONIO (1<<31) /* Intercept Windows console I/O (doorway) */ #define EX_UNSPECIFIED -1