| 3156 |
buffer_t *msg; |
buffer_t *msg; |
| 3157 |
unsigned char *outmsg; |
unsigned char *outmsg; |
| 3158 |
unsigned int len; |
unsigned int len; |
| 3159 |
|
char log[128]; |
| 3160 |
|
|
| 3161 |
// SSH2鍵交換中の場合、パケットを捨てる。(2005.6.19 yutaka) |
// SSH2鍵交換中の場合、パケットを捨てる。(2005.6.19 yutaka) |
| 3162 |
if (pvar->rekeying) { |
if (pvar->rekeying) { |
| 3193 |
buffer_free(msg); |
buffer_free(msg); |
| 3194 |
//debug_print(1, pvar->ssh_state.outbuf, 7 + 4 + 1 + 1 + len); |
//debug_print(1, pvar->ssh_state.outbuf, 7 + 4 + 1 + 1 + len); |
| 3195 |
|
|
| 3196 |
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_DATA was sent at SSH_handle_packet().", LOG_LEVEL_SSHDUMP); |
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_DATA was sent at SSH2_send_channel_data(). local:%d remote:%d", c->self_id, c->remote_id); |
| 3197 |
|
notify_verbose_message(pvar, log, LOG_LEVEL_SSHDUMP); |
| 3198 |
|
|
| 3199 |
// remote window sizeの調整 |
// remote window sizeの調整 |
| 3200 |
if (buflen <= c->remote_window) { |
if (buflen <= c->remote_window) { |
| 3296 |
} |
} |
| 3297 |
} |
} |
| 3298 |
|
|
| 3299 |
|
void SSH2_confirm_channel_open(PTInstVar pvar, uint32 local_id) |
| 3300 |
|
{ |
| 3301 |
|
buffer_t *msg; |
| 3302 |
|
unsigned char *outmsg; |
| 3303 |
|
int len; |
| 3304 |
|
Channel_t *c; |
| 3305 |
|
char log[128]; |
| 3306 |
|
|
| 3307 |
|
c = ssh2_channel_lookup(local_id); |
| 3308 |
|
|
| 3309 |
|
msg = buffer_init(); |
| 3310 |
|
if (msg == NULL) { |
| 3311 |
|
// TODO: error check |
| 3312 |
|
return; |
| 3313 |
|
} |
| 3314 |
|
buffer_put_int(msg, c->remote_id); |
| 3315 |
|
buffer_put_int(msg, c->self_id); |
| 3316 |
|
buffer_put_int(msg, c->local_window); |
| 3317 |
|
buffer_put_int(msg, c->local_maxpacket); |
| 3318 |
|
|
| 3319 |
|
len = buffer_len(msg); |
| 3320 |
|
outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, len); |
| 3321 |
|
memcpy(outmsg, buffer_ptr(msg), len); |
| 3322 |
|
finish_send_packet(pvar); |
| 3323 |
|
buffer_free(msg); |
| 3324 |
|
|
| 3325 |
|
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_OPEN_CONFIRMATION was sent at SSH_confirm_channel_open(). local:%d remote:%d", c->self_id, c->remote_id); |
| 3326 |
|
notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE); |
| 3327 |
|
} |
| 3328 |
|
|
| 3329 |
void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num, |
void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num, |
| 3330 |
uint32 local_channel_num) |
uint32 local_channel_num) |
| 3331 |
{ |
{ |
| 3338 |
finish_send_packet(pvar); |
finish_send_packet(pvar); |
| 3339 |
|
|
| 3340 |
} else { |
} else { |
|
buffer_t *msg; |
|
|
unsigned char *outmsg; |
|
|
int len; |
|
| 3341 |
Channel_t *c; |
Channel_t *c; |
| 3342 |
|
|
| 3343 |
// port-forwarding(remote to local)のローカル接続への成功をサーバへ返す。(2005.7.2 yutaka) |
// port-forwarding(remote to local)のローカル接続への成功をサーバへ返す。(2005.7.2 yutaka) |
| 3346 |
// It is sure to be successful as long as it's not a program bug either. |
// It is sure to be successful as long as it's not a program bug either. |
| 3347 |
return; |
return; |
| 3348 |
} |
} |
| 3349 |
|
SSH2_confirm_channel_open(pvar, c->self_id); |
|
msg = buffer_init(); |
|
|
if (msg == NULL) { |
|
|
// TODO: error check |
|
|
return; |
|
|
} |
|
|
buffer_put_int(msg, c->remote_id); |
|
|
buffer_put_int(msg, c->self_id); |
|
|
buffer_put_int(msg, c->local_window); |
|
|
buffer_put_int(msg, c->local_maxpacket); |
|
|
|
|
|
len = buffer_len(msg); |
|
|
outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, len); |
|
|
memcpy(outmsg, buffer_ptr(msg), len); |
|
|
finish_send_packet(pvar); |
|
|
buffer_free(msg); |
|
|
|
|
|
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_OPEN_CONFIRMATION was sent at SSH_confirm_channel_open().", LOG_LEVEL_VERBOSE); |
|
| 3350 |
} |
} |
| 3351 |
} |
} |
| 3352 |
|
|
| 3380 |
unsigned char *outmsg; |
unsigned char *outmsg; |
| 3381 |
int len; |
int len; |
| 3382 |
Channel_t *c; |
Channel_t *c; |
| 3383 |
|
char log[128]; |
| 3384 |
|
|
| 3385 |
// SSH2鍵交換中の場合、パケットを捨てる。(2005.6.21 yutaka) |
// SSH2鍵交換中の場合、パケットを捨てる。(2005.6.21 yutaka) |
| 3386 |
if (pvar->rekeying) { |
if (pvar->rekeying) { |
| 3408 |
finish_send_packet(pvar); |
finish_send_packet(pvar); |
| 3409 |
buffer_free(msg); |
buffer_free(msg); |
| 3410 |
|
|
| 3411 |
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_EOF was sent at SSH_channel_input_eof().", LOG_LEVEL_VERBOSE); |
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_EOF was sent at SSH_channel_input_eof(). local:%d remote:%d", c->self_id, c->remote_id); |
| 3412 |
|
notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE); |
| 3413 |
} |
} |
| 3414 |
|
|
| 3415 |
} |
} |
| 8018 |
buffer_t *msg; |
buffer_t *msg; |
| 8019 |
unsigned char *outmsg; |
unsigned char *outmsg; |
| 8020 |
int len; |
int len; |
| 8021 |
|
char log[128]; |
| 8022 |
|
|
| 8023 |
// SSH2 serverにchannel closeを伝える |
// SSH2 serverにchannel closeを伝える |
| 8024 |
msg = buffer_init(); |
msg = buffer_init(); |
| 8034 |
finish_send_packet(pvar); |
finish_send_packet(pvar); |
| 8035 |
buffer_free(msg); |
buffer_free(msg); |
| 8036 |
|
|
| 8037 |
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_CLOSE was sent at ssh2_channel_send_close().", LOG_LEVEL_VERBOSE); |
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_CLOSE was sent at ssh2_channel_send_close(). local:%d remote:%d", c->self_id, c->remote_id); |
| 8038 |
|
notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE); |
| 8039 |
} |
} |
| 8040 |
} |
} |
| 8041 |
|
|
| 8410 |
int id; |
int id; |
| 8411 |
unsigned int str_len; |
unsigned int str_len; |
| 8412 |
Channel_t *c; |
Channel_t *c; |
| 8413 |
|
char log[128]; |
|
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_DATA was received.", LOG_LEVEL_SSHDUMP); |
|
| 8414 |
|
|
| 8415 |
// 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード |
// 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード |
| 8416 |
data = pvar->ssh_state.payload; |
data = pvar->ssh_state.payload; |
| 8429 |
return FALSE; |
return FALSE; |
| 8430 |
} |
} |
| 8431 |
|
|
| 8432 |
|
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_DATA was received. local:%d remote:%d", c->self_id, c->remote_id); |
| 8433 |
|
notify_verbose_message(pvar, log, LOG_LEVEL_SSHDUMP); |
| 8434 |
|
|
| 8435 |
// string length |
// string length |
| 8436 |
str_len = get_uint32_MSBfirst(data); |
str_len = get_uint32_MSBfirst(data); |
| 8437 |
data += 4; |
data += 4; |
| 8560 |
char *data; |
char *data; |
| 8561 |
int id; |
int id; |
| 8562 |
Channel_t *c; |
Channel_t *c; |
| 8563 |
|
char log[128]; |
| 8564 |
|
|
|
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_EOF was received.", LOG_LEVEL_VERBOSE); |
|
| 8565 |
// 切断時にサーバが SSH2_MSG_CHANNEL_EOF を送ってくるので、チャネルを解放する。(2005.6.19 yutaka) |
// 切断時にサーバが SSH2_MSG_CHANNEL_EOF を送ってくるので、チャネルを解放する。(2005.6.19 yutaka) |
| 8566 |
|
|
| 8567 |
// 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード |
// 6byte(サイズ+パディング+タイプ)を取り除いた以降のペイロード |
| 8578 |
// TODO: |
// TODO: |
| 8579 |
return FALSE; |
return FALSE; |
| 8580 |
} |
} |
| 8581 |
|
|
| 8582 |
|
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_EOF was received. local:%d remote:%d", c->self_id, c->remote_id); |
| 8583 |
|
notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE); |
| 8584 |
|
|
| 8585 |
if (c->type == TYPE_PORTFWD) { |
if (c->type == TYPE_PORTFWD) { |
| 8586 |
FWD_channel_input_eof(pvar, c->local_num); |
FWD_channel_input_eof(pvar, c->local_num); |
| 8587 |
} |
} |
| 8703 |
c->remote_window = remote_window; |
c->remote_window = remote_window; |
| 8704 |
c->remote_maxpacket = remote_maxpacket; |
c->remote_maxpacket = remote_maxpacket; |
| 8705 |
|
|
| 8706 |
msg = buffer_init(); |
SSH2_confirm_channel_open(pvar, c->self_id); |
|
if (msg == NULL) { |
|
|
// TODO: error check |
|
|
return FALSE; |
|
|
} |
|
|
buffer_put_int(msg, c->remote_id); |
|
|
buffer_put_int(msg, c->self_id); |
|
|
buffer_put_int(msg, c->local_window); |
|
|
buffer_put_int(msg, c->local_maxpacket); |
|
|
|
|
|
len = buffer_len(msg); |
|
|
outmsg = begin_send_packet(pvar, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, len); |
|
|
memcpy(outmsg, buffer_ptr(msg), len); |
|
|
finish_send_packet(pvar); |
|
|
buffer_free(msg); |
|
|
|
|
|
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_OPEN_CONFIRMATION was sent at handle_SSH2_channel_open().", LOG_LEVEL_VERBOSE); |
|
| 8707 |
} |
} |
| 8708 |
else { |
else { |
| 8709 |
msg = buffer_init(); |
msg = buffer_init(); |
| 8745 |
buffer_t *msg; |
buffer_t *msg; |
| 8746 |
char *s; |
char *s; |
| 8747 |
unsigned char *outmsg; |
unsigned char *outmsg; |
| 8748 |
|
char log[128]; |
|
notify_verbose_message(pvar, "SSH2_MSG_CHANNEL_CLOSE was received.", LOG_LEVEL_VERBOSE); |
|
| 8749 |
|
|
| 8750 |
// コネクション切断時に、パケットダンプをファイルへ掃き出す。 |
// コネクション切断時に、パケットダンプをファイルへ掃き出す。 |
| 8751 |
if (LOG_LEVEL_SSHDUMP <= pvar->session_settings.LogLevel) { |
if (LOG_LEVEL_SSHDUMP <= pvar->session_settings.LogLevel) { |
| 8766 |
return FALSE; |
return FALSE; |
| 8767 |
} |
} |
| 8768 |
|
|
| 8769 |
|
_snprintf_s(log, sizeof(log), _TRUNCATE, "SSH2_MSG_CHANNEL_CLOSE was received. local:%d remote:%d", c->self_id, c->remote_id); |
| 8770 |
|
notify_verbose_message(pvar, log, LOG_LEVEL_VERBOSE); |
| 8771 |
|
|
| 8772 |
if (c->type == TYPE_SHELL) { |
if (c->type == TYPE_SHELL) { |
| 8773 |
msg = buffer_init(); |
msg = buffer_init(); |
| 8774 |
if (msg == NULL) { |
if (msg == NULL) { |