Also deal with GLOBAL_REQUEST keep-alives.
This commit is contained in:
parent
cc7f90f1d4
commit
f6fab0d9ea
@ -211,7 +211,8 @@ typedef enum
|
|||||||
libssh2_NB_state_jump1,
|
libssh2_NB_state_jump1,
|
||||||
libssh2_NB_state_jump2,
|
libssh2_NB_state_jump2,
|
||||||
libssh2_NB_state_jump3,
|
libssh2_NB_state_jump3,
|
||||||
libssh2_NB_state_jump4
|
libssh2_NB_state_jump4,
|
||||||
|
libssh2_NB_state_jump5
|
||||||
} libssh2_nonblocking_states;
|
} libssh2_nonblocking_states;
|
||||||
|
|
||||||
typedef struct packet_require_state_t
|
typedef struct packet_require_state_t
|
||||||
|
26
src/packet.c
26
src/packet.c
@ -486,6 +486,8 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
|
|||||||
goto libssh2_packet_add_jump_point3;
|
goto libssh2_packet_add_jump_point3;
|
||||||
} else if (session->packAdd_state == libssh2_NB_state_jump4) {
|
} else if (session->packAdd_state == libssh2_NB_state_jump4) {
|
||||||
goto libssh2_packet_add_jump_point4;
|
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
|
/* FIXME: I've noticed that DATA is accessed without proper
|
||||||
@ -598,6 +600,30 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
|
|||||||
}
|
}
|
||||||
break;
|
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:
|
case SSH_MSG_CHANNEL_EXTENDED_DATA:
|
||||||
/* streamid(4) */
|
/* streamid(4) */
|
||||||
session->packAdd_data_head += 4;
|
session->packAdd_data_head += 4;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user