X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/0e03ceff4e371364f17c49ea370b6475cb0b7230..533c7491240f2fd71d026e91f0a940f4729992fd:/windows/winplink.c diff --git a/windows/winplink.c b/windows/winplink.c index c784a5dc..0819934c 100644 --- a/windows/winplink.c +++ b/windows/winplink.c @@ -29,6 +29,10 @@ void fatalbox(char *p, ...) vfprintf(stderr, p, ap); va_end(ap); fputc('\n', stderr); + if (logctx) { + log_free(logctx); + logctx = NULL; + } cleanup_exit(1); } void modalfatalbox(char *p, ...) @@ -39,6 +43,10 @@ void modalfatalbox(char *p, ...) vfprintf(stderr, p, ap); va_end(ap); fputc('\n', stderr); + if (logctx) { + log_free(logctx); + logctx = NULL; + } cleanup_exit(1); } void connection_fatal(void *frontend, char *p, ...) @@ -49,6 +57,10 @@ void connection_fatal(void *frontend, char *p, ...) vfprintf(stderr, p, ap); va_end(ap); fputc('\n', stderr); + if (logctx) { + log_free(logctx); + logctx = NULL; + } cleanup_exit(1); } void cmdline_error(char *p, ...) @@ -179,6 +191,8 @@ static void usage(void) printf(" -m file read remote command(s) from file\n"); printf(" -s remote command is an SSH subsystem (SSH-2 only)\n"); printf(" -N don't start a shell/command (SSH-2 only)\n"); + printf(" -nc host:port\n"); + printf(" open tunnel in place of session (SSH-2 only)\n"); exit(1); } @@ -218,7 +232,7 @@ int stdin_gotdata(struct handle *h, void *data, int len) cleanup_exit(0); } noise_ultralight(len); - if (connopen && back->socket(backhandle) != NULL) { + if (connopen && back->connected(backhandle)) { if (len > 0) { return back->send(backhandle, data, len); } else { @@ -239,7 +253,7 @@ void stdouterr_sent(struct handle *h, int new_backlog) (h == stdout_handle ? "output" : "error")); cleanup_exit(0); } - if (connopen && back->socket(backhandle) != NULL) { + if (connopen && back->connected(backhandle)) { back->unthrottle(backhandle, (handle_backlog(stdout_handle) + handle_backlog(stderr_handle))); } @@ -319,7 +333,7 @@ int main(int argc, char **argv) errors = 1; } } else if (*p) { - if (!*cfg.host) { + if (!cfg_launchable(&cfg)) { char *q = p; /* * If the hostname starts with "telnet:", set the @@ -392,7 +406,7 @@ int main(int argc, char **argv) { Config cfg2; do_defaults(host, &cfg2); - if (loaded_session || cfg2.host[0] == '\0') { + if (loaded_session || !cfg_launchable(&cfg2)) { /* No settings for this host; use defaults */ /* (or session was already loaded with -load) */ strncpy(cfg.host, host, sizeof(cfg.host) - 1); @@ -446,7 +460,7 @@ int main(int argc, char **argv) if (errors) return 1; - if (!*cfg.host) { + if (!cfg_launchable(&cfg)) { usage(); } @@ -459,7 +473,7 @@ int main(int argc, char **argv) } /* See if host is of the form user@host */ - if (cfg.host[0] != '\0') { + if (cfg_launchable(&cfg)) { char *atsign = strrchr(cfg.host, '@'); /* Make sure we're not overflowing the user field */ if (atsign) { @@ -502,7 +516,7 @@ int main(int argc, char **argv) cfg.host[p1] = '\0'; } - if (!cfg.remote_cmd_ptr && !*cfg.remote_cmd) + if (!cfg.remote_cmd_ptr && !*cfg.remote_cmd && !*cfg.ssh_nc_host) flags |= FLAG_INTERACTIVE; /* @@ -536,6 +550,9 @@ int main(int argc, char **argv) return 1; } + logctx = log_init(NULL, &cfg); + console_provide_logctx(logctx); + /* * Start up the connection. */ @@ -553,9 +570,7 @@ int main(int argc, char **argv) fprintf(stderr, "Unable to open connection:\n%s", error); return 1; } - logctx = log_init(NULL, &cfg); back->provide_logctx(backhandle, logctx); - console_provide_logctx(logctx); sfree(realhost); } connopen = 1; @@ -577,8 +592,8 @@ int main(int argc, char **argv) * (The input one we leave until we're through the * authentication process.) */ - stdout_handle = handle_output_new(outhandle, stdouterr_sent, NULL); - stderr_handle = handle_output_new(errhandle, stdouterr_sent, NULL); + stdout_handle = handle_output_new(outhandle, stdouterr_sent, NULL, 0); + stderr_handle = handle_output_new(errhandle, stdouterr_sent, NULL, 0); main_thread_id = GetCurrentThreadId(); @@ -593,7 +608,8 @@ int main(int argc, char **argv) DWORD ticks; if (!sending && back->sendok(backhandle)) { - stdin_handle = handle_input_new(inhandle, stdin_gotdata, NULL); + stdin_handle = handle_input_new(inhandle, stdin_gotdata, NULL, + 0); sending = TRUE; } @@ -694,7 +710,7 @@ int main(int argc, char **argv) if (sending) handle_unthrottle(stdin_handle, back->sendbuffer(backhandle)); - if ((!connopen || back->socket(backhandle) == NULL) && + if ((!connopen || !back->connected(backhandle)) && handle_backlog(stdout_handle) + handle_backlog(stderr_handle) == 0) break; /* we closed the connection */ }