From af570562288c811542781c409e7547ac55b8dbaa Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Thu, 11 Sep 2014 14:04:32 -0700 Subject: [PATCH] transport: exit transport loop when the session is activated. --- libfreerdp/core/rdp.c | 3 +++ libfreerdp/core/transport.c | 11 ++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libfreerdp/core/rdp.c b/libfreerdp/core/rdp.c index 170b93b60..5360d53d6 100644 --- a/libfreerdp/core/rdp.c +++ b/libfreerdp/core/rdp.c @@ -1153,7 +1153,10 @@ static int rdp_recv_callback(rdpTransport* transport, wStream* s, void* extra) status = rdp_recv_pdu(rdp, s); if ((status >= 0) && (rdp->finalize_sc_pdus == FINALIZE_SC_COMPLETE)) + { rdp_client_transition_to_state(rdp, CONNECTION_STATE_ACTIVE); + return 2; + } break; case CONNECTION_STATE_ACTIVE: diff --git a/libfreerdp/core/transport.c b/libfreerdp/core/transport.c index a7c0c938d..4ffe35a4f 100644 --- a/libfreerdp/core/transport.c +++ b/libfreerdp/core/transport.c @@ -1071,13 +1071,14 @@ int transport_check_fds(rdpTransport* transport) */ recv_status = transport->ReceiveCallback(transport, received, transport->ReceiveExtra); - - if (recv_status == 1) - { - return 1; /* session redirection */ - } Stream_Release(received); + /* session redirection or activation */ + if (recv_status == 1 || recv_status == 2) + { + return recv_status; + } + if (recv_status < 0) return -1; }