1
1

Handle Client-To-Server channel windowing.

Этот коммит содержится в:
Sara Golemon 2005-01-20 21:33:30 +00:00
родитель bfc2f5039e
Коммит 5f7470700e
2 изменённых файлов: 15 добавлений и 2 удалений

Просмотреть файл

@ -902,7 +902,7 @@ LIBSSH2_API int libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel, int stream_id
libssh2_error(session, LIBSSH2_ERROR_CHANNEL_EOF_SENT, "EOF has already been sight, data might be ignored", 0); libssh2_error(session, LIBSSH2_ERROR_CHANNEL_EOF_SENT, "EOF has already been sight, data might be ignored", 0);
} }
if (channel->blocking && channel->local.window_size_initial && (channel->local.window_size <= 0)) { if (channel->blocking && (channel->local.window_size <= 0)) {
/* twiddle our thumbs until there's window space available */ /* twiddle our thumbs until there's window space available */
if (libssh2_packet_read(session, 1) < 0) { if (libssh2_packet_read(session, 1) < 0) {
/* Error occured, disconnect? */ /* Error occured, disconnect? */
@ -925,7 +925,7 @@ LIBSSH2_API int libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel, int stream_id
/* Don't exceed the remote end's limits */ /* Don't exceed the remote end's limits */
/* REMEMBER local means local as the SOURCE of the data */ /* REMEMBER local means local as the SOURCE of the data */
if (channel->local.window_size_initial && (buflen > channel->local.window_size)) { if (buflen > channel->local.window_size) {
buflen = channel->local.window_size; buflen = channel->local.window_size;
} }
if (buflen > channel->local.packet_size) { if (buflen > channel->local.packet_size) {

Просмотреть файл

@ -475,6 +475,19 @@ static int libssh2_packet_add(LIBSSH2_SESSION *session, unsigned char *data, siz
return retval; return retval;
} }
break; break;
case SSH_MSG_CHANNEL_WINDOW_ADJUST:
{
LIBSSH2_CHANNEL *channel = libssh2_channel_locate(session, libssh2_ntohu32(data + 1));
unsigned long bytestoadd = libssh2_ntohu32(data + 5);
if (channel && bytestoadd) {
channel->local.window_size += bytestoadd;
}
LIBSSH2_FREE(session, data);
return 0;
}
break;
} }
packet = LIBSSH2_ALLOC(session, sizeof(LIBSSH2_PACKET)); packet = LIBSSH2_ALLOC(session, sizeof(LIBSSH2_PACKET));