diff --git a/src/sbbs3/answer.cpp b/src/sbbs3/answer.cpp index 7c2ce8e9e1f3edca66c74576331732c608411c78..9bfd2221fc69815b4f89af0761466bd7a137a1a3 100644 --- a/src/sbbs3/answer.cpp +++ b/src/sbbs3/answer.cpp @@ -183,6 +183,9 @@ bool sbbs_t::answer() request_telnet_opt(TELNET_DO,TELNET_TERM_SPEED); request_telnet_opt(TELNET_DO,TELNET_SEND_LOCATION); request_telnet_opt(TELNET_DO,TELNET_NEGOTIATE_WINDOW_SIZE); +#ifdef SBBS_TELNET_ENVIRON_SUPPORT + request_telnet_opt(TELNET_DO,TELNET_NEW_ENVIRON); +#endif } #ifdef USE_CRYPTLIB if(sys_status&SS_SSH) { diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index b062b70fadaf1582de631a7a3473fd2a40e3fe26..153d8ac7b8f29145f402bc904a986f036ec185a6 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2012 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -1301,19 +1301,22 @@ static BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen, ,speed); sbbs->cur_rate=atoi(speed); sbbs->cur_cps=sbbs->cur_rate/10; -#if 0 +#ifdef SBBS_TELNET_ENVIRON_SUPPORT } else if(option==TELNET_NEW_ENVIRON && sbbs->telnet_cmd[3]==TELNET_ENVIRON_IS) { BYTE* p; BYTE* end=sbbs->telnet_cmd+(sbbs->telnet_cmdlen-2); for(p=sbbs->telnet_cmd+4; p < end; ) { - if(*p==TELNET_ENVIRON_VAR || *p==TELNET_ENVIRON_USERVAR) { + if(*p==TELNET_ENVIRON_VAR) { + char tmp[128]; p++; - lprintf(LOG_DEBUG,"Node %d %s telnet environment var/val: %.*s" + c_escape_str((char*)p,tmp,sizeof(tmp),TRUE); + lprintf(LOG_DEBUG,"Node %d %s telnet environment var/val: %.*s (%s)" ,sbbs->cfg.node_num ,sbbs->telnet_mode&TELNET_MODE_GATE ? "passed-through" : "received" ,end-p - ,p); + ,p + ,tmp); p+=strlen((char*)p); } else p++; @@ -1342,10 +1345,11 @@ static BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen, sbbs->cols=cols; } else if(startup->options&BBS_OPT_DEBUG_TELNET) - lprintf(LOG_DEBUG,"Node %d %s unsupported telnet sub-negotiation cmd: %s" + lprintf(LOG_DEBUG,"Node %d %s unsupported telnet sub-negotiation cmd: %s, 0x%02X" ,sbbs->cfg.node_num ,sbbs->telnet_mode&TELNET_MODE_GATE ? "passed-through" : "received" - ,telnet_opt_desc(option)); + ,telnet_opt_desc(option) + ,sbbs->telnet_cmd[3]); sbbs->telnet_cmdlen=0; } } @@ -1386,6 +1390,9 @@ static BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen, case TELNET_SUP_GA: case TELNET_NEGOTIATE_WINDOW_SIZE: case TELNET_SEND_LOCATION: +#ifdef SBBS_TELNET_ENVIRON_SUPPORT + case TELNET_NEW_ENVIRON: +#endif sbbs->telnet_remote_option[option]=command; sbbs->send_telnet_cmd(telnet_opt_ack(command),option); break; @@ -1420,14 +1427,14 @@ static BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen, ,TELNET_IAC,TELNET_SE); sbbs->putcom(buf,6); } -#if 0 +#ifdef SBBS_TELNET_ENVIRON_SUPPORT else if(command==TELNET_WILL && option==TELNET_NEW_ENVIRON) { if(startup->options&BBS_OPT_DEBUG_TELNET) lprintf(LOG_DEBUG,"Node %d requesting USER environment variable value" ,sbbs->cfg.node_num); char buf[64]; - int len=sprintf(buf,"%c%c%c%c%cUSER%c%c" + int len=sprintf(buf,"%c%c%c%c%c%c%c" ,TELNET_IAC,TELNET_SB ,TELNET_NEW_ENVIRON,TELNET_ENVIRON_SEND,TELNET_ENVIRON_VAR ,TELNET_IAC,TELNET_SE); @@ -2793,8 +2800,6 @@ void event_thread(void* arg) node.status=NODE_EVENT_RUNNING; sbbs->putnodedat(sbbs->cfg.event[i]->node,&node); } - strcpy(str,sbbs->cfg.event[i]->code); - eprintf(LOG_INFO,"Running timed event: %s",strupr(str)); int ex_mode = EX_OFFLINE; if(!(sbbs->cfg.event[i]->misc&EVENT_EXCL) && sbbs->cfg.event[i]->misc&EX_BG) @@ -2803,6 +2808,11 @@ void event_thread(void* arg) ex_mode |= EX_SH; ex_mode|=(sbbs->cfg.event[i]->misc&EX_NATIVE); sbbs->online=ON_LOCAL; + strcpy(str,sbbs->cfg.event[i]->code); + eprintf(LOG_INFO,"Running %s%stimed event: %s" + ,(ex_mode&EX_NATIVE) ? "native ":"" + ,(ex_mode&EX_BG) ? "background ":"" + ,strupr(str)); { int result= sbbs->external(