[Ttssh2-commit] [3333] ssh接続時またはtelnetコマンドを検出した時点でバッファリングをやめるようにした。

Back to archive index

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
 
 ƒoƒO:
-  í‚ɍs–ˆ‚É‘—M‚·‚éB
-  ‚»‚Ì‘¼‚¢‚Á‚Ï‚¢‚ ‚èB
-  ŽŽ‚µ‚ɍì‚Á‚Ä‚Ý‚½‚Æ‚¢‚¤ƒŒƒxƒ‹‚ŁAí—p‚É‚Í‘Ï‚¦‚È‚¢‚Å‚µ‚傤B
+  ƒoƒbƒtƒ@‚©‚çˆì‚ꂽ•¶Žš‚ÍŽÌ‚Ä‚ç‚ê‚Ü‚·B
+  –³Œø‰»‚·‚鎞‚̃oƒbƒtƒ@ƒtƒ‰ƒbƒVƒ…‚ŁA‚µ‚«‚ê‚È‚©‚Á‚½•ª‚àŽÌ‚Ä‚ç‚ê‚Ü‚·B
+  ‚»‚Ì‘¼‚É‚à‘½•ª‚¢‚Á‚Ï‚¢‚ ‚èB
+  ŽŽ‚µ‚ɍì‚Á‚Ä‚Ý‚½‚Æ‚¢‚¤ƒŒƒxƒ‹‚ŁAí—p‚É‚Í‘Ï‚¦‚È‚¢‚Å‚µ‚傤c
+  ‚ÆŽv‚Á‚Ä‚¢‚Ü‚µ‚½‚ªAsshÚ‘±Žž/tlenetƒRƒ}ƒ“ƒhŒŸo‚Å–³Œø‚É‚È‚é‚悤‚É
+  ‚µ‚½‚½‚߁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;
 }



Ttssh2-commit メーリングリストの案内
Back to archive index