• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Tera Termの個人的な作業用リポジトリ


Commit MetaInfo

修订版3993a56ed4cb24287e1a194f90cdb5d7eda11e17 (tree)
时间2023-10-05 08:35:39
作者nmaya <nmaya@user...>
Commiternmaya

Log Message

SSH2 の Rekey 中に発生した SSH_MSG_CHANNEL_DATA の送信を破棄せず、バッファに入れるようにした

issue: https://github.com/TeraTermProject/osdn-download/issues/18

git-svn-id: svn+ssh://svn.osdn.net/svnroot/ttssh2/trunk@10957 f5f01b69-1e22-0410-acbf-894ab4bd6246

更改概述

差异

--- a/ttssh2/ttxssh/ssh.c
+++ b/ttssh2/ttxssh/ssh.c
@@ -3590,14 +3590,9 @@ void SSH2_send_channel_data(PTInstVar pvar, Channel_t *c, unsigned char *buf, un
35903590 unsigned char *outmsg;
35913591 unsigned int len;
35923592
3593- // SSH2鍵交換中の場合、パケットを捨てる。(2005.6.19 yutaka)
3593+ // SSH2鍵交換中の場合は、パケットを送れないのでいったん保存しておく
35943594 if (pvar->kex_status & KEX_FLAG_REKEYING) {
3595- // TODO: 理想としてはパケット破棄ではなく、パケット読み取り遅延にしたいところだが、
3596- // 将来直すことにする。
3597- logprintf(LOG_LEVEL_INFO, "%s: now rekeying. data is not sent.", __FUNCTION__);
3598-
3599- c = NULL;
3600-
3595+ ssh2_channel_add_bufchain(pvar, c, buf, buflen);
36013596 return;
36023597 }
36033598
@@ -6210,7 +6205,18 @@ static BOOL handle_SSH2_newkeys(PTInstVar pvar)
62106205 // SSH2_MSG_NEWKEYS を既に送っていたらKEXは完了。次の処理に移る。
62116206 if (pvar->kex_status & KEX_FLAG_NEWKEYS_SENT) {
62126207 if (pvar->kex_status & KEX_FLAG_REKEYING) {
6208+ int i;
6209+ Channel_t *c;
6210+
62136211 do_SSH2_dispatch_setup_for_transfer(pvar);
6212+
6213+ // 送らずバッファに保存しておいたデータを送る
6214+ for (i = 0 ; i < CHANNEL_MAX ; i++) {
6215+ c = &channels[i];
6216+ if (c->used) {
6217+ ssh2_channel_retry_send_bufchain(pvar, c);
6218+ }
6219+ }
62146220 }
62156221 else {
62166222 // 初回の SSH2_MSG_NEWKEYS の送受信が完了し、以降の通信は暗号化された状態になる
@@ -9286,7 +9292,7 @@ static BOOL handle_SSH2_window_adjust(PTInstVar pvar)
92869292 // window sizeの調整
92879293 c->remote_window += adjust;
92889294
9289- // 送り残し
9295+ // 送らずバッファに保存しておいたデータを送る
92909296 ssh2_channel_retry_send_bufchain(pvar, c);
92919297
92929298 return TRUE;