svnno****@sourc*****
svnno****@sourc*****
2009年 4月 20日 (月) 18:00:35 JST
Revision: 3333 http://svn.sourceforge.jp/view?root=ttssh2&view=rev&rev=3333 Author: doda Date: 2009-04-20 18:00:35 +0900 (Mon, 20 Apr 2009) Log Message: ----------- sshæ¥ç¶æã¾ãã¯telnetã³ãã³ããæ¤åºããæç¹ã§ãããã¡ãªã³ã°ããããããã«ããã Modified Paths: -------------- trunk/TTXSamples/TTXOutputBuffering/ReadMe-ja.txt trunk/TTXSamples/TTXOutputBuffering/TTXOutputBuffering.c -------------- next part -------------- Modified: trunk/TTXSamples/TTXOutputBuffering/ReadMe-ja.txt =================================================================== --- trunk/TTXSamples/TTXOutputBuffering/ReadMe-ja.txt 2009-04-19 03:17:15 UTC (rev 3332) +++ trunk/TTXSamples/TTXOutputBuffering/ReadMe-ja.txt 2009-04-20 09:00:35 UTC (rev 3333) @@ -10,6 +10,9 @@ line at a time[hðÀ»µÜ·B oO: - íÉsÉM·éB - »Ì¼¢ÁÏ¢ èB - µÉìÁÄݽƢ¤xÅAípÉÍϦȢŵå¤B + obt@©çì꽶ÍÌÄçêÜ·B + ³ø»·éÌobt@tbV ÅAµ«êÈ©Á½ªàÌÄçêÜ·B + »Ì¼Éཪ¢ÁÏ¢ èB + µÉìÁÄݽƢ¤xÅAípÉÍϦȢŵå¤c + ÆvÁĢܵ½ªAsshÚ±/tlenetR}hoųøÉÈéæ¤É + µ½½ßAüêÁÏȵÅàÈñÆ©Èé©àµêܹñB Modified: trunk/TTXSamples/TTXOutputBuffering/TTXOutputBuffering.c =================================================================== --- trunk/TTXSamples/TTXOutputBuffering/TTXOutputBuffering.c 2009-04-19 03:17:15 UTC (rev 3332) +++ trunk/TTXSamples/TTXOutputBuffering/TTXOutputBuffering.c 2009-04-20 09:00:35 UTC (rev 3333) @@ -15,8 +15,9 @@ PTTSet ts; PComVar cv; Tsend origPsend; + BOOL enable; + int buff_used; char buff[BUFF_SIZE]; - int buff_used; } TInstVar; typedef TInstVar FAR * PTInstVar; @@ -31,43 +32,83 @@ pvar->cv = cv; pvar->origPsend = NULL; pvar->buff_used = 0; + pvar->enable = TRUE; } // // TTXSend -- L[üÍ // static int PASCAL FAR TTXsend(SOCKET s, const char FAR *buf, int len, int flags) { - int i, wlen; + int i, j, wlen; - if (len > 0) { - for (i=0; i<len; i++) { - switch (buf[i]) { - case '\n': - if (pvar->buff_used < BUFF_SIZE) - pvar->buff[pvar->buff_used++] = '\n'; + if (len > 0 && pvar->enable) { + if (pvar->cv->isSSH || pvar->cv->TelFlag) { + for (i=0; i<10; i++) { wlen = pvar->origPsend(s, pvar->buff, pvar->buff_used, flags); - if (wlen > 0 && wlen < pvar->buff_used) { - pvar->buff_used -= wlen; - memmove(pvar->buff, &(pvar->buff[wlen]), pvar->buff_used); + if (wlen < pvar->buff_used) { + if (wlen > 0) { + pvar->buff_used -= wlen; + memmove(pvar->buff, &(pvar->buff[wlen]), pvar->buff_used); + } } else { + break; + } + } + pvar->enable = FALSE; + return pvar->origPsend(s, buf, len, flags); + } + else { + for (i=0; i<len; i++) { + switch (buf[i]) { + case '\n': + if (pvar->buff_used < BUFF_SIZE) + pvar->buff[pvar->buff_used++] = '\n'; + wlen = pvar->origPsend(s, pvar->buff, pvar->buff_used, flags); + pvar->buff_used -= wlen; + if (wlen > 0 && wlen < pvar->buff_used) { + memmove(pvar->buff, &(pvar->buff[wlen]), pvar->buff_used); + } + break; + case 0x08: // ^H + if (pvar->buff_used > 0) + pvar->buff_used--; + break; + case 0x15: // ^U pvar->buff_used = 0; + break; + case 0xff: // IAC + for (j=0; j<10; j++) { + wlen = pvar->origPsend(s, pvar->buff, pvar->buff_used, flags); + if (wlen < pvar->buff_used) { + if (wlen > 0) { + pvar->buff_used -= wlen; + memmove(pvar->buff, &(pvar->buff[wlen]), pvar->buff_used); + } + } + else { + break; + } + } + if (i < pvar->buff_used) { + wlen = i; + } + else { + wlen = i - pvar->buff_used; + } + pvar->enable = FALSE; + return wlen + pvar->origPsend(s, buf + wlen, len - wlen, flags); + default: + if (pvar->buff_used < BUFF_SIZE) + pvar->buff[pvar->buff_used++] = buf[i]; + break; } - break; - case 0x08: // ^H - if (pvar->buff_used > 0) - pvar->buff_used--; - break; - case 0x15: // ^U - pvar->buff_used = 0; - break; - default: - if (pvar->buff_used < BUFF_SIZE) - pvar->buff[pvar->buff_used++] = buf[i]; - break; } } } + else { + return pvar->origPsend(s, buf, len, flags); + } return len; }