version 1.283, 2016/02/01 21:18:17 |
version 1.284, 2016/02/08 10:57:07 |
|
|
{ |
{ |
fd_set *readset = NULL, *writeset = NULL; |
fd_set *readset = NULL, *writeset = NULL; |
double start_time, total_time; |
double start_time, total_time; |
int r, max_fd = 0, max_fd2 = 0, len, rekeying = 0; |
int r, max_fd = 0, max_fd2 = 0, len; |
u_int64_t ibytes, obytes; |
u_int64_t ibytes, obytes; |
u_int nalloc = 0; |
u_int nalloc = 0; |
char buf[100]; |
char buf[100]; |
|
|
if (compat20 && session_closed && !channel_still_open()) |
if (compat20 && session_closed && !channel_still_open()) |
break; |
break; |
|
|
rekeying = (active_state->kex != NULL && !active_state->kex->done); |
if (ssh_packet_is_rekeying(active_state)) { |
|
|
if (rekeying) { |
|
debug("rekeying in progress"); |
debug("rekeying in progress"); |
|
} else if (need_rekeying) { |
|
/* manual rekey request */ |
|
debug("need rekeying"); |
|
if ((r = kex_start_rekex(active_state)) != 0) |
|
fatal("%s: kex_start_rekex: %s", __func__, |
|
ssh_err(r)); |
|
need_rekeying = 0; |
} else { |
} else { |
/* |
/* |
* Make packets of buffered stdin data, and buffer |
* Make packets of buffered stdin data, and buffer |
|
|
*/ |
*/ |
max_fd2 = max_fd; |
max_fd2 = max_fd; |
client_wait_until_can_do_something(&readset, &writeset, |
client_wait_until_can_do_something(&readset, &writeset, |
&max_fd2, &nalloc, rekeying); |
&max_fd2, &nalloc, ssh_packet_is_rekeying(active_state)); |
|
|
if (quit_pending) |
if (quit_pending) |
break; |
break; |
|
|
/* Do channel operations unless rekeying in progress. */ |
/* Do channel operations unless rekeying in progress. */ |
if (!rekeying) { |
if (!ssh_packet_is_rekeying(active_state)) |
channel_after_select(readset, writeset); |
channel_after_select(readset, writeset); |
if (need_rekeying || packet_need_rekeying()) { |
|
debug("need rekeying"); |
|
active_state->kex->done = 0; |
|
if ((r = kex_send_kexinit(active_state)) != 0) |
|
fatal("%s: kex_send_kexinit: %s", |
|
__func__, ssh_err(r)); |
|
need_rekeying = 0; |
|
} |
|
} |
|
|
|
/* Buffer input from the connection. */ |
/* Buffer input from the connection. */ |
client_process_net_input(readset); |
client_process_net_input(readset); |