diff --git a/libfreerdp-core/connection.c b/libfreerdp-core/connection.c index 62d9d4b9a..7e1769ee4 100644 --- a/libfreerdp-core/connection.c +++ b/libfreerdp-core/connection.c @@ -128,6 +128,8 @@ boolean rdp_client_redirect(rdpRdp* rdp) rdp_client_disconnect(rdp); + rdp_clear_joined_channels(rdp); + mcs_free(rdp->mcs); nego_free(rdp->nego); license_free(rdp->license); @@ -343,6 +345,22 @@ boolean rdp_client_connect_mcs_attach_user_confirm(rdpRdp* rdp, STREAM* s) return true; } +void rdp_clear_joined_channels(rdpRdp* rdp) +{ + int i; + if (rdp->mcs->user_channel_joined) + rdp->mcs->user_channel_joined = false; + + if (rdp->mcs->global_channel_joined) + rdp->mcs->global_channel_joined = false; + + for (i = 0; i < rdp->settings->num_channels; i++) + { + if (rdp->settings->channels[i].joined) + rdp->settings->channels[i].joined = false; + } +} + boolean rdp_client_connect_mcs_channel_join_confirm(rdpRdp* rdp, STREAM* s) { int i; diff --git a/libfreerdp-core/connection.h b/libfreerdp-core/connection.h index eb5c0460f..d097fbd97 100644 --- a/libfreerdp-core/connection.h +++ b/libfreerdp-core/connection.h @@ -50,6 +50,7 @@ boolean rdp_client_connect(rdpRdp* rdp); boolean rdp_client_redirect(rdpRdp* rdp); boolean rdp_client_connect_mcs_connect_response(rdpRdp* rdp, STREAM* s); boolean rdp_client_connect_mcs_attach_user_confirm(rdpRdp* rdp, STREAM* s); +void rdp_clear_joined_channels(rdpRdp* rdp); boolean rdp_client_connect_mcs_channel_join_confirm(rdpRdp* rdp, STREAM* s); boolean rdp_client_connect_license(rdpRdp* rdp, STREAM* s); boolean rdp_client_connect_demand_active(rdpRdp* rdp, STREAM* s);