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\x82f\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