Add a configuration option for TCP keepalives (SO_KEEPALIVE), default off.
[u/mdw/putty] / config.c
index 7085ffc..d3d76f5 100644 (file)
--- a/config.c
+++ b/config.c
@@ -358,6 +358,7 @@ static void sessionsaver_handler(union control *ctrl, void *dlg,
                /* If at this point we have a valid session, go! */
                if (*cfg2.host) {
                    *cfg = cfg2;       /* structure copy */
+                   cfg->remote_cmd_ptr = cfg->remote_cmd; /* nasty */
                    dlg_end(dlg, 1);
                } else
                    dlg_beep(dlg);
@@ -1036,6 +1037,12 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     ctrl_checkbox(s, "Disable remote-controlled character set configuration",
                  'r', HELPCTX(features_charset), dlg_stdcheckbox_handler,
                  I(offsetof(Config,no_remote_charset)));
+    ctrl_checkbox(s, "Disable Arabic text shaping",
+                 'l', HELPCTX(features_arabicshaping), dlg_stdcheckbox_handler,
+                 I(offsetof(Config, arabicshaping)));
+    ctrl_checkbox(s, "Disable bidirectional text display",
+                 'd', HELPCTX(features_bidi), dlg_stdcheckbox_handler,
+                 I(offsetof(Config, bidi)));
 
     /*
      * The Window panel.
@@ -1149,7 +1156,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                  'r', 100, HELPCTX(translation_codepage),
                  codepage_handler, P(NULL), P(NULL));
 
-    str = dupprintf("Adjust how %s displays line drawing characters", appname);
+    str = dupprintf("Adjust how %s handles line drawing characters", appname);
     s = ctrl_getset(b, "Window/Translation", "linedraw", str);
     sfree(str);
     ctrl_radiobuttons(s, "Handling of line drawing characters:", NO_SHORTCUT,1,
@@ -1159,17 +1166,14 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                      "Use Unicode line drawing code points",'u',I(VT_UNICODE),
                      "Poor man's line drawing (+, - and |)",'p',I(VT_POORMAN),
                      NULL);
+    ctrl_checkbox(s, "Copy and paste line drawing characters as lqqqk",'d',
+                 HELPCTX(selection_linedraw),
+                 dlg_stdcheckbox_handler, I(offsetof(Config,rawcnp)));
 
     /*
      * The Window/Selection panel.
      */
     ctrl_settitle(b, "Window/Selection", "Options controlling copy and paste");
-
-    s = ctrl_getset(b, "Window/Selection", "trans",
-                   "Translation of pasted characters");
-    ctrl_checkbox(s, "Paste VT100 line drawing chars as lqqqk",'d',
-                 HELPCTX(selection_linedraw),
-                 dlg_stdcheckbox_handler, I(offsetof(Config,rawcnp)));
        
     s = ctrl_getset(b, "Window/Selection", "mouse",
                    "Control use of mouse");
@@ -1264,6 +1268,10 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                         HELPCTX(connection_termtype),
                         dlg_stdeditbox_handler, I(offsetof(Config,termtype)),
                         I(sizeof(((Config *)0)->termtype)));
+           ctrl_editbox(s, "Terminal speeds", 's', 50,
+                        HELPCTX(connection_termspeed),
+                        dlg_stdeditbox_handler, I(offsetof(Config,termspeed)),
+                        I(sizeof(((Config *)0)->termspeed)));
            ctrl_editbox(s, "Auto-login username", 'u', 50,
                         HELPCTX(connection_username),
                         dlg_stdeditbox_handler, I(offsetof(Config,username)),
@@ -1284,6 +1292,10 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                          'n', HELPCTX(connection_nodelay),
                          dlg_stdcheckbox_handler,
                          I(offsetof(Config,tcp_nodelay)));
+           ctrl_checkbox(s, "Enable TCP keepalives (SO_KEEPALIVE option)",
+                         'p', HELPCTX(connection_tcpkeepalive),
+                         dlg_stdcheckbox_handler,
+                         I(offsetof(Config,tcp_keepalives)));
        }
 
     }
@@ -1368,10 +1380,6 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
        if (!midsession) {
            s = ctrl_getset(b, "Connection/Telnet", "data",
                            "Data to send to the server");
-           ctrl_editbox(s, "Terminal-speed string", 's', 50,
-                        HELPCTX(telnet_termspeed),
-                        dlg_stdeditbox_handler, I(offsetof(Config,termspeed)),
-                        I(sizeof(((Config *)0)->termspeed)));
            ctrl_text(s, "Environment variables:", HELPCTX(telnet_environ));
            ctrl_columns(s, 2, 80, 20);
            ed = (struct environ_data *)
@@ -1440,10 +1448,6 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
 
        s = ctrl_getset(b, "Connection/Rlogin", "data",
                        "Data to send to the server");
-       ctrl_editbox(s, "Terminal-speed string", 's', 50,
-                    HELPCTX(rlogin_termspeed),
-                    dlg_stdeditbox_handler, I(offsetof(Config,termspeed)),
-                    I(sizeof(((Config *)0)->termspeed)));
        ctrl_editbox(s, "Local username:", 'l', 50,
                     HELPCTX(rlogin_localuser),
                     dlg_stdeditbox_handler, I(offsetof(Config,localusername)),
@@ -1494,7 +1498,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                          cipherlist_handler, P(NULL));
        c->listbox.height = 6;
        
-       ctrl_checkbox(s, "Enable non-standard use of single-DES in SSH 2", 'i',
+       ctrl_checkbox(s, "Enable legacy use of single-DES in SSH 2", 'i',
                      HELPCTX(ssh_ciphers),
                      dlg_stdcheckbox_handler,
                      I(offsetof(Config,ssh2_des_cbc)));