From 3b3660898d3490ed61d9c596ea87391c8cd12129 Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Mon, 19 Dec 2011 01:13:09 +0800 Subject: [PATCH] server: fix pdu processing during reactivation. --- libfreerdp-core/connection.c | 6 +----- libfreerdp-core/peer.c | 9 ++++++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libfreerdp-core/connection.c b/libfreerdp-core/connection.c index 4d1fca6b7..b12ece210 100644 --- a/libfreerdp-core/connection.c +++ b/libfreerdp-core/connection.c @@ -566,12 +566,8 @@ boolean rdp_server_accept_client_info(rdpRdp* rdp, STREAM* s) boolean rdp_server_accept_confirm_active(rdpRdp* rdp, STREAM* s) { - /** - * During reactivation sequence the client might sent some input before receiving - * the Deactivate All PDU. We need to ignore those noises here. - */ if (!rdp_recv_confirm_active(rdp, s)) - return true; + return false; rdp->state = CONNECTION_STATE_ACTIVE; update_reset_state(rdp->update); diff --git a/libfreerdp-core/peer.c b/libfreerdp-core/peer.c index 0ebb4e584..e85662da4 100644 --- a/libfreerdp-core/peer.c +++ b/libfreerdp-core/peer.c @@ -224,7 +224,14 @@ static boolean peer_recv_callback(rdpTransport* transport, STREAM* s, void* extr case CONNECTION_STATE_LICENSE: if (!rdp_server_accept_confirm_active(client->context->rdp, s)) - return false; + { + /** + * During reactivation sequence the client might sent some input or channel data + * before receiving the Deactivate All PDU. We need to process them as usual. + */ + stream_set_pos(s, 0); + return peer_recv_pdu(client, s); + } break; case CONNECTION_STATE_ACTIVE: