]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - portfwd.c
first pass
[PuTTY.git] / portfwd.c
index e3e63e39aafbb3355e0c3c5fbc465bbede9e823f..8a73a182d55329ab33a0ab763ff6d3c89d1cac39 100644 (file)
--- a/portfwd.c
+++ b/portfwd.c
@@ -157,6 +157,21 @@ static int pfl_closing(Plug plug, const char *error_msg, int error_code,
     return 1;
 }
 
+static void wrap_send_port_open(void *channel, const char *hostname, int port,
+                                Socket s)
+{
+    char *peerinfo, *description;
+    peerinfo = sk_peer_info(s);
+    if (peerinfo) {
+        description = dupprintf("forwarding from %s", peerinfo);
+        sfree(peerinfo);
+    } else {
+        description = dupstr("forwarding");
+    }
+    ssh_send_port_open(channel, hostname, port, description);
+    sfree(description);
+}
+
 static int pfd_receive(Plug plug, int urgent, char *data, int len)
 {
     struct PortForwarding *pf = (struct PortForwarding *) plug;
@@ -371,7 +386,7 @@ static int pfd_receive(Plug plug, int urgent, char *data, int len)
            return 1;
        } else {
            /* asks to forward to the specified host/port for this */
-           ssh_send_port_open(pf->c, pf->hostname, pf->port, "forwarding");
+           wrap_send_port_open(pf->c, pf->hostname, pf->port, pf->s);
        }
        pf->dynamic = 0;
 
@@ -428,7 +443,8 @@ char *pfd_connect(struct PortForwarding **pf_ret, char *hostname,int port,
     /*
      * Try to find host.
      */
-    addr = name_lookup(hostname, port, &dummy_realhost, conf, addressfamily);
+    addr = name_lookup(hostname, port, &dummy_realhost, conf, addressfamily,
+                       NULL, NULL);
     if ((err = sk_addr_error(addr)) != NULL) {
         char *err_ret = dupstr(err);
        sk_addr_free(addr);
@@ -510,7 +526,7 @@ static int pfl_accepting(Plug p, accept_fn_t constructor, accept_ctx_t ctx)
            return 1;
        } else {
            /* asks to forward to the specified host/port for this */
-           ssh_send_port_open(pf->c, pf->hostname, pf->port, "forwarding");
+           wrap_send_port_open(pf->c, pf->hostname, pf->port, s);
        }
     }