svnno****@sourc*****
svnno****@sourc*****
2015年 12月 22日 (火) 21:28:21 JST
Revision: 6219 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6219 Author: doda Date: 2015-12-22 21:28:20 +0900 (Tue, 22 Dec 2015) Log Message: ----------- XMODEM のオプション指定の挙動を修正 [Ttssh2-devel 2814] ・checksum での受信時に相手が 1k なパケットを送ってきた場合は checksum/1k として扱うようにした ・送信オプションで CRC を指定した時、相手からの NAK で checksum に fallback するようにした ・送信オプション 1k 指定時に相手からの NAK で chesksum/1k に fallback した時、 ダイアログでの表示を XMODEM (1k*) に変更するようにした Modified Paths: -------------- trunk/teraterm/common/tttypes.h trunk/teraterm/ttpfile/xmodem.c trunk/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2015-12-21 13:56:21 UTC (rev 6218) +++ trunk/teraterm/common/tttypes.h 2015-12-22 12:28:20 UTC (rev 6219) @@ -167,9 +167,10 @@ #define IdNamedPipe 4 /* XMODEM option */ -#define XoptCheck 1 -#define XoptCRC 2 -#define Xopt1K 3 +#define XoptCheck 1 +#define XoptCRC 2 +#define Xopt1kCRC 3 +#define Xopt1kCksum 4 /* YMODEM option */ #define Yopt1K 1 Modified: trunk/teraterm/ttpfile/xmodem.c =================================================================== --- trunk/teraterm/ttpfile/xmodem.c 2015-12-21 13:56:21 UTC (rev 6218) +++ trunk/teraterm/ttpfile/xmodem.c 2015-12-22 12:28:20 UTC (rev 6219) @@ -83,11 +83,16 @@ xv->DataLen = 128; xv->CheckLen = 2; break; - case Xopt1K: /* 1K */ - strncat_s(Tmp, sizeof(Tmp), "1K)", _TRUNCATE); + case Xopt1kCRC: /* 1k */ + strncat_s(Tmp, sizeof(Tmp), "1k)", _TRUNCATE); xv->DataLen = 1024; xv->CheckLen = 2; break; + case Xopt1kCksum: /* 1k with Checksum (unofficial) */ + strncat_s(Tmp, sizeof(Tmp), "1k*)", _TRUNCATE); + xv->DataLen = 1024; + xv->CheckLen = 1; + break; } SetDlgItemText(fv->HWin, IDC_PROTOPROT, Tmp); } @@ -263,13 +268,18 @@ if (b == SOH) { xv->PktIn[0] = b; xv->PktReadMode = XpktBLK; - if (xv->XOpt == Xopt1K) + if (xv->XOpt == Xopt1kCRC) XSetOpt(fv, xv, XoptCRC); + else if (xv->XOpt == Xopt1kCksum) + XSetOpt(fv, xv, XoptCheck); FTSetTimeOut(fv, xv->TOutShort); } else if (b == STX) { xv->PktIn[0] = b; xv->PktReadMode = XpktBLK; - XSetOpt(fv, xv, Xopt1K); + if (xv->XOpt == XoptCRC) + XSetOpt(fv, xv, Xopt1kCRC); + else if (xv->XOpt == XoptCheck) + XSetOpt(fv, xv, Xopt1kCksum); FTSetTimeOut(fv, xv->TOutShort); } else if (b == EOT) { b = ACK; @@ -406,11 +416,15 @@ } break; case NAK: - if (xv->PktNum == 0 && xv->XOpt == Xopt1K) { - /* we wanted 1k with CRC, but the other end specified checksum */ - /* keep the 1k block, but move back to checksum mode. */ - xv->XOpt = XoptCheck; - xv->CheckLen = 1; + if (xv->PktNum == 0) { + if (xv->XOpt == XoptCRC) { + // receiver wants to use checksum. + XSetOpt(fv, xv, XoptCheck); + } else if (xv->XOpt == Xopt1kCRC) { + /* we wanted 1k with CRC, but the other end specified checksum */ + /* keep the 1k block, but move back to checksum mode. */ + XSetOpt(fv, xv, Xopt1kCksum); + } } SendFlag = TRUE; break; Modified: trunk/teraterm/ttpset/ttset.c =================================================================== --- trunk/teraterm/ttpset/ttset.c 2015-12-21 13:56:21 UTC (rev 6218) +++ trunk/teraterm/ttpset/ttset.c 2015-12-22 12:28:20 UTC (rev 6219) @@ -1076,7 +1076,7 @@ if (_stricmp(Temp, "crc") == 0) ts->XmodemOpt = XoptCRC; else if (_stricmp(Temp, "1k") == 0) - ts->XmodemOpt = Xopt1K; + ts->XmodemOpt = Xopt1kCRC; else ts->XmodemOpt = XoptCheck; @@ -2475,7 +2475,8 @@ case XoptCRC: strncpy_s(Temp, sizeof(Temp), "crc", _TRUNCATE); break; - case Xopt1K: + case Xopt1kCRC: + case Xopt1kCksum: /* Checksum/1k \x82͐\xB3\x8BK\x82̕\xA8\x82ł͂Ȃ\xA2\x88ׁA\x90ݒ\xE8\x95ۑ\xB6\x8E\x9E\x82\xCD CRC/1k \x82Ƃ\xB7\x82\xE9 */ strncpy_s(Temp, sizeof(Temp), "1k", _TRUNCATE); break; default: