| 1379 |
enque_handler(pvar, SSH2_MSG_CHANNEL_CLOSE, handle_SSH2_channel_close); |
enque_handler(pvar, SSH2_MSG_CHANNEL_CLOSE, handle_SSH2_channel_close); |
| 1380 |
enque_handler(pvar, SSH2_MSG_CHANNEL_DATA, handle_SSH2_channel_data); |
enque_handler(pvar, SSH2_MSG_CHANNEL_DATA, handle_SSH2_channel_data); |
| 1381 |
enque_handler(pvar, SSH2_MSG_CHANNEL_EOF, handle_SSH2_channel_eof); |
enque_handler(pvar, SSH2_MSG_CHANNEL_EOF, handle_SSH2_channel_eof); |
| 1382 |
// enque_handler(pvar, SSH2_MSG_CHANNEL_EXTENDED_DATA, handle_SSH2_channel_extended_data); |
enque_handler(pvar, SSH2_MSG_CHANNEL_EXTENDED_DATA, handle_SSH2_channel_extended_data); |
| 1383 |
enque_handler(pvar, SSH2_MSG_CHANNEL_OPEN, handle_SSH2_channel_open); |
enque_handler(pvar, SSH2_MSG_CHANNEL_OPEN, handle_SSH2_channel_open); |
| 1384 |
enque_handler(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, handle_SSH2_open_confirm); |
enque_handler(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, handle_SSH2_open_confirm); |
| 1385 |
enque_handler(pvar, SSH2_MSG_CHANNEL_OPEN_FAILURE, handle_SSH2_open_failure); |
enque_handler(pvar, SSH2_MSG_CHANNEL_OPEN_FAILURE, handle_SSH2_open_failure); |
| 6595 |
// ペイロードとしてクライアント(TeraTerm)へ渡す |
// ペイロードとしてクライアント(TeraTerm)へ渡す |
| 6596 |
if (c->type == TYPE_SHELL) { |
if (c->type == TYPE_SHELL) { |
| 6597 |
pvar->ssh_state.payload_datalen = strlen; |
pvar->ssh_state.payload_datalen = strlen; |
| 6598 |
pvar->ssh_state.payload_datastart = 8; |
pvar->ssh_state.payload_datastart = 8; // id + strlen |
| 6599 |
|
|
| 6600 |
} else { |
} else { |
| 6601 |
//debug_print(0, data, strlen); |
//debug_print(0, data, strlen); |
| 6614 |
} |
} |
| 6615 |
|
|
| 6616 |
|
|
| 6617 |
|
// Tectia Server の Windows 版は、DOSコマンドが失敗したときにstderrに出力される |
| 6618 |
|
// エラーメッセージを SSH2_MSG_CHANNEL_EXTENDED_DATA で送信してくる。 |
| 6619 |
|
// SSH2_MSG_CHANNEL_EXTENDED_DATA を処理するようにした。(2006.10.30 maya) |
| 6620 |
static BOOL handle_SSH2_channel_extended_data(PTInstVar pvar) |
static BOOL handle_SSH2_channel_extended_data(PTInstVar pvar) |
| 6621 |
{ |
{ |
| 6622 |
|
int len; |
| 6623 |
|
char *data; |
| 6624 |
|
int id; |
| 6625 |
|
unsigned int strlen; |
| 6626 |
|
Channel_t *c; |
| 6627 |
|
int data_type; |
| 6628 |
|
|
| 6629 |
|
// 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード |
| 6630 |
|
data = pvar->ssh_state.payload; |
| 6631 |
|
// パケットサイズ - (パディングサイズ+1);真のパケットサイズ |
| 6632 |
|
len = pvar->ssh_state.payloadlen; |
| 6633 |
|
|
| 6634 |
|
//debug_print(80, data, len); |
| 6635 |
|
|
| 6636 |
|
// channel number |
| 6637 |
|
id = get_uint32_MSBfirst(data); |
| 6638 |
|
data += 4; |
| 6639 |
|
|
| 6640 |
|
c = ssh2_channel_lookup(id); |
| 6641 |
|
if (c == NULL) { |
| 6642 |
|
// TODO: |
| 6643 |
|
return FALSE; |
| 6644 |
|
} |
| 6645 |
|
|
| 6646 |
|
// data_type_code |
| 6647 |
|
data_type = get_uint32_MSBfirst(data); |
| 6648 |
|
data += 4; |
| 6649 |
|
|
| 6650 |
|
// string length |
| 6651 |
|
strlen = get_uint32_MSBfirst(data); |
| 6652 |
|
data += 4; |
| 6653 |
|
|
| 6654 |
|
// バッファサイズのチェック |
| 6655 |
|
if (strlen > c->local_window_max) { |
| 6656 |
|
// TODO: logging |
| 6657 |
|
} |
| 6658 |
|
if (strlen > c->local_window) { |
| 6659 |
|
// TODO: logging |
| 6660 |
|
// local window sizeより大きなパケットは捨てる |
| 6661 |
|
return FALSE; |
| 6662 |
|
} |
| 6663 |
|
|
| 6664 |
|
// ペイロードとしてクライアント(TeraTerm)へ渡す |
| 6665 |
|
if (c->type == TYPE_SHELL) { |
| 6666 |
|
pvar->ssh_state.payload_datalen = strlen; |
| 6667 |
|
pvar->ssh_state.payload_datastart = 12; // id + data_type + strlen |
| 6668 |
|
|
| 6669 |
|
} else { |
| 6670 |
|
//debug_print(0, data, strlen); |
| 6671 |
|
FWD_received_data(pvar, c->local_num, data, strlen); |
| 6672 |
|
|
| 6673 |
|
} |
| 6674 |
|
|
| 6675 |
|
//debug_print(200, data, strlen); |
| 6676 |
|
|
| 6677 |
|
// ウィンドウサイズの調整 |
| 6678 |
|
c->local_window -= strlen; |
| 6679 |
|
|
| 6680 |
|
do_SSH2_adjust_window_size(pvar, c); |
| 6681 |
|
|
| 6682 |
return TRUE; |
return TRUE; |
| 6683 |
} |
} |
| 6956 |
|
|
| 6957 |
/* |
/* |
| 6958 |
* $Log: not supported by cvs2svn $ |
* $Log: not supported by cvs2svn $ |
| 6959 |
|
* Revision 1.56 2006/10/29 22:42:12 maya |
| 6960 |
|
* 圧縮の初期化を SSH2_MSG_NEWKEYS の送信時に変更した。 |
| 6961 |
|
* |
| 6962 |
* Revision 1.55 2006/10/29 17:26:47 yutakapon |
* Revision 1.55 2006/10/29 17:26:47 yutakapon |
| 6963 |
* ・MACとパケット圧縮を有効にするタイミングを SSH2_MSG_NEWKEYS の送受信時に変更することにより、Tectiva serverへつながらない問題を修正した。 |
* ・MACとパケット圧縮を有効にするタイミングを SSH2_MSG_NEWKEYS の送受信時に変更することにより、Tectiva serverへつながらない問題を修正した。 |
| 6964 |
* |
* |