extern void x11_override_throttle(Socket s, int enable);
extern char *pfd_newconnect(Socket * s, char *hostname, int port, void *c);
-extern char *pfd_addforward(char *desthost, int destport, int port);
+extern char *pfd_addforward(char *desthost, int destport, int port,
+ void *backhandle);
extern void pfd_close(Socket s);
extern int pfd_send(Socket s, char *data, int len);
extern void pfd_confirm(Socket s);
Socket s;
+ void *ldisc;
+
unsigned char session_key[32];
int v1_compressing;
int v1_remote_protoflags;
}
if (sport && dport) {
if (type == 'L') {
- pfd_addforward(host, dport, sport);
+ pfd_addforward(host, dport, sport, ssh);
sprintf(buf, "Local port %.*s%.*s%d%.*s forwarding to"
" %s:%.*s%.*s%d%.*s",
sserv ? strlen(sports) : 0, sports,
if (ssh->eof_needed)
ssh_special(ssh, TS_EOF);
- ldisc_send(NULL, 0, 0); /* cause ldisc to notice changes */
+ if (ssh->ldisc)
+ ldisc_send(ssh->ldisc, NULL, 0, 0);/* cause ldisc to notice changes */
ssh->send_ok = 1;
ssh->channels = newtree234(ssh_channelcmp);
while (1) {
}
if (sport && dport) {
if (type == 'L') {
- pfd_addforward(host, dport, sport);
+ pfd_addforward(host, dport, sport, ssh);
sprintf(buf, "Local port %.*s%.*s%d%.*s forwarding to"
" %s:%.*s%.*s%d%.*s",
sserv ? strlen(sports) : 0, sports,
/*
* Transfer data!
*/
- ldisc_send(NULL, 0, 0); /* cause ldisc to notice changes */
+ if (ssh->ldisc)
+ ldisc_send(ssh->ldisc, NULL, 0, 0);/* cause ldisc to notice changes */
ssh->send_ok = 1;
while (1) {
crReturnV;
ssh->state = SSH_STATE_PREPACKET;
ssh->size_needed = FALSE;
ssh->eof_needed = FALSE;
+ ssh->ldisc = NULL;
{
static const struct Packet empty = { 0, 0, NULL, NULL, 0 };
ssh->pktin = ssh->pktout = empty;
break;
case SSH_STATE_SESSION:
if (!cfg.nopty) {
- if (!term)
- return;
if (ssh->version == 1) {
send_packet(ssh, SSH1_CMSG_WINDOW_SIZE,
PKT_INT, ssh->term_height,
}
}
-void ssh_send_port_open(void *handle, void *channel, char *hostname,
- int port, char *org)
+void ssh_send_port_open(void *channel, char *hostname, int port, char *org)
{
- Ssh ssh = (Ssh) handle;
struct ssh_channel *c = (struct ssh_channel *)channel;
+ Ssh ssh = c->ssh;
char buf[1024];
sprintf(buf, "Opening forwarded connection to %.512s:%d", hostname, port);
return FALSE;
}
+static void ssh_provide_ldisc(void *handle, void *ldisc)
+{
+ Ssh ssh = (Ssh) handle;
+ ssh->ldisc = ldisc;
+}
+
static int ssh_return_exitcode(void *handle)
{
Ssh ssh = (Ssh) handle;
ssh_return_exitcode,
ssh_sendok,
ssh_ldisc,
+ ssh_provide_ldisc,
ssh_unthrottle,
22
};