Fix bug with setting window title on Unix that came in with r9214.
[u/mdw/putty] / raw.c
diff --git a/raw.c b/raw.c
index 31d7490..6eb605d 100644 (file)
--- a/raw.c
+++ b/raw.c
@@ -1,3 +1,7 @@
+/*
+ * "Raw" backend.
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -85,7 +89,7 @@ static void raw_sent(Plug plug, int bufsize)
  * freed by the caller.
  */
 static const char *raw_init(void *frontend_handle, void **backend_handle,
-                           Config *cfg,
+                           Conf *conf,
                            char *host, int port, char **realhost, int nodelay,
                            int keepalive)
 {
@@ -98,6 +102,8 @@ static const char *raw_init(void *frontend_handle, void **backend_handle,
     SockAddr addr;
     const char *err;
     Raw raw;
+    int addressfamily;
+    char *loghost;
 
     raw = snew(struct raw_backend_data);
     raw->fn = &fn_table;
@@ -106,19 +112,20 @@ static const char *raw_init(void *frontend_handle, void **backend_handle,
 
     raw->frontend = frontend_handle;
 
+    addressfamily = conf_get_int(conf, CONF_addressfamily);
     /*
      * Try to find host.
      */
     {
        char *buf;
        buf = dupprintf("Looking up host \"%s\"%s", host,
-                       (cfg->addressfamily == ADDRTYPE_IPV4 ? " (IPv4)" :
-                        (cfg->addressfamily == ADDRTYPE_IPV6 ? " (IPv6)" :
+                       (addressfamily == ADDRTYPE_IPV4 ? " (IPv4)" :
+                        (addressfamily == ADDRTYPE_IPV6 ? " (IPv6)" :
                          "")));
        logevent(raw->frontend, buf);
        sfree(buf);
     }
-    addr = name_lookup(host, port, realhost, cfg, cfg->addressfamily);
+    addr = name_lookup(host, port, realhost, conf, addressfamily);
     if ((err = sk_addr_error(addr)) != NULL) {
        sk_addr_free(addr);
        return err;
@@ -131,10 +138,27 @@ static const char *raw_init(void *frontend_handle, void **backend_handle,
      * Open socket.
      */
     raw->s = new_connection(addr, *realhost, port, 0, 1, nodelay, keepalive,
-                           (Plug) raw, cfg);
+                           (Plug) raw, conf);
     if ((err = sk_socket_error(raw->s)) != NULL)
        return err;
 
+    loghost = conf_get_str(conf, CONF_loghost);
+    if (*loghost) {
+       char *colon;
+
+       sfree(*realhost);
+       *realhost = dupstr(loghost);
+       colon = strrchr(*realhost, ':');
+       if (colon) {
+           /*
+            * FIXME: if we ever update this aspect of ssh.c for
+            * IPv6 literal management, this should change in line
+            * with it.
+            */
+           *colon++ = '\0';
+       }
+    }
+
     return NULL;
 }
 
@@ -150,7 +174,7 @@ static void raw_free(void *handle)
 /*
  * Stub routine (we don't have any need to reconfigure this backend).
  */
-static void raw_reconfig(void *handle, Config *cfg)
+static void raw_reconfig(void *handle, Conf *conf)
 {
 }
 
@@ -205,10 +229,10 @@ static const struct telnet_special *raw_get_specials(void *handle)
     return NULL;
 }
 
-static Socket raw_socket(void *handle)
+static int raw_connected(void *handle)
 {
     Raw raw = (Raw) handle;
-    return raw->s;
+    return raw->s != NULL;
 }
 
 static int raw_sendok(void *handle)
@@ -266,7 +290,7 @@ Backend raw_backend = {
     raw_size,
     raw_special,
     raw_get_specials,
-    raw_socket,
+    raw_connected,
     raw_exitcode,
     raw_sendok,
     raw_ldisc,
@@ -274,5 +298,7 @@ Backend raw_backend = {
     raw_provide_logctx,
     raw_unthrottle,
     raw_cfg_info,
-    1
+    "raw",
+    PROT_RAW,
+    0
 };