| 6799 |
// FWD_prep_forwarding()でshell IDを使うので、先に設定を持ってくる。(2005.7.3 yutaka) |
// FWD_prep_forwarding()でshell IDを使うので、先に設定を持ってくる。(2005.7.3 yutaka) |
| 6800 |
// changed window size from 64KB to 32KB. (2006.3.6 yutaka) |
// changed window size from 64KB to 32KB. (2006.3.6 yutaka) |
| 6801 |
// changed window size from 32KB to 128KB. (2007.10.29 maya) |
// changed window size from 32KB to 128KB. (2007.10.29 maya) |
| 6802 |
c = ssh2_channel_new(CHAN_SES_WINDOW_DEFAULT, CHAN_SES_PACKET_DEFAULT, TYPE_SHELL, -1); |
if (pvar->use_subsystem) { |
| 6803 |
|
c = ssh2_channel_new(CHAN_SES_WINDOW_DEFAULT, CHAN_SES_PACKET_DEFAULT, TYPE_SUBSYSTEM_GEN, -1); |
| 6804 |
|
} |
| 6805 |
|
else { |
| 6806 |
|
c = ssh2_channel_new(CHAN_SES_WINDOW_DEFAULT, CHAN_SES_PACKET_DEFAULT, TYPE_SHELL, -1); |
| 6807 |
|
} |
| 6808 |
|
|
| 6809 |
if (c == NULL) { |
if (c == NULL) { |
| 6810 |
UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, |
UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, |
| 6811 |
"Could not open new channel. TTSSH is already opening too many channels."); |
"Could not open new channel. TTSSH is already opening too many channels."); |
| 7547 |
buffer_put_int(msg, remote_id); |
buffer_put_int(msg, remote_id); |
| 7548 |
if (c->type == TYPE_SCP) { |
if (c->type == TYPE_SCP) { |
| 7549 |
s = "exec"; |
s = "exec"; |
| 7550 |
} else if (c->type == TYPE_SFTP) { |
} else if (c->type == TYPE_SFTP || c->type == TYPE_SUBSYSTEM_GEN) { |
| 7551 |
s = "subsystem"; |
s = "subsystem"; |
| 7552 |
} else { |
} else { |
| 7553 |
s = ""; // NOT REACHED |
s = ""; // NOT REACHED |
| 7572 |
char *sbuf = "sftp"; |
char *sbuf = "sftp"; |
| 7573 |
buffer_put_string(msg, sbuf, strlen(sbuf)); |
buffer_put_string(msg, sbuf, strlen(sbuf)); |
| 7574 |
} |
} |
| 7575 |
|
else if (c->type == TYPE_SUBSYSTEM_GEN) { |
| 7576 |
|
buffer_put_string(msg, pvar->subsystem_name, strlen(pvar->subsystem_name)); |
| 7577 |
|
pvar->session_nego_status = 0; |
| 7578 |
|
} |
| 7579 |
|
|
| 7580 |
len = buffer_len(msg); |
len = buffer_len(msg); |
| 7581 |
outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_REQUEST, len); |
outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_REQUEST, len); |
| 7841 |
return FALSE; |
return FALSE; |
| 7842 |
} |
} |
| 7843 |
|
|
| 7844 |
if (pvar->session_nego_status == 1 && pvar->shell_id == channel_id) { |
if (pvar->shell_id == channel_id) { |
| 7845 |
// リモートで auth-agent-req@openssh.com がサポートされてないので |
if (c->type == TYPE_SUBSYSTEM_GEN) { |
| 7846 |
// エラーは気にせず次へ進む |
// サブシステムの起動に失敗したので切る。 |
| 7847 |
|
notify_fatal_error(pvar, "subsystem request failed.", 1); |
| 7848 |
strncpy_s(buf, sizeof(buf), |
return TRUE; |
| 7849 |
"auth-agent-req@openssh.com is not supported by remote host.", |
} |
| 7850 |
_TRUNCATE); |
else { // TYPE_SHELL |
| 7851 |
notify_verbose_message(pvar, buf, LOG_LEVEL_VERBOSE); |
if (pvar->session_nego_status == 1) { |
| 7852 |
|
// リモートで auth-agent-req@openssh.com がサポートされてないので |
| 7853 |
|
// エラーは気にせず次へ進む |
| 7854 |
|
|
| 7855 |
|
strncpy_s(buf, sizeof(buf), |
| 7856 |
|
"auth-agent-req@openssh.com is not supported by remote host.", |
| 7857 |
|
_TRUNCATE); |
| 7858 |
|
notify_verbose_message(pvar, buf, LOG_LEVEL_VERBOSE); |
| 7859 |
|
|
| 7860 |
return send_pty_request(pvar, c); |
return send_pty_request(pvar, c); |
| 7861 |
|
} |
| 7862 |
|
} |
| 7863 |
} |
} |
| 7864 |
|
|
| 7865 |
ssh2_channel_delete(c); |
ssh2_channel_delete(c); |
| 8627 |
} |
} |
| 8628 |
|
|
| 8629 |
// ペイロードとしてクライアント(Tera Term)へ渡す |
// ペイロードとしてクライアント(Tera Term)へ渡す |
| 8630 |
if (c->type == TYPE_SHELL) { |
if (c->type == TYPE_SHELL || c->type == TYPE_SUBSYSTEM_GEN) { |
| 8631 |
pvar->ssh_state.payload_datalen = str_len; |
pvar->ssh_state.payload_datalen = str_len; |
| 8632 |
pvar->ssh_state.payload_datastart = 8; // id + strlen |
pvar->ssh_state.payload_datastart = 8; // id + strlen |
| 8633 |
|
|
| 8708 |
} |
} |
| 8709 |
|
|
| 8710 |
// ペイロードとしてクライアント(Tera Term)へ渡す |
// ペイロードとしてクライアント(Tera Term)へ渡す |
| 8711 |
if (c->type == TYPE_SHELL) { |
if (c->type == TYPE_SHELL || c->type == TYPE_SUBSYSTEM_GEN) { |
| 8712 |
pvar->ssh_state.payload_datalen = strlen; |
pvar->ssh_state.payload_datalen = strlen; |
| 8713 |
pvar->ssh_state.payload_datastart = 12; // id + data_type + strlen |
pvar->ssh_state.payload_datastart = 12; // id + data_type + strlen |
| 8714 |
|
|
| 8953 |
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_CLOSE was received. local:%d remote:%d", c->self_id, c->remote_id); |
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_CLOSE was received. local:%d remote:%d", c->self_id, c->remote_id); |
| 8954 |
notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE); |
notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE); |
| 8955 |
|
|
| 8956 |
if (c->type == TYPE_SHELL) { |
if (c->type == TYPE_SHELL || c->type == TYPE_SUBSYSTEM_GEN) { |
| 8957 |
ssh2_channel_send_close(pvar, c); |
ssh2_channel_send_close(pvar, c); |
| 8958 |
|
|
| 8959 |
// TCP connection closed |
// TCP connection closed |