-/* $OpenBSD: clientloop.c,v 1.213 2009/07/05 19:28:33 stevesk Exp $ */
+/* $OpenBSD: clientloop.c,v 1.215 2009/11/17 05:31:44 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
static void client_init_dispatch(void);
int session_ident = -1;
+int session_resumed = 0;
+
/* Track escape per proto2 channel */
struct escape_filter_ctx {
int escape_pending;
client_process_net_input(fd_set *readset)
{
int len, cont = 0;
- char buf[8192];
+ char buf[SSH_IOBUFSZ];
/*
* Read input from the server, and add any such data to the buffer of
client_process_input(fd_set *readset)
{
int len;
- char buf[8192];
+ char buf[SSH_IOBUFSZ];
/* Read input from stdin. */
if (FD_ISSET(fileno(stdin), readset)) {
client_process_output(writeset);
}
+ if (session_resumed) {
+ connection_in = packet_get_connection_in();
+ connection_out = packet_get_connection_out();
+ max_fd = MAX(max_fd, connection_out);
+ max_fd = MAX(max_fd, connection_in);
+ session_resumed = 0;
+ }
+
/*
* Send as much buffered packet data as possible to the
* sender.
chan_rcvd_eow(c);
} else if (strcmp(rtype, "exit-status") == 0) {
exitval = packet_get_int();
- if (id == session_ident) {
+ if (c->ctl_fd != -1) {
+ /* Dispatch to mux client */
+ atomicio(vwrite, c->ctl_fd, &exitval, sizeof(exitval));
+ success = 1;
+ } else if (id == session_ident) {
+ /* Record exit value of local session */
success = 1;
exit_status = exitval;
- } else if (c->ctl_fd == -1) {
+ } else {
error("client_input_channel_req: unexpected channel %d",
session_ident);
- } else {
- atomicio(vwrite, c->ctl_fd, &exitval, sizeof(exitval));
- success = 1;
}
packet_check_eom();
}