X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/fae1a71b5a2fd1b2983be523350c3dae4b5e6903..a4451dd11df30dc2d0d262dd6c36642aa2a02b91:/config.c diff --git a/config.c b/config.c index 41bb4943..1fedd284 100644 --- a/config.c +++ b/config.c @@ -15,20 +15,6 @@ #define HOST_BOX_TITLE "Host Name (or IP address)" #define PORT_BOX_TITLE "Port" -/* - * Convenience function: determine whether this binary supports a - * given backend. - */ -static int have_backend(int protocol) -{ - struct backend_list *p = backends; - for (p = backends; p->name; p++) { - if (p->protocol == protocol) - return 1; - } - return 0; -} - static void config_host_handler(union control *ctrl, void *dlg, void *data, int event) { @@ -104,7 +90,7 @@ struct hostport { void config_protocolbuttons_handler(union control *ctrl, void *dlg, void *data, int event) { - int button, defport; + int button; Config *cfg = (Config *)data; struct hostport *hp = (struct hostport *)ctrl->radio.context.p; @@ -128,15 +114,20 @@ void config_protocolbuttons_handler(union control *ctrl, void *dlg, assert(button >= 0 && button < ctrl->radio.nbuttons); cfg->protocol = ctrl->radio.buttondata[button].i; if (oldproto != cfg->protocol) { - defport = -1; - switch (cfg->protocol) { - case PROT_SSH: defport = 22; break; - case PROT_TELNET: defport = 23; break; - case PROT_RLOGIN: defport = 513; break; - } - if (defport > 0 && cfg->port != defport) { - cfg->port = defport; - } + Backend *ob = backend_from_proto(oldproto); + Backend *nb = backend_from_proto(cfg->protocol); + assert(ob); + assert(nb); + /* Iff the user hasn't changed the port from the protocol + * default (if any), update it with the new protocol's + * default. + * (XXX: this isn't perfect; a default can become permanent + * by going via the serial backend. However, it helps with + * the common case of tabbing through the controls in order + * and setting a non-default port.) */ + if (cfg->port == ob->default_port && + cfg->port > 0 && nb->default_port > 0) + cfg->port = nb->default_port; } dlg_refresh(hp->host, dlg); dlg_refresh(hp->port, dlg); @@ -1166,7 +1157,7 @@ void setup_config_box(struct controlbox *b, int midsession, hp->port = c; ctrl_columns(s, 1, 100); - if (!have_backend(PROT_SSH)) { + if (!backend_from_proto(PROT_SSH)) { ctrl_radiobuttons(s, "Connection type:", NO_SHORTCUT, 3, HELPCTX(session_hostname), config_protocolbuttons_handler, P(hp), @@ -1257,7 +1248,7 @@ void setup_config_box(struct controlbox *b, int midsession, { char *sshlogname, *sshrawlogname; if ((midsession && protocol == PROT_SSH) || - (!midsession && have_backend(PROT_SSH))) { + (!midsession && backend_from_proto(PROT_SSH))) { sshlogname = "SSH packets"; sshrawlogname = "SSH packets and raw data"; } else { @@ -1293,7 +1284,7 @@ void setup_config_box(struct controlbox *b, int midsession, dlg_stdcheckbox_handler, I(offsetof(Config,logflush))); if ((midsession && protocol == PROT_SSH) || - (!midsession && have_backend(PROT_SSH))) { + (!midsession && backend_from_proto(PROT_SSH))) { s = ctrl_getset(b, "Session/Logging", "ssh", "Options specific to SSH packet logging"); ctrl_checkbox(s, "Omit known password fields", 'k', @@ -1912,7 +1903,7 @@ void setup_config_box(struct controlbox *b, int midsession, * when we're not doing SSH. */ - if (have_backend(PROT_SSH) && (!midsession || protocol == PROT_SSH)) { + if (backend_from_proto(PROT_SSH) && (!midsession || protocol == PROT_SSH)) { /* * The Connection/SSH panel.