version 1.69, 2000/09/21 11:25:33 |
version 1.70, 2000/09/28 18:03:18 |
|
|
/* There are no free slots. Take last+1 slot and expand the array. */ |
/* There are no free slots. Take last+1 slot and expand the array. */ |
found = channels_alloc; |
found = channels_alloc; |
channels_alloc += 10; |
channels_alloc += 10; |
debug("channel: expanding %d", channels_alloc); |
debug2("channel: expanding %d", channels_alloc); |
channels = xrealloc(channels, channels_alloc * sizeof(Channel)); |
channels = xrealloc(channels, channels_alloc * sizeof(Channel)); |
for (i = found; i < channels_alloc; i++) |
for (i = found; i < channels_alloc; i++) |
channels[i].type = SSH_CHANNEL_FREE; |
channels[i].type = SSH_CHANNEL_FREE; |
|
|
buffer_len(&c->extended) > 0) { |
buffer_len(&c->extended) > 0) { |
len = write(c->efd, buffer_ptr(&c->extended), |
len = write(c->efd, buffer_ptr(&c->extended), |
buffer_len(&c->extended)); |
buffer_len(&c->extended)); |
debug("channel %d: written %d to efd %d", |
debug2("channel %d: written %d to efd %d", |
c->self, len, c->efd); |
c->self, len, c->efd); |
if (len > 0) { |
if (len > 0) { |
buffer_consume(&c->extended, len); |
buffer_consume(&c->extended, len); |
|
|
} else if (c->extended_usage == CHAN_EXTENDED_READ && |
} else if (c->extended_usage == CHAN_EXTENDED_READ && |
FD_ISSET(c->efd, readset)) { |
FD_ISSET(c->efd, readset)) { |
len = read(c->efd, buf, sizeof(buf)); |
len = read(c->efd, buf, sizeof(buf)); |
debug("channel %d: read %d from efd %d", |
debug2("channel %d: read %d from efd %d", |
c->self, len, c->efd); |
c->self, len, c->efd); |
if (len == 0) { |
if (len == 0) { |
debug("channel %d: closing efd %d", |
debug("channel %d: closing efd %d", |
|
|
packet_put_int(c->remote_id); |
packet_put_int(c->remote_id); |
packet_put_int(c->local_consumed); |
packet_put_int(c->local_consumed); |
packet_send(); |
packet_send(); |
debug("channel %d: window %d sent adjust %d", |
debug2("channel %d: window %d sent adjust %d", |
c->self, c->local_window, |
c->self, c->local_window, |
c->local_consumed); |
c->local_consumed); |
c->local_window += c->local_consumed; |
c->local_window += c->local_consumed; |
|
|
xfree(data); |
xfree(data); |
return; |
return; |
} |
} |
debug("channel %d: rcvd ext data %d", c->self, data_len); |
debug2("channel %d: rcvd ext data %d", c->self, data_len); |
c->local_window -= data_len; |
c->local_window -= data_len; |
buffer_append(&c->extended, data, data_len); |
buffer_append(&c->extended, data, data_len); |
xfree(data); |
xfree(data); |
|
|
c->remote_maxpacket = packet_get_int(); |
c->remote_maxpacket = packet_get_int(); |
packet_done(); |
packet_done(); |
if (c->cb_fn != NULL && c->cb_event == type) { |
if (c->cb_fn != NULL && c->cb_event == type) { |
debug("callback start"); |
debug2("callback start"); |
c->cb_fn(c->self, c->cb_arg); |
c->cb_fn(c->self, c->cb_arg); |
debug("callback done"); |
debug2("callback done"); |
} |
} |
debug("channel %d: open confirm rwindow %d rmax %d", c->self, |
debug("channel %d: open confirm rwindow %d rmax %d", c->self, |
c->remote_window, c->remote_maxpacket); |
c->remote_window, c->remote_maxpacket); |
|
|
packet_disconnect("Received request for " |
packet_disconnect("Received request for " |
"non-open channel %d.", id); |
"non-open channel %d.", id); |
if (c->cb_fn != NULL && c->cb_event == type) { |
if (c->cb_fn != NULL && c->cb_event == type) { |
debug("callback start"); |
debug2("callback start"); |
c->cb_fn(c->self, c->cb_arg); |
c->cb_fn(c->self, c->cb_arg); |
debug("callback done"); |
debug2("callback done"); |
} else { |
} else { |
char *service = packet_get_string(NULL); |
char *service = packet_get_string(NULL); |
debug("channel: %d rcvd request for %s", c->self, service); |
debug("channel: %d rcvd request for %s", c->self, service); |
debug("cb_fn %p cb_event %d", c->cb_fn , c->cb_event); |
debug("cb_fn %p cb_event %d", c->cb_fn , c->cb_event); |
xfree(service); |
xfree(service); |
} |
} |
} |
} |
|
|
} |
} |
adjust = packet_get_int(); |
adjust = packet_get_int(); |
packet_done(); |
packet_done(); |
debug("channel %d: rcvd adjust %d", id, adjust); |
debug2("channel %d: rcvd adjust %d", id, adjust); |
c->remote_window += adjust; |
c->remote_window += adjust; |
} |
} |
|
|