From 188fe4ed2bb87d2e412aacc62e5dfb7fd90f69d5 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Sat, 5 Sep 2015 14:57:30 +0200 Subject: [PATCH] Removed rdp disconnect, using unified abortEvent instead. --- libfreerdp/core/activation.c | 2 +- libfreerdp/core/capabilities.c | 4 ++-- libfreerdp/core/connection.c | 4 +++- libfreerdp/core/freerdp.c | 14 ++++---------- libfreerdp/core/gateway/rpc_client.c | 2 +- libfreerdp/core/peer.c | 2 +- libfreerdp/core/rdp.c | 9 ++++----- libfreerdp/core/rdp.h | 1 - 8 files changed, 16 insertions(+), 22 deletions(-) diff --git a/libfreerdp/core/activation.c b/libfreerdp/core/activation.c index e4ec05b12..97ea42657 100644 --- a/libfreerdp/core/activation.c +++ b/libfreerdp/core/activation.c @@ -318,7 +318,7 @@ BOOL rdp_recv_deactivate_all(rdpRdp* rdp, wStream* s) if (rdp_check_fds(rdp) < 0) return FALSE; - if (rdp->disconnect) + if (freerdp_shall_disconnect(rdp->instance)) break; } diff --git a/libfreerdp/core/capabilities.c b/libfreerdp/core/capabilities.c index 466184164..0192b51fe 100644 --- a/libfreerdp/core/capabilities.c +++ b/libfreerdp/core/capabilities.c @@ -3540,7 +3540,7 @@ BOOL rdp_recv_get_active_header(rdpRdp* rdp, wStream* s, UINT16* pChannelId) if (!rdp_read_header(rdp, s, &length, pChannelId)) return FALSE; - if (rdp->disconnect) + if (freerdp_shall_disconnect(rdp->instance)) return TRUE; if (rdp->settings->UseRdpSecurityLayer) @@ -3585,7 +3585,7 @@ BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s) if (!rdp_recv_get_active_header(rdp, s, &channelId)) return FALSE; - if (rdp->disconnect) + if (freerdp_shall_disconnect(rdp->instance)) return TRUE; if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource)) diff --git a/libfreerdp/core/connection.c b/libfreerdp/core/connection.c index d4d5e23aa..15fbe95ca 100644 --- a/libfreerdp/core/connection.c +++ b/libfreerdp/core/connection.c @@ -188,6 +188,8 @@ BOOL rdp_client_connect(rdpRdp* rdp) if (!rdp->settingsCopy) return FALSE; + ResetEvent(rdp->context->abortEvent); + nego_init(rdp->nego); nego_set_target(rdp->nego, settings->ServerHostname, settings->ServerPort); @@ -832,7 +834,7 @@ int rdp_client_connect_demand_active(rdpRdp* rdp, wStream* s) return rdp_recv_out_of_sequence_pdu(rdp, s); } - if (rdp->disconnect) + if (freerdp_shall_disconnect(rdp->instance)) return 0; if (!rdp_send_confirm_active(rdp)) diff --git a/libfreerdp/core/freerdp.c b/libfreerdp/core/freerdp.c index 7942082ae..d9550947e 100644 --- a/libfreerdp/core/freerdp.c +++ b/libfreerdp/core/freerdp.c @@ -74,11 +74,6 @@ BOOL freerdp_connect(freerdp* instance) rdp = instance->context->rdp; settings = instance->settings; - if (rdp) - rdp->disconnect = FALSE; - - ResetEvent(instance->context->abortEvent); - instance->context->codecs = codecs_new(instance->context); IFCALLRET(instance->PreConnect, status, instance); @@ -192,9 +187,6 @@ BOOL freerdp_abort_connect(freerdp* instance) if (!instance || !instance->context) return FALSE; - if (instance->context->rdp) - instance->context->rdp->disconnect = TRUE; - return SetEvent(instance->context->abortEvent); } @@ -392,9 +384,11 @@ BOOL freerdp_reconnect(freerdp* instance) BOOL freerdp_shall_disconnect(freerdp* instance) { - if (!instance || !instance->context || !instance->context->rdp) + if (!instance || !instance->context) return FALSE; - return instance->context->rdp->disconnect; + if (WaitForSingleObject(instance->context->abortEvent, 0) != WAIT_OBJECT_0) + return FALSE; + return TRUE; } FREERDP_API BOOL freerdp_focus_required(freerdp* instance) diff --git a/libfreerdp/core/gateway/rpc_client.c b/libfreerdp/core/gateway/rpc_client.c index 7c7613e24..427672b1a 100644 --- a/libfreerdp/core/gateway/rpc_client.c +++ b/libfreerdp/core/gateway/rpc_client.c @@ -340,7 +340,7 @@ int rpc_client_recv_fragment(rdpRpc* rpc, wStream* fragment) rpc->result = *((UINT32*) &buffer[StubOffset]); - rpc->context->rdp->disconnect = TRUE; + freerdp_abort_connect(rpc->context->instance); rpc->transport->tsg->state = TSG_STATE_TUNNEL_CLOSE_PENDING; EventArgsInit(&e, "freerdp"); e.code = 0; diff --git a/libfreerdp/core/peer.c b/libfreerdp/core/peer.c index f4c41ff97..84b4dc926 100644 --- a/libfreerdp/core/peer.c +++ b/libfreerdp/core/peer.c @@ -356,7 +356,7 @@ static int peer_recv_tpkt_pdu(freerdp_peer* client, wStream* s) return -1; } - if (rdp->disconnect) + if (freerdp_shall_disconnect(rdp->instance)) return 0; if (rdp->settings->UseRdpSecurityLayer) diff --git a/libfreerdp/core/rdp.c b/libfreerdp/core/rdp.c index be44ad5b9..f49ae99c1 100644 --- a/libfreerdp/core/rdp.c +++ b/libfreerdp/core/rdp.c @@ -307,7 +307,7 @@ BOOL rdp_read_header(rdpRdp* rdp, wStream* s, UINT16* length, UINT16* channelId) { if (code == X224_TPDU_DISCONNECT_REQUEST) { - rdp->disconnect = TRUE; + freerdp_abort_connect(rdp->instance); return TRUE; } @@ -341,7 +341,7 @@ BOOL rdp_read_header(rdpRdp* rdp, wStream* s, UINT16* length, UINT16* channelId) if (!rdp->instance) { - rdp->disconnect = TRUE; + freerdp_abort_connect(rdp->instance); return FALSE; } @@ -364,7 +364,7 @@ BOOL rdp_read_header(rdpRdp* rdp, wStream* s, UINT16* length, UINT16* channelId) } WLog_ERR(TAG, "DisconnectProviderUltimatum: reason: %d", reason); - rdp->disconnect = TRUE; + freerdp_abort_connect(rdp->instance); EventArgsInit(&e, "freerdp"); e.code = 0; @@ -1117,7 +1117,7 @@ static int rdp_recv_tpkt_pdu(rdpRdp* rdp, wStream* s) return -1; } - if (rdp->disconnect) + if (freerdp_shall_disconnect(rdp->instance)) return 0; if (rdp->autodetect->bandwidthMeasureStarted) @@ -1647,7 +1647,6 @@ void rdp_reset(rdpRdp* rdp) rdp->nego = nego_new(rdp->transport); rdp->mcs = mcs_new(rdp->transport); rdp->transport->layer = TRANSPORT_LAYER_TCP; - rdp->disconnect = FALSE; rdp->errorInfo = 0; rdp->deactivation_reactivation = 0; rdp->finalize_sc_pdus = 0; diff --git a/libfreerdp/core/rdp.h b/libfreerdp/core/rdp.h index 6ae6dc88b..f756220c5 100644 --- a/libfreerdp/core/rdp.h +++ b/libfreerdp/core/rdp.h @@ -171,7 +171,6 @@ struct rdp_rdp BYTE fips_decrypt_key[24]; UINT32 errorInfo; UINT32 finalize_sc_pdus; - BOOL disconnect; BOOL resendFocus; BOOL deactivation_reactivation; BOOL AwaitCapabilities;