123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- struct ssh1_channel;
- struct outstanding_succfail;
- struct ssh1_connection_state {
- int crState;
- Conf *conf;
- int local_protoflags, remote_protoflags;
- tree234 *channels; /* indexed by local id */
- /* In SSH-1, the main session doesn't take the form of a 'channel'
- * according to the wire protocol. But we want to use the same API
- * for it, so we define an SshChannel here - but one that uses a
- * separate vtable from the usual one, so it doesn't map to a
- * struct ssh1_channel as all the others do. */
- SshChannel mainchan_sc;
- Channel *mainchan_chan; /* the other end of mainchan_sc */
- mainchan *mainchan; /* and its subtype */
- bool got_pty;
- bool ldisc_opts[LD_N_OPTIONS];
- bool stdout_throttling;
- bool want_user_input;
- bool session_terminated;
- int term_width, term_height, term_width_orig, term_height_orig;
- bufchain *user_input;
- bool X11_fwd_enabled;
- struct X11Display *x11disp;
- struct X11FakeAuth *x11auth;
- tree234 *x11authtree;
- tree234 *rportfwds;
- PortFwdManager *portfwdmgr;
- bool portfwdmgr_configured;
- bool finished_setup;
- /*
- * These store the list of requests that we're waiting for
- * SSH_SMSG_{SUCCESS,FAILURE} replies to. (Those messages don't
- * come with any indication of what they're in response to, so we
- * have to keep track of the queue ourselves.)
- */
- struct outstanding_succfail *succfail_head, *succfail_tail;
- bool compressing; /* used in server mode only */
- bool sent_exit_status; /* also for server mode */
- prompts_t *antispoof_prompt;
- SeatPromptResult antispoof_ret;
- const SshServerConfig *ssc;
- ConnectionLayer cl;
- PacketProtocolLayer ppl;
- };
- struct ssh1_channel {
- struct ssh1_connection_state *connlayer;
- unsigned remoteid, localid;
- int type;
- /* True if we opened this channel but server hasn't confirmed. */
- bool halfopen;
- /* Bitmap of whether we've sent/received CHANNEL_CLOSE and
- * CHANNEL_CLOSE_CONFIRMATION. */
- #define CLOSES_SENT_CLOSE 1
- #define CLOSES_SENT_CLOSECONF 2
- #define CLOSES_RCVD_CLOSE 4
- #define CLOSES_RCVD_CLOSECONF 8
- int closes;
- /*
- * This flag indicates that an EOF is pending on the outgoing side
- * of the channel: that is, wherever we're getting the data for
- * this channel has sent us some data followed by EOF. We can't
- * actually send the EOF until we've finished sending the data, so
- * we set this flag instead to remind us to do so once our buffer
- * is clear.
- */
- bool pending_eof;
- /*
- * True if this channel is causing the underlying connection to be
- * throttled.
- */
- bool throttling_conn;
- /*
- * True if we currently have backed-up data on the direction of
- * this channel pointing out of the SSH connection, and therefore
- * would prefer the 'Channel' implementation not to read further
- * local input if possible.
- */
- bool throttled_by_backlog;
- Channel *chan; /* handle the client side of this channel, if not */
- SshChannel sc; /* entry point for chan to talk back to */
- };
- SshChannel *ssh1_session_open(ConnectionLayer *cl, Channel *chan);
- void ssh1_channel_init(struct ssh1_channel *c);
- void ssh1_channel_free(struct ssh1_channel *c);
- struct ssh_rportfwd *ssh1_rportfwd_alloc(
- ConnectionLayer *cl,
- const char *shost, int sport, const char *dhost, int dport,
- int addressfamily, const char *log_description, PortFwdRecord *pfr,
- ssh_sharing_connstate *share_ctx);
- SshChannel *ssh1_serverside_x11_open(
- ConnectionLayer *cl, Channel *chan, const SocketEndpointInfo *pi);
- SshChannel *ssh1_serverside_agent_open(ConnectionLayer *cl, Channel *chan);
- void ssh1_connection_direction_specific_setup(
- struct ssh1_connection_state *s);
- bool ssh1_handle_direction_specific_packet(
- struct ssh1_connection_state *s, PktIn *pktin);
- bool ssh1_check_termination(struct ssh1_connection_state *s);
- bool ssh1_connection_need_antispoof_prompt(struct ssh1_connection_state *s);
|