Diff

Differences From Artifact [b6be145d02]:

To Artifact [998fc19e91]:


2836
2837
2838
2839
2840
2841
2842













2843
2844
2845
2846
2847
2848
2849
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
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);