[Ttssh2-commit] [5037] Dropbear 相手に SCP 送信がうまくいかないことがある問題を修正

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2012年 10月 14日 (日) 00:19:32 JST


Revision: 5037
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5037
Author:   maya
Date:     2012-10-14 00:19:32 +0900 (Sun, 14 Oct 2012)
Log Message:
-----------
Dropbear 相手に SCP 送信がうまくいかないことがある問題を修正
  http://sourceforge.jp/ticket/browse.php?group_id=1412&tid=29792
  ファイルからの読み取りバイト数を決めるのに、リモート側の空きウインドウサイズを考慮するようにした

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/ssh.c

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c	2012-10-13 13:38:51 UTC (rev 5036)
+++ trunk/ttssh2/ttxssh/ssh.c	2012-10-13 15:19:32 UTC (rev 5037)
@@ -7664,7 +7664,7 @@
 	DWORD stime;
 	int elapsed, prev_elapsed;
 
-	buflen = 8192*4;
+	buflen = min(c->remote_window, 8192*4); // max 32KB
 	buf = malloc(buflen);
 
 	//SendMessage(GetDlgItem(hWnd, IDC_FILENAME), WM_SETTEXT, 0, (LPARAM)c->scp.localfile);
@@ -7676,15 +7676,19 @@
 	prev_elapsed = 0;
 
 	do {
+		int readlen, count=0;
+
 		// Cancel\x83{\x83^\x83\x93\x82\xAA\x89\x9F\x89\xBA\x82\xB3\x82ꂽ\x82\xE7\x83E\x83B\x83\x93\x83h\x83E\x82\xAA\x8F\xC1\x82\xA6\x82\xE9\x81B
 		if (is_canceled_window(hWnd))
 			goto cancel_abort;
 
 		// \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE7\x93ǂݍ\x9E\x82񂾃f\x81[\x83^\x82͂\xA9\x82Ȃ炸\x83T\x81[\x83o\x82֑\x97\x90M\x82\xB7\x82\xE9\x81B
-		ret = fread(buf, 1, buflen, c->scp.localfp);
+		readlen = max(4096, min(buflen, c->remote_window)); // min 4KB
+		ret = fread(buf, 1, readlen, c->scp.localfp);
 		if (ret == 0)
 			break;
 
+		// remote_window \x82\xAA\x89񕜂\xB7\x82\xE9\x82܂ő҂\xC2
 		do {
 			// socket or channel\x82\xAA\x83N\x83\x8D\x81[\x83Y\x82\xB3\x82ꂽ\x82\xE7\x83X\x83\x8C\x83b\x83h\x82\xF0\x8FI\x82\xED\x82\xE9
 			if (pvar->socket == INVALID_SOCKET || c->scp.state == SCP_CLOSING || c->used == 0)
@@ -7694,6 +7698,12 @@
 				Sleep(100);
 			}
 
+			// 100\x89񔲂\xAF\x82\xE7\x82\xEA\x82Ȃ\xA9\x82\xC1\x82\xBD\x82甲\x82\xAF\x82Ă\xB5\x82܂\xA4
+			count++;
+			if (count > 100) {
+				break;
+			}
+
 		} while (ret > c->remote_window);
 
 		// sending data



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