GUACAMOLE-484: Ensure disconnect reason code is checked for orderly RDP disconnect.
This commit is contained in:
parent
0f78b01e81
commit
d562cb7648
@ -763,21 +763,14 @@ static int guac_rdp_handle_connection(guac_client* client) {
|
|||||||
pthread_mutex_lock(&(rdp_client->rdp_lock));
|
pthread_mutex_lock(&(rdp_client->rdp_lock));
|
||||||
|
|
||||||
/* Check the libfreerdp fds */
|
/* Check the libfreerdp fds */
|
||||||
if (!freerdp_check_fds(rdp_inst)) {
|
if (!freerdp_check_fds(rdp_inst)
|
||||||
guac_client_abort(client,
|
|| !freerdp_channels_check_fds(channels, rdp_inst)) {
|
||||||
GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE,
|
|
||||||
"Error handling RDP file descriptors");
|
|
||||||
pthread_mutex_unlock(&(rdp_client->rdp_lock));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check channel fds */
|
/* Flag connection failure */
|
||||||
if (!freerdp_channels_check_fds(channels, rdp_inst)) {
|
wait_result = -1;
|
||||||
guac_client_abort(client,
|
|
||||||
GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE,
|
|
||||||
"Error handling RDP channel file descriptors");
|
|
||||||
pthread_mutex_unlock(&(rdp_client->rdp_lock));
|
pthread_mutex_unlock(&(rdp_client->rdp_lock));
|
||||||
return 1;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for channel events */
|
/* Check for channel events */
|
||||||
@ -801,13 +794,6 @@ static int guac_rdp_handle_connection(guac_client* client) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle RDP disconnect */
|
|
||||||
if (freerdp_shall_disconnect(rdp_inst)) {
|
|
||||||
guac_rdp_client_abort(client);
|
|
||||||
pthread_mutex_unlock(&(rdp_client->rdp_lock));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_mutex_unlock(&(rdp_client->rdp_lock));
|
pthread_mutex_unlock(&(rdp_client->rdp_lock));
|
||||||
|
|
||||||
/* Calculate time remaining in frame */
|
/* Calculate time remaining in frame */
|
||||||
@ -841,6 +827,17 @@ static int guac_rdp_handle_connection(guac_client* client) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test whether the RDP server is closing the connection */
|
||||||
|
pthread_mutex_lock(&(rdp_client->rdp_lock));
|
||||||
|
int connection_closing = freerdp_shall_disconnect(rdp_inst);
|
||||||
|
pthread_mutex_unlock(&(rdp_client->rdp_lock));
|
||||||
|
|
||||||
|
/* Close connection cleanly if server is disconnecting */
|
||||||
|
if (connection_closing) {
|
||||||
|
guac_rdp_client_abort(client);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* If an error occurred, fail */
|
/* If an error occurred, fail */
|
||||||
if (wait_result < 0)
|
if (wait_result < 0)
|
||||||
guac_client_abort(client, GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE,
|
guac_client_abort(client, GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE,
|
||||||
|
Loading…
Reference in New Issue
Block a user