1
1

Also deal with GLOBAL_REQUEST keep-alives.

Этот коммит содержится в:
Simon Josefsson 2010-01-28 15:03:24 +01:00
родитель cc7f90f1d4
Коммит f6fab0d9ea
2 изменённых файлов: 28 добавлений и 1 удалений

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

@ -211,7 +211,8 @@ typedef enum
libssh2_NB_state_jump1,
libssh2_NB_state_jump2,
libssh2_NB_state_jump3,
libssh2_NB_state_jump4
libssh2_NB_state_jump4,
libssh2_NB_state_jump5
} libssh2_nonblocking_states;
typedef struct packet_require_state_t

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

@ -486,6 +486,8 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
goto libssh2_packet_add_jump_point3;
} else if (session->packAdd_state == libssh2_NB_state_jump4) {
goto libssh2_packet_add_jump_point4;
} else if (session->packAdd_state == libssh2_NB_state_jump5) {
goto libssh2_packet_add_jump_point5;
}
/* FIXME: I've noticed that DATA is accessed without proper
@ -598,6 +600,30 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
}
break;
case SSH_MSG_GLOBAL_REQUEST:
{
uint32_t strlen = _libssh2_ntohu32(data + 1);
unsigned char want_reply = data[5 + strlen];
_libssh2_debug(session,
LIBSSH2_TRACE_CONN,
"Received global request type %.*s (wr %X)",
strlen, data + 5, want_reply);
if (want_reply) {
libssh2_packet_add_jump_point5:
session->packAdd_state = libssh2_NB_state_jump5;
data[0] = SSH_MSG_REQUEST_FAILURE;
rc = _libssh2_transport_write(session, data, 1);
if (rc == PACKET_EAGAIN)
return rc;
LIBSSH2_FREE(session, data);
session->packAdd_state = libssh2_NB_state_idle;
return 0;
}
}
break;
case SSH_MSG_CHANNEL_EXTENDED_DATA:
/* streamid(4) */
session->packAdd_data_head += 4;