-#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
struct plug_function_table *fn;
/* the above variable absolutely *must* be the first in this structure */
void *c; /* (channel) data used by ssh.c */
+ void *backhandle; /* instance of SSH backend itself */
+ /* Note that backhandle need not be filled in if c is non-NULL */
Socket s;
char hostname[128];
int throttled, throttle_override;
/*
* Try to find host.
*/
- addr = sk_namelookup(hostname, &dummy_realhost);
+ addr = name_lookup(hostname, port, &dummy_realhost);
if ((err = sk_addr_error(addr)))
return err;
pr->throttled = pr->throttle_override = 0;
pr->ready = 1;
pr->c = c;
+ pr->backhandle = NULL; /* we shouldn't need this */
pr->s = *s = new_connection(addr, dummy_realhost, port, 0, 1, 0, (Plug) pr);
if ((err = sk_socket_error(*s))) {
pr->fn = &fn_table;
pr->c = NULL;
+ pr->backhandle = org->backhandle;
pr->s = s = sk_register(sock, (Plug) pr);
if ((err = sk_socket_error(s))) {
return err != NULL;
}
- pr->c = new_sock_channel(backhandle, s);
+ pr->c = new_sock_channel(org->backhandle, s);
strcpy(pr->hostname, org->hostname);
pr->port = org->port;
return 1;
} else {
/* asks to forward to the specified host/port for this */
- ssh_send_port_open(backhandle, pr->c, pr->hostname,
- pr->port, "forwarding");
+ ssh_send_port_open(pr->c, pr->hostname, pr->port, "forwarding");
}
return 0;
/* Add a new forwarding from port -> desthost:destport
- sets up a listener on the local machine on port
+ sets up a listener on the local machine on (srcaddr:)port
*/
-char *pfd_addforward(char *desthost, int destport, int port)
+char *pfd_addforward(char *desthost, int destport, char *srcaddr, int port,
+ void *backhandle)
{
static struct plug_function_table fn_table = {
pfd_closing,
pr->throttled = pr->throttle_override = 0;
pr->ready = 0;
pr->waiting = NULL;
+ pr->backhandle = backhandle;
- pr->s = s = new_listener(port, (Plug) pr, !cfg.lport_acceptall);
+ pr->s = s = new_listener(srcaddr, port, (Plug) pr, !cfg.lport_acceptall);
if ((err = sk_socket_error(s))) {
sfree(pr);
return err;