Yesterday's proxy enhancements also slightly nadgered the config
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 7 May 2003 12:07:23 +0000 (12:07 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 7 May 2003 12:07:23 +0000 (12:07 +0000)
box, in that it started to expand under the weight of proxy options.
Now fixed, by folding the SOCKS version selector into the general
proxy type selector so there's one single 5- or 6-way radio button
set split over two lines. settings.c has of course grown a backwards
compatibility wart to deal with legacy config data.

git-svn-id: svn://svn.tartarus.org/sgt/putty@3168 cda61777-01e9-0310-a592-d414129be87e

config.c
doc/config.but
proxy.c
putty.h
settings.c
unix/uxcfg.c

index e462ec2..7085ffc 100644 (file)
--- a/config.c
+++ b/config.c
@@ -1295,14 +1295,15 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
        ctrl_settitle(b, "Connection/Proxy",
                      "Options controlling proxy usage");
 
-       s = ctrl_getset(b, "Connection/Proxy", "basics", "Proxy basics");
-       ctrl_radiobuttons(s, "Proxy type:", 't', 4,
+       s = ctrl_getset(b, "Connection/Proxy", "basics", NULL);
+       ctrl_radiobuttons(s, "Proxy type:", 't', 3,
                          HELPCTX(proxy_type),
                          dlg_stdradiobutton_handler,
                          I(offsetof(Config, proxy_type)),
                          "None", I(PROXY_NONE),
+                         "SOCKS 4", I(PROXY_SOCKS4),
+                         "SOCKS 5", I(PROXY_SOCKS5),
                          "HTTP", I(PROXY_HTTP),
-                         "SOCKS", I(PROXY_SOCKS),
                          "Telnet", I(PROXY_TELNET),
                          NULL);
        ctrl_columns(s, 2, 80, 20);
@@ -1346,19 +1347,11 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                         I(offsetof(Config,proxy_password)),
                         I(sizeof(((Config *)0)->proxy_password)));
        c->editbox.password = 1;
-
-       s = ctrl_getset(b, "Connection/Proxy", "misc",
-                       "Miscellaneous proxy settings");
        ctrl_editbox(s, "Telnet command", 'm', 100,
                     HELPCTX(proxy_command),
                     dlg_stdeditbox_handler,
                     I(offsetof(Config,proxy_telnet_command)),
                     I(sizeof(((Config *)0)->proxy_telnet_command)));
-       ctrl_radiobuttons(s, "SOCKS Version", 'v', 2,
-                         HELPCTX(proxy_socksver),
-                         dlg_stdradiobutton_handler,
-                         I(offsetof(Config, proxy_socks_version)),
-                         "Version 5", I(5), "Version 4", I(4), NULL);
     }
 
     /*
index e4fd819..3850656 100644 (file)
@@ -1,4 +1,4 @@
-\versionid $Id: config.but,v 1.63 2003/04/26 13:22:25 simon Exp $
+\versionid $Id: config.but,v 1.64 2003/05/07 12:07:23 simon Exp $
 
 \C{config} Configuring PuTTY
 
@@ -1457,8 +1457,8 @@ connection.
 web server supporting the HTTP \cw{CONNECT} command, as documented
 in \W{http://www.ietf.org/rfc/rfc2817.txt}{RFC 2817}.
 
-\b Selecting \q{SOCKS} allows you to proxy your connections through
-a SOCKS server.
+\b Selecting \q{SOCKS 4} or \q{SOCKS 5} allows you to proxy your
+connections through a SOCKS server.
 
 \b Many firewalls implement a less formal type of proxy in which a
 user can make a Telnet connection directly to the firewall machine
@@ -1587,15 +1587,6 @@ port. Note that if you do not include the \c{%user} or \c{%pass}
 tokens in the Telnet command, then the \q{Username} and \q{Password}
 configuration fields will be ignored.
 
-\S{config-proxy-socksver} Selecting the version of the SOCKS protocol
-
-\cfg{winhelp-topic}{proxy.socksver}
-
-SOCKS servers exist in two versions: version 5
-(\W{http://www.ietf.org/rfc/rfc1928.txt}{RFC 1928}) and the earlier
-version 4. The \q{SOCKS Version} radio buttons allow you to select
-which one to use, if you have selected the SOCKS proxy type.
-
 \H{config-telnet} The Telnet panel
 
 The Telnet panel allows you to configure options that only apply to
diff --git a/proxy.c b/proxy.c
index 59f2abb..11054df 100644 (file)
--- a/proxy.c
+++ b/proxy.c
@@ -16,7 +16,9 @@
 
 #define do_proxy_dns(cfg) \
     (cfg->proxy_dns == FORCE_ON || \
-        (cfg->proxy_dns == AUTO && cfg->proxy_type != PROXY_SOCKS))
+        (cfg->proxy_dns == AUTO && \
+              cfg->proxy_type != PROXY_SOCKS4 && \
+              cfg->proxy_type != PROXY_SOCKS5))
 
 /*
  * Call this when proxy negotiation is complete, so that this
@@ -410,11 +412,10 @@ Socket new_connection(SockAddr addr, char *hostname,
        
        if (cfg->proxy_type == PROXY_HTTP) {
            ret->negotiate = proxy_http_negotiate;
-       } else if (cfg->proxy_type == PROXY_SOCKS) {
-           if (cfg->proxy_socks_version == 4)
-               ret->negotiate = proxy_socks4_negotiate;
-           else
-               ret->negotiate = proxy_socks5_negotiate;
+       } else if (cfg->proxy_type == PROXY_SOCKS4) {
+            ret->negotiate = proxy_socks4_negotiate;
+       } else if (cfg->proxy_type == PROXY_SOCKS5) {
+            ret->negotiate = proxy_socks5_negotiate;
        } else if (cfg->proxy_type == PROXY_TELNET) {
            ret->negotiate = proxy_telnet_negotiate;
        } else {
diff --git a/putty.h b/putty.h
index 1a02dbc..6d5a0a2 100644 (file)
--- a/putty.h
+++ b/putty.h
@@ -224,7 +224,8 @@ enum {
     /*
      * Proxy types.
      */
-    PROXY_NONE, PROXY_HTTP, PROXY_SOCKS, PROXY_TELNET, PROXY_CMD
+    PROXY_NONE, PROXY_SOCKS4, PROXY_SOCKS5,
+    PROXY_HTTP, PROXY_TELNET, PROXY_CMD
 };
 
 enum {
@@ -338,7 +339,6 @@ struct config_tag {
     char proxy_username[32];
     char proxy_password[32];
     char proxy_telnet_command[512];
-    int proxy_socks_version;
     /* SSH options */
     char remote_cmd[512];
     char remote_cmd2[512];            /* fallback if the first fails
index 1152926..216a3ee 100644 (file)
@@ -188,13 +188,12 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg)
     write_setting_s(sesskey, "ProxyExcludeList", cfg->proxy_exclude_list);
     write_setting_i(sesskey, "ProxyDNS", (cfg->proxy_dns+2)%3);
     write_setting_i(sesskey, "ProxyLocalhost", cfg->even_proxy_localhost);
-    write_setting_i(sesskey, "ProxyType", cfg->proxy_type);
+    write_setting_i(sesskey, "ProxyMethod", cfg->proxy_type);
     write_setting_s(sesskey, "ProxyHost", cfg->proxy_host);
     write_setting_i(sesskey, "ProxyPort", cfg->proxy_port);
     write_setting_s(sesskey, "ProxyUsername", cfg->proxy_username);
     write_setting_s(sesskey, "ProxyPassword", cfg->proxy_password);
     write_setting_s(sesskey, "ProxyTelnetCommand", cfg->proxy_telnet_command);
-    write_setting_i(sesskey, "ProxySOCKSVersion", cfg->proxy_socks_version);
 
     {
        char buf[2 * sizeof(cfg->environmt)], *p, *q;
@@ -414,7 +413,26 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg)
         sizeof(cfg->proxy_exclude_list));
     gppi(sesskey, "ProxyDNS", 1, &i); cfg->proxy_dns = (i+1)%3;
     gppi(sesskey, "ProxyLocalhost", 0, &cfg->even_proxy_localhost);
-    gppi(sesskey, "ProxyType", PROXY_NONE, &cfg->proxy_type);
+    gppi(sesskey, "ProxyMethod", -1, &cfg->proxy_type);
+    if (cfg->proxy_type == -1) {
+        int i;
+        gppi(sesskey, "ProxyType", -1, &i);
+        if (i == 0)
+            cfg->proxy_type = PROXY_NONE;
+        else if (i == 1)
+            cfg->proxy_type = PROXY_HTTP;
+        else if (i == 3)
+            cfg->proxy_type = PROXY_TELNET;
+        else if (i == 4)
+            cfg->proxy_type = PROXY_CMD;
+        else {
+            gppi(sesskey, "ProxySOCKSVersion", 5, &i);
+            if (i == 5)
+                cfg->proxy_type = PROXY_SOCKS5;
+            else
+                cfg->proxy_type = PROXY_SOCKS4;
+        }
+    }
     gpps(sesskey, "ProxyHost", "proxy", cfg->proxy_host,
         sizeof(cfg->proxy_host));
     gppi(sesskey, "ProxyPort", 80, &cfg->proxy_port);
@@ -424,7 +442,6 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg)
         sizeof(cfg->proxy_password));
     gpps(sesskey, "ProxyTelnetCommand", "connect %host %port\\n",
         cfg->proxy_telnet_command, sizeof(cfg->proxy_telnet_command));
-    gppi(sesskey, "ProxySOCKSVersion", 5, &cfg->proxy_socks_version);
 
     {
        char buf[2 * sizeof(cfg->environmt)], *p, *q;
index 1bf58b7..8d8d65e 100644 (file)
@@ -130,7 +130,7 @@ void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
      * Unix supports a local-command proxy. This also means we must
      * adjust the text on the `Telnet command' control.
      */
-    s = ctrl_getset(b, "Connection/Proxy", "basics", "Proxy basics");
+    s = ctrl_getset(b, "Connection/Proxy", "basics", NULL);
     {
        int i;
        for (i = 0; i < s->ncontrols; i++) {
@@ -139,7 +139,6 @@ void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
                c->generic.context.i == offsetof(Config, proxy_type)) {
                assert(c->generic.handler == dlg_stdradiobutton_handler);
                c->radio.nbuttons++;
-               c->radio.ncolumns++;
                c->radio.buttons =
                    sresize(c->radio.buttons, c->radio.nbuttons, char *);
                c->radio.buttons[c->radio.nbuttons-1] =
@@ -150,11 +149,7 @@ void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
                break;
            }
        }
-    }
-    s = ctrl_getset(b, "Connection/Proxy", "misc",
-                   "Miscellaneous proxy settings");
-    {
-       int i;
+
        for (i = 0; i < s->ncontrols; i++) {
            c = s->ctrls[i];
            if (c->generic.type == CTRL_EDITBOX &&