#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)
{
*/
static int load_selected_session(struct sessionsaver_data *ssd,
char *savedsession,
- void *dlg, Config *cfg)
+ void *dlg, Config *cfg, int *maybe_launch)
{
int i = dlg_listbox_index(ssd->listbox, dlg);
int isdef;
return 0;
}
isdef = !strcmp(ssd->sesslist.sessions[i], "Default Settings");
- load_settings(ssd->sesslist.sessions[i], !isdef, cfg);
+ load_settings(ssd->sesslist.sessions[i], cfg);
if (!isdef) {
strncpy(savedsession, ssd->sesslist.sessions[i],
SAVEDSESSION_LEN);
savedsession[SAVEDSESSION_LEN-1] = '\0';
+ if (maybe_launch)
+ *maybe_launch = TRUE;
} else {
savedsession[0] = '\0';
+ if (maybe_launch)
+ *maybe_launch = FALSE;
}
dlg_refresh(NULL, dlg);
/* Restore the selection, which might have been clobbered by
dlg_listbox_select(ssd->listbox, dlg, top);
}
} else if (event == EVENT_ACTION) {
+ int mbl = FALSE;
if (!ssd->midsession &&
(ctrl == ssd->listbox ||
(ssd->loadbutton && ctrl == ssd->loadbutton))) {
* double-click on the list box _and_ that session
* contains a hostname.
*/
- if (load_selected_session(ssd, savedsession, dlg, cfg) &&
- (ctrl == ssd->listbox && cfg_launchable(cfg))) {
+ if (load_selected_session(ssd, savedsession, dlg, cfg, &mbl) &&
+ (mbl && ctrl == ssd->listbox && cfg_launchable(cfg))) {
dlg_end(dlg, 1); /* it's all over, and succeeded */
}
} else if (ctrl == ssd->savebutton) {
}
}
{
- char *errmsg = save_settings(savedsession, !isdef, cfg);
+ char *errmsg = save_settings(savedsession, cfg);
if (errmsg) {
dlg_error_msg(dlg, errmsg);
sfree(errmsg);
if (dlg_last_focused(ctrl, dlg) == ssd->listbox &&
!cfg_launchable(cfg)) {
Config cfg2;
- if (!load_selected_session(ssd, savedsession, dlg, &cfg2)) {
+ int mbl = FALSE;
+ if (!load_selected_session(ssd, savedsession, dlg,
+ &cfg2, &mbl)) {
dlg_beep(dlg);
return;
}
/* If at this point we have a valid session, go! */
- if (*cfg2.host) {
+ if (mbl && cfg_launchable(&cfg2)) {
*cfg = cfg2; /* structure copy */
cfg->remote_cmd_ptr = NULL;
dlg_end(dlg, 1);
if (!midsession) {
struct hostport *hp = (struct hostport *)
ctrl_alloc(b, sizeof(struct hostport));
- int i, gotssh;
s = ctrl_getset(b, "Session", "hostport",
"Specify the destination you want to connect to");
hp->port = c;
ctrl_columns(s, 1, 100);
- gotssh = FALSE;
- for (i = 0; backends[i].name; i++)
- if (backends[i].protocol == PROT_SSH) {
- gotssh = TRUE;
- break;
- }
- if (!gotssh) {
+ if (!have_backend(PROT_SSH)) {
ctrl_radiobuttons(s, "Connection type:", NO_SHORTCUT, 3,
HELPCTX(session_hostname),
config_protocolbuttons_handler, P(hp),
{
char *sshlogname, *sshrawlogname;
if ((midsession && protocol == PROT_SSH) ||
- (!midsession && backends[3].name != NULL)) {
+ (!midsession && have_backend(PROT_SSH))) {
sshlogname = "SSH packets";
sshrawlogname = "SSH packets and raw data";
} else {
dlg_stdcheckbox_handler, I(offsetof(Config,logflush)));
if ((midsession && protocol == PROT_SSH) ||
- (!midsession && backends[3].name != NULL)) {
+ (!midsession && have_backend(PROT_SSH))) {
s = ctrl_getset(b, "Session/Logging", "ssh",
"Options specific to SSH packet logging");
ctrl_checkbox(s, "Omit known password fields", 'k',
s = ctrl_getset(b, "Window", "size", "Set the size of the window");
ctrl_columns(s, 2, 50, 50);
- c = ctrl_editbox(s, "Rows", 'r', 100,
- HELPCTX(window_size),
- dlg_stdeditbox_handler, I(offsetof(Config,height)),I(-1));
- c->generic.column = 0;
c = ctrl_editbox(s, "Columns", 'm', 100,
HELPCTX(window_size),
dlg_stdeditbox_handler, I(offsetof(Config,width)), I(-1));
+ c->generic.column = 0;
+ c = ctrl_editbox(s, "Rows", 'r', 100,
+ HELPCTX(window_size),
+ dlg_stdeditbox_handler, I(offsetof(Config,height)),I(-1));
c->generic.column = 1;
ctrl_columns(s, 1, 100);
* when we're not doing SSH.
*/
- if (backends[3].name != NULL && (!midsession || protocol == PROT_SSH)) {
+ if (have_backend(PROT_SSH) && (!midsession || protocol == PROT_SSH)) {
/*
* The Connection/SSH panel.