[Ttssh2-commit] [6219] XMODEM のオプション指定の挙動を修正 [Ttssh2-devel 2814]

アーカイブの一覧に戻る

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:



Ttssh2-commit メーリングリストの案内
アーカイブの一覧に戻る