Revision: 10302 https://osdn.net/projects/ttssh2/scm/svn/commits/10302 Author: nmaya Date: 2022-10-08 00:43:29 +0900 (Sat, 08 Oct 2022) Log Message: ----------- Kermit の調整をマージ merge from trunk: r10172, r10173, r10174, r10175, r10182, r10282 ticket: #44873, #44691 Revision Links: -------------- https://osdn.net/projects/ttssh2/scm/svn/commits/10172 https://osdn.net/projects/ttssh2/scm/svn/commits/10173 https://osdn.net/projects/ttssh2/scm/svn/commits/10174 https://osdn.net/projects/ttssh2/scm/svn/commits/10175 https://osdn.net/projects/ttssh2/scm/svn/commits/10182 https://osdn.net/projects/ttssh2/scm/svn/commits/10282 Ticket Links: ------------ https://osdn.net/projects/ttssh2/tracker/detail/44873 https://osdn.net/projects/ttssh2/tracker/detail/44691 Modified Paths: -------------- branches/4-stable/doc/en/html/about/history.html branches/4-stable/doc/ja/html/about/history.html branches/4-stable/teraterm/common/ttftypes.h branches/4-stable/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: branches/4-stable/doc/en/html/about/history.html =================================================================== --- branches/4-stable/doc/en/html/about/history.html 2022-10-07 14:47:10 UTC (rev 10301) +++ branches/4-stable/doc/en/html/about/history.html 2022-10-07 15:43:29 UTC (rev 10302) @@ -65,6 +65,8 @@ <!--li>TERATERM.INI \x82\xCC MouseCursor \x82̐ݒ\xE8\x92l\x82\xAA\x8F\xAC\x95\xB6\x8E\x9A\x82\xBE\x82\xC6 Additional settings \x83_\x83C\x83A\x83\x8D\x83O\x82ɔ\xBD\x89f\x82\xB3\x82\xEA\x82Ȃ\xA2\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3</li--> <li>Fixed wrong color numbers were changed when the color palette change in Visual Tab in Additional settings dialog.</li> <li>Fixed wrong color numbers in the color change and response sequence.</li> + <!--li>Kermit \x82Ńt\x83@\x83C\x83\x8B\x82\xF0\x8E\xF3\x90M\x82ł\xAB\x82Ȃ\xA2\x82\xB1\x82Ƃ\xAA\x82\xA0\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li--> + <!--li>Kermit \x82̑\x97\x90M\x83p\x83P\x83b\x83g\x82̃T\x83C\x83Y\x82\xAE\x82\xB5\x82\xBD\x81B</li--> </ul> </li> Modified: branches/4-stable/doc/ja/html/about/history.html =================================================================== --- branches/4-stable/doc/ja/html/about/history.html 2022-10-07 14:47:10 UTC (rev 10301) +++ branches/4-stable/doc/ja/html/about/history.html 2022-10-07 15:43:29 UTC (rev 10302) @@ -65,6 +65,8 @@ <li>TERATERM.INI \x82\xCC MouseCursor \x82̐ݒ\xE8\x92l\x82\xAA\x8F\xAC\x95\xB6\x8E\x9A\x82\xBE\x82\xC6 Additional settings \x83_\x83C\x83A\x83\x8D\x83O\x82ɔ\xBD\x89f\x82\xB3\x82\xEA\x82Ȃ\xA2\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3</li> <li>\x82\xBB\x82̑\xBC\x82̐ݒ\xE8\x83_\x83C\x83A\x83\x8D\x83O\x82̕\\x8E\xA6\x83^\x83u\x82̃J\x83\x89\x81[\x83p\x83\x8C\x83b\x83g\x95ύX\x82Ő\xB3\x82\xB5\x82\xAD\x82Ȃ\xA2\x90F\x94ԍ\x86\x82\xAA\x95ύX\x82\xB3\x82\xEA\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> <li>\x83J\x83\x89\x81[\x83p\x83\x8C\x83b\x83g\x95ύX\x81A\x8E擾\x83V\x81[\x83P\x83\x93\x83X\x82ŁA\x90F\x94ԍ\x86\x82\xF0\x8C\xEB\x82\xC1\x82Ă\xA2\x82\xBD\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> + <li>Kermit \x82Ńt\x83@\x83C\x83\x8B\x82\xF0\x8E\xF3\x90M\x82ł\xAB\x82Ȃ\xA2\x82\xB1\x82Ƃ\xAA\x82\xA0\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li> + <li>Kermit \x82̑\x97\x90M\x83p\x83P\x83b\x83g\x82̃T\x83C\x83Y\x82\xAE\x82\xB5\x82\xBD\x81B</li> </ul> </li> Modified: branches/4-stable/teraterm/common/ttftypes.h =================================================================== --- branches/4-stable/teraterm/common/ttftypes.h 2022-10-07 14:47:10 UTC (rev 10301) +++ branches/4-stable/teraterm/common/ttftypes.h 2022-10-07 15:43:29 UTC (rev 10302) @@ -147,6 +147,7 @@ typedef struct { int MAXL; + int MAXLX; BYTE TIME,NPAD,PADC,EOL,QCTL,QBIN,CHKT,REPT,CAPAS,WINDO,MAXLX1,MAXLX2; } KermitParam; Modified: branches/4-stable/teraterm/ttpfile/kermit.c =================================================================== --- branches/4-stable/teraterm/ttpfile/kermit.c 2022-10-07 14:47:10 UTC (rev 10301) +++ branches/4-stable/teraterm/ttpfile/kermit.c 2022-10-07 15:43:29 UTC (rev 10302) @@ -44,8 +44,6 @@ #include "ftlib.h" #include "win16api.h" -#define KERMIT_CAPAS - /* kermit parameters */ #define MaxNum 94 @@ -65,6 +63,17 @@ #define KMT_CAP_LONGPKT 2 #define KMT_CAP_SLIDWIN 4 #define KMT_CAP_FILATTR 8 +/* + * Long Packet \x82̓\xAE\x8D\xEC + * - \x8E\xF3\x90M + * KmtLongPacket \x82\xAA\x97L\x8C\xF8\x82Ȃ\xE7 kv->KmtMy.CAPAS \x82\xCC Long Packet \x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 + * kv->KmtMy.CAPAS \x82\xAA\x83\x8A\x83\x82\x81[\x83g\x82ɑ\x97\x90M\x82\xB3\x82\xEA\x81ALong Packet \x82\xAA\x8E\xF3\x90M\x89\\x82ł\xA0\x82邱\x82Ƃ\xF0\x93`\x82\xA6\x82\xE9 + * Long Packet \x82\xAA\x94\xF2\x82\xF1\x82ł\xAD\x82\xE9\x82ƁAKmtLongPacket \x82̐ݒ\xE8\x82ɂ\xA9\x82\xA9\x82\xED\x82炸\x8E\xF3\x90M\x82\xB7\x82\xE9 + * - \x91\x97\x90M + * \x83\x8A\x83\x82\x81[\x83g\x82\xA9\x82\xE7\x82̒ʒm\x82\xAA kv->KmtYour.CAPAS \x82ɕۑ\xB6\x82\xB3\x82\xEA\x82\xE9 + * kv->KmtYour.CAPAS \x82\xAA\x97L\x8C\xF8\x82\xC5 kv->KmtMy.CAPAS (KmtLongPacket) \x82\xE0\x97L\x8C\xF8\x82Ȃ璷\x82\xA2\x91\x97\x90M\x83f\x81[\x83^\x82\xF0\x8D쐬\x82\xB7\x82\xE9 + * LEN \x82\xAA 94 \x82\xA6\x82\xE9\x83p\x83P\x83b\x83g\x82\xCD Long Packet \x82ő\x97\x90M\x82\xB7\x82\xE9 + */ #define KMT_ATTR_TIME 001 #define KMT_ATTR_MODE 002 @@ -265,22 +274,12 @@ CommBinaryOut(cv,&(kv->KmtYour.PADC), 1); /* packet */ -#ifdef KERMIT_CAPAS C = kv->PktOutCount; -#else - C = KmtNum(kv->PktOut[1]) + 2; -#endif CommBinaryOut(cv,&kv->PktOut[0], C); if (fv->LogFlag) { -#if 0 - _lwrite(fv->LogFile,"> ",2); - _lwrite(fv->LogFile,&(kv->PktOut[1]),C-1); - _lwrite(fv->LogFile,"\015\012",2); -#else KmtWriteLog(fv, kv, &(kv->PktOut[0]), C); -#endif } /* end-of-line character */ @@ -354,18 +353,16 @@ kv->PktOut[11] = kv->KmtMy.CHKT + 0x30; kv->PktOut[12] = kv->KmtMy.REPT; -#ifdef KERMIT_CAPAS if (kv->KmtMy.CAPAS > 0) { kv->PktOut[13] = KmtChar(kv->KmtMy.CAPAS); NParam++; if (kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { kv->PktOut[14] = KmtChar(0); - kv->PktOut[15] = KmtChar(KMT_DATAMAX / 95); - kv->PktOut[16] = KmtChar(KMT_DATAMAX % 95); + kv->PktOut[15] = KmtChar(kv->KmtMy.MAXLX / 95); + kv->PktOut[16] = KmtChar(kv->KmtMy.MAXLX % 95); NParam += 3; } } -#endif KmtMakePacket(fv,kv,(BYTE)(kv->PktNum - kv->PktNumOffset),PktType,NParam); KmtSendPacket(fv,kv,cv); @@ -433,7 +430,8 @@ void KmtParseInit(PKmtVar kv, BOOL AckFlag) { - int i, NParam, off, cap, maxlen; + int i, NParam, off; + int maxlen = 0; BYTE b, n; if (kv->PktInLen == 0) { /* Long Packet */ @@ -488,6 +486,7 @@ } } else /* S-packet from remote host */ + { if ((b=='Y') && KmtCheckQuote(kv->KmtMy.QBIN)) kv->Quote8 = TRUE; else if (KmtCheckQuote(b)) @@ -495,10 +494,12 @@ kv->KmtMy.QBIN = b; kv->Quote8 = TRUE; } + } - if (! kv->Quote8) kv->KmtMy.QBIN = 'N'; - kv->KmtYour.QBIN = kv->KmtMy.QBIN; - break; + if (! kv->Quote8) + kv->KmtMy.QBIN = 'N'; + kv->KmtYour.QBIN = kv->KmtMy.QBIN; + break; case 8: kv->KmtYour.CHKT = b - 0x30; @@ -535,19 +536,6 @@ case 10: /* CAPAS */ kv->KmtYour.CAPAS = n; - - // Tera Term\x82ƃT\x81[\x83o\x82\xCC capabilities \x82\xCCAND\x82\xF0\x8E\xE6\x82\xE9\x81B - cap = 0; - if (n & kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { - cap |= KMT_CAP_LONGPKT; - } - if (n & kv->KmtMy.CAPAS & KMT_CAP_SLIDWIN) { - cap |= KMT_CAP_SLIDWIN; - } - if (n & kv->KmtMy.CAPAS & KMT_CAP_FILATTR) { - cap |= KMT_CAP_FILATTR; - } - kv->KmtMy.CAPAS = cap; break; case 11: /* WINDO */ @@ -564,14 +552,13 @@ } } - /* Long Packet \x82̏ꍇ\x81AMAXL \x82\xF0\x8DX\x90V\x82\xB7\x82\xE9\x81B*/ - if (kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { - kv->KmtMy.MAXL = maxlen; - if (kv->KmtMy.MAXL < 10) - kv->KmtMy.MAXL = 80; - else if (kv->KmtMy.MAXL > KMT_DATAMAX) - kv->KmtMy.MAXL = KMT_DATAMAX; + /* Long Packet \x82̏ꍇ\x81AMAXLX \x82\xF0\x8DX\x90V\x82\xB7\x82\xE9\x81B*/ + if (kv->KmtYour.CAPAS & KMT_CAP_LONGPKT) { + kv->KmtYour.MAXLX = maxlen; + // \x82\xB1\x82\xBF\x82\xE7\x82̑\x97\x90M\x83o\x83b\x83t\x83@\x83T\x83C\x83Y\x82\xA6\x82Ȃ\xA2\x82\xBD\x82\xDF + if (kv->KmtYour.MAXL > KMT_DATAMAX) + kv->KmtYour.MAXL = KMT_DATAMAX; } else { /* Capabilities \x82\xAA\x97\x8E\x82\xBF\x82Ă\xA2\x82\xE9\x82̂ɁALEN=0 \x82̏ꍇ\x82́AMAXL \x82\xCD DefMAXL \x82̂܂܂Ƃ\xB7\x82\xE9\x81B * TODO: \x96{\x97\x88\x82̓G\x83\x89\x81[\x82Ƃ\xB7\x82ׂ\xAB\x81H @@ -928,19 +915,15 @@ DataLen = 0; DataLenNew = 0; - if (kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { - // Long Packet\x82\xC594\x83o\x83C\x83g\x88ȏ㑗\x82\xE9\x82ƁA\x82Ȃ\xBA\x82\xA9\x91\x8A\x8E葤\x82\xAA\x8E\xE6\x82\xC1\x82Ă\xAD\x82\xEA\x82Ȃ\xA2\x82̂ŁA - // \x91\x97\x90M\x8E\xB8\x94s\x82\xB7\x82邽\x82߁A94\x83o\x83C\x83g\x82ɐ\xA7\x8C\xC0\x82\xB7\x82\xE9\x81B - // \x8E\xF3\x90M\x82͑\xAC\x82\xA2\x82\xAA\x81A\x91\x97\x90M\x82͒x\x82\xAD\x82Ȃ\xE9\x81B - // (2012.2.5 yutaka) - // CommBinaryOut() \x82\xC51KB\x82܂łƂ\xA2\x82\xA4\x90\xA7\x8C\xC0\x82\xAA\x82\xA9\x82\xA9\x82\xC1\x82Ă\xA2\x82邱\x82Ƃ\xAA\x94\xBB\x96\xBE\x82\xB5\x82\xBD\x82\xBD\x82߁A - // 512\x83o\x83C\x83g\x82܂łɊg\x92\xA3\x82\xB7\x82\xE9\x81B - // (2012.2.7 yutaka) - maxlen = kv->KmtMy.MAXL - kv->KmtMy.CHKT - LONGPKT_HEADNUM - 1; - maxlen = min(maxlen, 512); + // Long Packet + // \x83\x8A\x83\x82\x81[\x83g\x82\xCC CAPAS \x82\xAA\x97L\x8C\xF8\x81A\x82\xA9\x82\xC2 Tera Term \x82̐ݒ肪\x97L\x8C\xF8 + if (kv->KmtYour.CAPAS & KMT_CAP_LONGPKT && + kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { + // CommBinaryOut() \x82̐\xA7\x8C\xC0\x82\xCD 16KB \x82ŁAKMT_PKTMAX=4032 \x82\xA6\x82Ȃ\xA2 + maxlen = kv->KmtYour.MAXLX - kv->KmtMy.CHKT - 7; } else { - maxlen = kv->KmtYour.MAXL-kv->KmtMy.CHKT-4; + maxlen = kv->KmtYour.MAXL - kv->KmtMy.CHKT - 2; } NextFlag = KmtEncode(fv,kv); @@ -1171,15 +1154,22 @@ * (2012/1/22 yutaka) */ kv->KmtMy.CAPAS = 0x00; -#ifdef KERMIT_CAPAS - if (ts->KermitOpt & KmtOptLongPacket) + if (ts->KermitOpt & KmtOptLongPacket) { kv->KmtMy.CAPAS |= KMT_CAP_LONGPKT; + kv->KmtMy.MAXLX = KMT_DATAMAX; + } + else { + // Tera Term \x82\xA9\x82\xE7\x97L\x8C\xF8\x82\xBE\x82ƒʒm\x82\xB5\x82Ă\xA2\x82Ȃ\xAD\x82Ă\xE0 + // Long Packet \x82𑗂\xC1\x82Ă\xAD\x82\xE9\x8Fꍇ\x82̂\xBD\x82\xDF + kv->KmtMy.MAXLX = KMT_DATAMAX; + } if (ts->KermitOpt & KmtOptFileAttr) kv->KmtMy.CAPAS |= KMT_CAP_FILATTR; -#endif /* default your parameters */ kv->KmtYour = kv->KmtMy; + kv->KmtYour.CAPAS = 0x00; + kv->KmtYour.MAXLX = 0; kv->Quote8 = FALSE; kv->RepeatFlag = FALSE; @@ -1285,11 +1275,22 @@ case WaitLen: kv->PktIn[1] = b; kv->PktInLen = KmtNum(b); -#ifdef KERMIT_CAPAS + if (kv->PktInLen == 0) { /* Long Packet */ kv->PktInCount = 0; } else if (kv->PktInLen >= 3) { /* Normal Packet */ kv->PktInCount = kv->PktInLen + 2; + // OutputDebugPrintf("Normal Packet: %d bytes\n", kv->PktInCount); + + // "Initialize \x82Ń\x8A\x83\x82\x81[\x83g\x82\xAA\x91\x97\x82\xC1\x82Ă\xAB\x82\xBD MAXL" + 2 (MARK, LEN) + // \x82\xA6\x82\xE9\x83T\x83C\x83Y\x82̃p\x83P\x83b\x83g\x82\xF0\x83\x8A\x83\x82\x81[\x83g\x82\xAA\x91\x97\x82낤\x82Ƃ\xB5\x82Ă\xAB\x82\xBD + if (kv->PktInCount > kv->KmtMy.MAXL + 2) { + KmtStringLog(fv, kv, "Remote is attempting to send %d bytes, but MAXL from remote is %d. Must be less than or equal to %d bytes.", + kv->PktInCount, kv->KmtMy.MAXL, kv->KmtMy.MAXL + 2); + GetPkt = FALSE; + kv->PktReadMode = WaitMark; + goto read_end; + } } else { /* If unchar(LEN) = 1 or 2, the packet is invalid and should cause an Error. */ KmtStringLog(fv, kv, "If unchar(LEN) = %d is 1 or 2, the packet is invalid.", kv->PktInLen); @@ -1297,29 +1298,30 @@ kv->PktReadMode = WaitMark; goto read_end; } -#else - kv->PktInCount = kv->PktInLen; -#endif + kv->PktInPtr = 2; kv->PktReadMode = WaitCheck; break; case WaitCheck: - // \x83o\x83b\x83t\x83@\x82\xAA\x88\xEC\x82ꂽ\x82\xE7\x81A\x88ُ\xED\x8FI\x97\xB9\x82\xB7\x82\xE9\x81B - // Tera Term\x91\xA4\x82\xAALong Packet\x82\xF0\x83T\x83|\x81[\x83g\x82\xB5\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ\x82ɁA\x83T\x81[\x83o\x91\xA4\x82\xA9\x82\xE7\x95s\x90\xB3\x82\xC9 - // Long Packet\x82\xAA\x91\x97\x82\xE7\x82\xEA\x82Ă\xAB\x82\xBD\x8Fꍇ\x82\xE0\x8B~\x8Dςł\xAB\x82\xE9\x81B - if (kv->PktInPtr > kv->KmtMy.MAXL) { - KmtStringLog(fv, kv, "Read buffer overflow(%d > %d).", kv->PktInPtr, kv->KmtMy.MAXL); - GetPkt = FALSE; - kv->PktReadMode = WaitMark; - goto read_end; - } kv->PktIn[kv->PktInPtr] = b; kv->PktInPtr++; -#ifdef KERMIT_CAPAS - // Long Packet + /* Long Packet */ + // Tera Term \x82\xA9\x82\xE7\x97L\x8C\xF8\x82\xBE\x82ƒʒm\x82\xB5\x82Ă\xA2\x82Ȃ\xAD\x82Ă\xE0\x8E\xF3\x90M\x82\xB7\x82\xE9 if (kv->PktInCount == 0 && kv->PktInPtr == 6) { kv->PktInLongPacketLen = KmtNum(kv->PktIn[4])*95 + KmtNum(kv->PktIn[5]); kv->PktInCount = kv->PktInLongPacketLen + 7; + // OutputDebugPrintf("Long Packet: %d bytes\n", kv->PktInCount); + + // "Initialize \x82Ń\x8A\x83\x82\x81[\x83g\x82\xAA\x91\x97\x82\xC1\x82Ă\xAB\x82\xBD MAXLX1*95 + MAXLX2" + 7 (MARK \x82\xA9\x82\xE7 HCHECK) + // \x82\xA6\x82\xE9\x83T\x83C\x83Y\x82̃p\x83P\x83b\x83g\x82\xF0\x83\x8A\x83\x82\x81[\x83g\x82\xAA\x91\x97\x82낤\x82Ƃ\xB5\x82Ă\xAB\x82\xBD + // +1 \x82\xCD C-Kermit 9.0.305 Alpha.05 \x82\xA9\x82\xE7 C-Kermit 10.0 Beta.04 \x82܂ł\xAA 1 \x83o\x83C\x83g\x91\xBD\x82\xAD\x91\x97\x82\xC1\x82Ă\xAD\x82邽\x82\xDF + if (kv->PktInCount > kv->KmtMy.MAXLX + 7 + 1) { + KmtStringLog(fv, kv, "Remote is attempting to send %d bytes, but MAXLX from remote is %d. Must be less than or equal to %d bytes.", + kv->PktInCount, kv->KmtMy.MAXLX, kv->KmtMy.MAXLX + 7 + 1); + GetPkt = FALSE; + kv->PktReadMode = WaitMark; + goto read_end; + } } // \x8A\xFA\x91҂\xB5\x82\xBD\x83o\x83b\x83t\x83@\x83T\x83C\x83Y\x82ɂȂ\xC1\x82\xBD\x82\xE7\x8FI\x82\xED\x82\xE9\x81B @@ -1326,10 +1328,7 @@ if (kv->PktInCount != 0 && kv->PktInPtr >= kv->PktInCount) { GetPkt = TRUE; } -#else - kv->PktInCount--; - GetPkt = (kv->PktInCount==0); -#endif + if (GetPkt) kv->PktReadMode = WaitMark; break; } @@ -1342,11 +1341,7 @@ if (fv->LogFlag) { -#ifdef KERMIT_CAPAS KmtReadLog(fv, kv, &(kv->PktIn[0]), kv->PktInCount); -#else - KmtReadLog(fv, kv, &(kv->PktIn[0]), kv->PktInLen+2); -#endif } PktNumNew = KmtCalcPktNum(kv,kv->PktIn[2]); @@ -1370,6 +1365,7 @@ fv->Success = TRUE; return FALSE; } + break; case 'D': if ((kv->KmtState == ReceiveData) && (PktNumNew > kv->PktNum)) @@ -1419,7 +1415,7 @@ if (PktNumNew==kv->PktNum) KmtSendPacket(fv,kv,cv); else if (PktNumNew==kv->PktNum+1) { - if (kv->KmtMy.CAPAS & KMT_CAP_FILATTR) + if (kv->KmtYour.CAPAS & KMT_CAP_FILATTR) KmtSendNextData(fv,kv,cv); else KmtSendNextData(fv,kv,cv); @@ -1471,7 +1467,7 @@ break; case SendFile: if (PktNumNew==kv->PktNum) { - if (kv->KmtMy.CAPAS & KMT_CAP_FILATTR) + if (kv->KmtYour.CAPAS & KMT_CAP_FILATTR) KmtSendNextFileAttr(fv,kv,cv); else KmtSendNextData(fv,kv,cv);