diff --git a/libfreerdp/core/connection.c b/libfreerdp/core/connection.c index 9db1fa45f..05a902f0f 100644 --- a/libfreerdp/core/connection.c +++ b/libfreerdp/core/connection.c @@ -424,7 +424,7 @@ BOOL rdp_client_redirect(rdpRdp* rdp) status = rdp_client_connect(rdp); - if (status && (context->instance->ConnectionCallbackState == 2)) + if (status && (context->instance->ConnectionCallbackState == CLIENT_STATE_POSTCONNECT_PASSED)) status = (freerdp_channels_post_connect(context->channels, context->instance) == CHANNEL_RC_OK); return status; @@ -447,7 +447,7 @@ BOOL rdp_client_reconnect(rdpRdp* rdp) status = rdp_client_connect(rdp); - if (status && (context->instance->ConnectionCallbackState == 2)) + if (status && (context->instance->ConnectionCallbackState == CLIENT_STATE_POSTCONNECT_PASSED)) status = (freerdp_channels_post_connect(channels, context->instance) == CHANNEL_RC_OK); return status; diff --git a/libfreerdp/core/connection.h b/libfreerdp/core/connection.h index 62aaea051..78dbba574 100644 --- a/libfreerdp/core/connection.h +++ b/libfreerdp/core/connection.h @@ -49,6 +49,14 @@ enum CONNECTION_STATE CONNECTION_STATE_ACTIVE }; +enum CLIENT_CONNECTION_STATE +{ + CLIENT_STATE_INITIAL, + CLIENT_STATE_PRECONNECT_PASSED, + CLIENT_STATE_POSTCONNECT_PASSED, + CLIENT_STATE_POSTDISCONNECT_PASSED +}; + FREERDP_LOCAL BOOL rdp_client_connect(rdpRdp* rdp); FREERDP_LOCAL BOOL rdp_client_disconnect(rdpRdp* rdp); FREERDP_LOCAL BOOL rdp_client_disconnect_and_clear(rdpRdp* rdp); diff --git a/libfreerdp/core/freerdp.c b/libfreerdp/core/freerdp.c index c8c88bab1..d6fb99bc8 100644 --- a/libfreerdp/core/freerdp.c +++ b/libfreerdp/core/freerdp.c @@ -157,6 +157,7 @@ BOOL freerdp_connect(freerdp* instance) return FALSE; /* We always set the return code to 0 before we start the connect sequence*/ + instance->ConnectionCallbackState = CLIENT_STATE_INITIAL; connectErrorCode = 0; instance->context->LastError = FREERDP_ERROR_SUCCESS; clearChannelError(instance->context); @@ -165,7 +166,7 @@ BOOL freerdp_connect(freerdp* instance) settings = instance->settings; instance->context->codecs = codecs_new(instance->context); IFCALLRET(instance->PreConnect, status, instance); - instance->ConnectionCallbackState++; + instance->ConnectionCallbackState = CLIENT_STATE_PRECONNECT_PASSED; if (status) status2 = freerdp_channels_pre_connect(instance->context->channels, @@ -213,7 +214,7 @@ BOOL freerdp_connect(freerdp* instance) } IFCALLRET(instance->PostConnect, status, instance); - instance->ConnectionCallbackState++; + instance->ConnectionCallbackState = CLIENT_STATE_POSTCONNECT_PASSED; if (status) status2 = freerdp_channels_post_connect(instance->context->channels, instance); @@ -503,7 +504,7 @@ BOOL freerdp_disconnect(freerdp* instance) } IFCALL(instance->PostDisconnect, instance); - instance->ConnectionCallbackState++; + instance->ConnectionCallbackState = CLIENT_STATE_POSTDISCONNECT_PASSED; if (instance->update->pcap_rfx) {