XMODEM送信の挙動の改善
XMODEMのプロトコルでは開始時にデータ受信側からデータ送信側へ周期的に送信要求のコマンド('C'あるいはNAK)が送られてくる。 データ受信側がすでに要求している状態でTeraTermがデータ送信側となる場合、ファイルおよびオプションの選択のダイアログが表示されている間も受信側から周期的にコマンドが送られてくる。 この送信要求がダイアログ表示中の間も蓄積されていく。
Teratermの現状の挙動は、この蓄積されたコマンドの先頭の1バイト目だけを解釈するだけで送信を開始してしまう。 そして1ブロック目の送信処理の直後に、この蓄積されたコマンドの2バイト目を解釈して1ブロック目の送信を繰り返してしまう。 このために、受信側は最初の1パケット目に対して正常受信したと応答を返しても、2ブロック目は送られて来ないことになる。 この挙動が繰り返されることで送受信は失敗することになる。 あるいはダイアログ表示中に受信側がタイムアウトして受信を受け付けなくなっている場合(CAN)でも無視して送信をしてしまう。
正しくは 蓄積されているコマンド全体を調べて判定する必要がある。
#33708,#39012,#39667で言及されている問題です
パッチありがとうございます。
すべてのパターンをチェックすることはできませんでしたが、
正しくは 蓄積されているコマンド全体を調べて判定する
は正しい方針で、実装はうまくうごいているように思います。
もしよければ直接コミットしていただくのはいかがでしょうか?
わからないことなどあれば気軽にお声かけください。
登録しなくてもつかえます。
パッチを取り込みました。r9651
trunkにも同様の修正を行いました。r9654
この修正は次のリリース時に反映されます。
ありがとうございました。
この問題は YMODEM にも存在しますか?このパッチを YMODEM にも適用できますか?
このようなチケットが出ています。#37456, #39667
r9663 変更履歴をもう少し詳しくしたい。
元が簡単すぎました。もう少し詳しくしました。
XMODEMのプロトコルでは開始時にデータ受信側からデータ送信側へ周期的に送信要求のコマンド('C'あるいはNAK)が送られてくる。
データ受信側がすでに要求している状態でTeraTermがデータ送信側となる場合、ファイルおよびオプションの選択のダイアログが表示されている間も受信側から周期的にコマンドが送られてくる。
この送信要求がダイアログ表示中の間も蓄積されていく。
Teratermの現状の挙動は、この蓄積されたコマンドの先頭の1バイト目だけを解釈するだけで送信を開始してしまう。
そして1ブロック目の送信処理の直後に、この蓄積されたコマンドの2バイト目を解釈して1ブロック目の送信を繰り返してしまう。
このために、受信側は最初の1パケット目に対して正常受信したと応答を返しても、2ブロック目は送られて来ないことになる。
この挙動が繰り返されることで送受信は失敗することになる。
あるいはダイアログ表示中に受信側がタイムアウトして受信を受け付けなくなっている場合(CAN)でも無視して送信をしてしまう。
正しくは 蓄積されているコマンド全体を調べて判定する必要がある。
#33708,#39012,#39667で言及されている問題です