Diff

Differences From Artifact [b6be145d02]:

To Artifact [998fc19e91]:


2836
2837
2838
2839
2840
2841
2842













2843
2844
2845
2846
2847
2848
2849

		c = find234(ssh_channels, &remoteid, ssh_channelfind);
		if (c && c->type == CHAN_SOCKDATA_DORMANT) {
		    c->remoteid = localid;
		    c->type = CHAN_SOCKDATA;
		    pfd_confirm(c->u.pfd.s);
		}














	    } else if (pktin.type == SSH1_MSG_CHANNEL_CLOSE ||
		       pktin.type == SSH1_MSG_CHANNEL_CLOSE_CONFIRMATION) {
		/* Remote side closes a channel. */
		unsigned i = GET_32BIT(pktin.body);
		struct ssh_channel *c;
		c = find234(ssh_channels, &i, ssh_channelfind);







>
>
>
>
>
>
>
>
>
>
>
>
>







2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862

		c = find234(ssh_channels, &remoteid, ssh_channelfind);
		if (c && c->type == CHAN_SOCKDATA_DORMANT) {
		    c->remoteid = localid;
		    c->type = CHAN_SOCKDATA;
		    pfd_confirm(c->u.pfd.s);
		}

	    } else if (pktin.type == SSH1_MSG_CHANNEL_OPEN_FAILURE) {
		unsigned int remoteid = GET_32BIT(pktin.body);
		unsigned int localid = GET_32BIT(pktin.body+4);
		struct ssh_channel *c;

		c = find234(ssh_channels, &remoteid, ssh_channelfind);
		if (c && c->type == CHAN_SOCKDATA_DORMANT) {
		    logevent("Forwarded connection refused by server");
		    pfd_close(c->u.pfd.s);
		    del234(ssh_channels, c);
		    sfree(c);
		}

	    } else if (pktin.type == SSH1_MSG_CHANNEL_CLOSE ||
		       pktin.type == SSH1_MSG_CHANNEL_CLOSE_CONFIRMATION) {
		/* Remote side closes a channel. */
		unsigned i = GET_32BIT(pktin.body);
		struct ssh_channel *c;
		c = find234(ssh_channels, &i, ssh_channelfind);
4769
4770
4771
4772
4773
4774
4775















4776
4777
4778
4779
4780
4781
4782
		c->remoteid = ssh2_pkt_getuint32();
		c->type = CHAN_SOCKDATA;
		c->closes = 0;
		c->v.v2.remwindow = ssh2_pkt_getuint32();
		c->v.v2.remmaxpkt = ssh2_pkt_getuint32();
		bufchain_init(&c->v.v2.outbuffer);
		pfd_confirm(c->u.pfd.s);















	    } else if (pktin.type == SSH2_MSG_CHANNEL_OPEN) {
		char *type;
		int typelen;
		char *error = NULL;
		struct ssh_channel *c;
		unsigned remid, winsize, pktsize;
		ssh2_pkt_getstring(&type, &typelen);







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
		c->remoteid = ssh2_pkt_getuint32();
		c->type = CHAN_SOCKDATA;
		c->closes = 0;
		c->v.v2.remwindow = ssh2_pkt_getuint32();
		c->v.v2.remmaxpkt = ssh2_pkt_getuint32();
		bufchain_init(&c->v.v2.outbuffer);
		pfd_confirm(c->u.pfd.s);
	    } else if (pktin.type == SSH2_MSG_CHANNEL_OPEN_FAILURE) {
		unsigned i = ssh2_pkt_getuint32();
		struct ssh_channel *c;
		c = find234(ssh_channels, &i, ssh_channelfind);
		if (!c)
		    continue;	       /* nonexistent channel */
		if (c->type != CHAN_SOCKDATA_DORMANT)
		    continue;	       /* dunno why they're failing this */

		logevent("Forwarded connection refused by server");

		pfd_close(c->u.pfd.s);

		del234(ssh_channels, c);
		sfree(c);
	    } else if (pktin.type == SSH2_MSG_CHANNEL_OPEN) {
		char *type;
		int typelen;
		char *error = NULL;
		struct ssh_channel *c;
		unsigned remid, winsize, pktsize;
		ssh2_pkt_getstring(&type, &typelen);