Lines Matching refs:mc

80     mainchan *mc;  in mainchan_new()  local
85 mc = snew(mainchan); in mainchan_new()
86 memset(mc, 0, sizeof(mainchan)); in mainchan_new()
87 mc->ppl = ppl; in mainchan_new()
88 mc->cl = cl; in mainchan_new()
89 mc->conf = conf_copy(conf); in mainchan_new()
90 mc->term_width = term_width; in mainchan_new()
91 mc->term_height = term_height; in mainchan_new()
92 mc->is_simple = is_simple; in mainchan_new()
94 mc->sc = NULL; in mainchan_new()
95 mc->chan.vt = &mainchan_channelvt; in mainchan_new()
96 mc->chan.initial_fixed_window_size = 0; in mainchan_new()
98 if (*conf_get_str(mc->conf, CONF_ssh_nc_host)) { in mainchan_new()
99 const char *host = conf_get_str(mc->conf, CONF_ssh_nc_host); in mainchan_new()
100 int port = conf_get_int(mc->conf, CONF_ssh_nc_port); in mainchan_new()
102 mc->sc = ssh_lportfwd_open(cl, host, port, "main channel", in mainchan_new()
103 NULL, &mc->chan); in mainchan_new()
104 mc->type = MAINCHAN_DIRECT_TCPIP; in mainchan_new()
106 mc->sc = ssh_session_open(cl, &mc->chan); in mainchan_new()
107 mc->type = MAINCHAN_SESSION; in mainchan_new()
110 if (sc_out) *sc_out = mc->sc; in mainchan_new()
111 return mc; in mainchan_new()
117 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_free() local
118 conf_free(mc->conf); in mainchan_free()
119 sfree(mc); in mainchan_free()
122 static void mainchan_try_fallback_command(mainchan *mc);
123 static void mainchan_ready(mainchan *mc);
127 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_open_confirmation() local
128 PacketProtocolLayer *ppl = mc->ppl; /* for ppl_logevent */ in mainchan_open_confirmation()
130 seat_update_specials_menu(mc->ppl->seat); in mainchan_open_confirmation()
133 if (mc->is_simple) in mainchan_open_confirmation()
134 sshfwd_hint_channel_is_simple(mc->sc); in mainchan_open_confirmation()
136 if (mc->type == MAINCHAN_SESSION) { in mainchan_open_confirmation()
145 if (conf_get_bool(mc->conf, CONF_x11_forward)) { in mainchan_open_confirmation()
148 conf_get_str(mc->conf, CONF_x11_display), in mainchan_open_confirmation()
149 mc->conf, &x11_setup_err)) == NULL) { in mainchan_open_confirmation()
155 mc->cl, conf_get_int(mc->conf, CONF_x11_auth), x11disp); in mainchan_open_confirmation()
158 mc->sc, true, x11auth->protoname, x11auth->datastring, in mainchan_open_confirmation()
160 mc->req_x11 = true; in mainchan_open_confirmation()
164 if (ssh_agent_forwarding_permitted(mc->cl)) { in mainchan_open_confirmation()
165 sshfwd_request_agent_forwarding(mc->sc, true); in mainchan_open_confirmation()
166 mc->req_agent = true; in mainchan_open_confirmation()
169 if (!conf_get_bool(mc->conf, CONF_nopty)) { in mainchan_open_confirmation()
171 mc->sc, true, mc->conf, mc->term_width, mc->term_height); in mainchan_open_confirmation()
172 mc->req_pty = true; in mainchan_open_confirmation()
175 for (val = conf_get_str_strs(mc->conf, CONF_environmt, NULL, &key); in mainchan_open_confirmation()
177 val = conf_get_str_strs(mc->conf, CONF_environmt, key, &key)) { in mainchan_open_confirmation()
178 sshfwd_send_env_var(mc->sc, true, key, val); in mainchan_open_confirmation()
179 mc->n_req_env++; in mainchan_open_confirmation()
181 if (mc->n_req_env) in mainchan_open_confirmation()
182 ppl_logevent("Sent %d environment variables", mc->n_req_env); in mainchan_open_confirmation()
184 cmd = conf_get_str(mc->conf, CONF_remote_cmd); in mainchan_open_confirmation()
185 if (conf_get_bool(mc->conf, CONF_ssh_subsys)) { in mainchan_open_confirmation()
186 retry_cmd_now = !sshfwd_start_subsystem(mc->sc, true, cmd); in mainchan_open_confirmation()
188 sshfwd_start_command(mc->sc, true, cmd); in mainchan_open_confirmation()
190 sshfwd_start_shell(mc->sc, true); in mainchan_open_confirmation()
194 mainchan_try_fallback_command(mc); in mainchan_open_confirmation()
196 mc->req_cmd_primary = true; in mainchan_open_confirmation()
199 ssh_set_ldisc_option(mc->cl, LD_ECHO, true); in mainchan_open_confirmation()
200 ssh_set_ldisc_option(mc->cl, LD_EDIT, true); in mainchan_open_confirmation()
201 mainchan_ready(mc); in mainchan_open_confirmation()
205 static void mainchan_try_fallback_command(mainchan *mc) in mainchan_try_fallback_command() argument
207 const char *cmd = conf_get_str(mc->conf, CONF_remote_cmd2); in mainchan_try_fallback_command()
208 if (conf_get_bool(mc->conf, CONF_ssh_subsys2)) { in mainchan_try_fallback_command()
209 sshfwd_start_subsystem(mc->sc, true, cmd); in mainchan_try_fallback_command()
211 sshfwd_start_command(mc->sc, true, cmd); in mainchan_try_fallback_command()
213 mc->req_cmd_fallback = true; in mainchan_try_fallback_command()
219 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_request_response() local
220 PacketProtocolLayer *ppl = mc->ppl; /* for ppl_logevent */ in mainchan_request_response()
222 if (mc->req_x11) { in mainchan_request_response()
223 mc->req_x11 = false; in mainchan_request_response()
227 ssh_enable_x_fwd(mc->cl); in mainchan_request_response()
234 if (mc->req_agent) { in mainchan_request_response()
235 mc->req_agent = false; in mainchan_request_response()
245 if (mc->req_pty) { in mainchan_request_response()
246 mc->req_pty = false; in mainchan_request_response()
250 mc->got_pty = true; in mainchan_request_response()
254 ssh_set_ldisc_option(mc->cl, LD_ECHO, true); in mainchan_request_response()
255 ssh_set_ldisc_option(mc->cl, LD_EDIT, true); in mainchan_request_response()
260 if (mc->n_env_replies < mc->n_req_env) { in mainchan_request_response()
261 int j = mc->n_env_replies++; in mainchan_request_response()
264 conf_get_str_nthstrkey(mc->conf, in mainchan_request_response()
266 mc->n_env_fails++; in mainchan_request_response()
269 if (mc->n_env_replies == mc->n_req_env) { in mainchan_request_response()
270 if (mc->n_env_fails == 0) { in mainchan_request_response()
272 } else if (mc->n_env_fails == mc->n_req_env) { in mainchan_request_response()
284 if (mc->req_cmd_primary) { in mainchan_request_response()
285 mc->req_cmd_primary = false; in mainchan_request_response()
289 mainchan_ready(mc); in mainchan_request_response()
290 } else if (*conf_get_str(mc->conf, CONF_remote_cmd2)) { in mainchan_request_response()
292 mainchan_try_fallback_command(mc); in mainchan_request_response()
298 ssh_sw_abort(mc->ppl->ssh, in mainchan_request_response()
304 if (mc->req_cmd_fallback) { in mainchan_request_response()
305 mc->req_cmd_fallback = false; in mainchan_request_response()
309 ssh_got_fallback_cmd(mc->ppl->ssh); in mainchan_request_response()
310 mainchan_ready(mc); in mainchan_request_response()
312 ssh_sw_abort(mc->ppl->ssh, in mainchan_request_response()
319 static void mainchan_ready(mainchan *mc) in mainchan_ready() argument
321 mc->ready = true; in mainchan_ready()
323 ssh_set_wants_user_input(mc->cl, true); in mainchan_ready()
324 ssh_ppl_got_user_input(mc->ppl); /* in case any is already queued */ in mainchan_ready()
327 if (mc->eof_pending) { in mainchan_ready()
328 mc->eof_pending = false; in mainchan_ready()
329 mainchan_special_cmd(mc, SS_EOF, 0); in mainchan_ready()
332 ssh_ldisc_update(mc->ppl->ssh); in mainchan_ready()
333 queue_idempotent_callback(&mc->ppl->ic_process_queue); in mainchan_ready()
339 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_open_failure() local
341 ssh_sw_abort_deferred(mc->ppl->ssh, in mainchan_open_failure()
349 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_send() local
350 return seat_output(mc->ppl->seat, is_stderr, data, length); in mainchan_send()
356 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_send_eof() local
357 PacketProtocolLayer *ppl = mc->ppl; /* for ppl_logevent */ in mainchan_send_eof()
359 if (!mc->eof_sent && (seat_eof(mc->ppl->seat) || mc->got_pty)) { in mainchan_send_eof()
367 sshfwd_write_eof(mc->sc); in mainchan_send_eof()
369 mc->eof_sent = true; in mainchan_send_eof()
370 ssh_set_wants_user_input(mc->cl, false); /* stop reading from stdin */ in mainchan_send_eof()
377 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_set_input_wanted() local
385 ssh_set_wants_user_input(mc->cl, wanted); in mainchan_set_input_wanted()
396 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_rcvd_exit_status() local
397 PacketProtocolLayer *ppl = mc->ppl; /* for ppl_logevent */ in mainchan_rcvd_exit_status()
399 ssh_got_exitcode(mc->ppl->ssh, status); in mainchan_rcvd_exit_status()
405 mainchan *mc, const char *sigdesc, in mainchan_log_exit_signal_common() argument
408 PacketProtocolLayer *ppl = mc->ppl; /* for ppl_logevent */ in mainchan_log_exit_signal_common()
421 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_rcvd_exit_signal() local
441 ssh_got_exitcode(mc->ppl->ssh, exitcode); in mainchan_rcvd_exit_signal()
447 mainchan_log_exit_signal_common(mc, signame_str, core_dumped, msg); in mainchan_rcvd_exit_signal()
456 mainchan *mc = container_of(chan, mainchan, chan); in mainchan_rcvd_exit_signal_numeric() local
459 ssh_got_exitcode(mc->ppl->ssh, 128 + signum); in mainchan_rcvd_exit_signal_numeric()
461 mainchan_log_exit_signal_common(mc, signum_str, core_dumped, msg); in mainchan_rcvd_exit_signal_numeric()
467 mainchan *mc, add_special_fn_t add_special, void *ctx) in mainchan_get_specials() argument
505 void mainchan_special_cmd(mainchan *mc, SessionSpecialCode code, int arg) in mainchan_special_cmd() argument
507 PacketProtocolLayer *ppl = mc->ppl; /* for ppl_logevent */ in mainchan_special_cmd()
511 if (!mc->ready) { in mainchan_special_cmd()
516 mc->eof_pending = true; in mainchan_special_cmd()
517 } else if (!mc->eof_sent) { in mainchan_special_cmd()
518 sshfwd_write_eof(mc->sc); in mainchan_special_cmd()
519 mc->eof_sent = true; in mainchan_special_cmd()
523 mc->sc, false, 0 /* default break length */); in mainchan_special_cmd()
526 sshfwd_send_signal(mc->sc, false, signame); in mainchan_special_cmd()
531 void mainchan_terminal_size(mainchan *mc, int width, int height) in mainchan_terminal_size() argument
533 mc->term_width = width; in mainchan_terminal_size()
534 mc->term_height = height; in mainchan_terminal_size()
536 if (mc->req_pty || mc->got_pty) in mainchan_terminal_size()
537 sshfwd_send_terminal_size_change(mc->sc, width, height); in mainchan_terminal_size()