334 lines
12 KiB
Diff
334 lines
12 KiB
Diff
From fe4d5599a9aec8bcd2ad53d8e124630a53cd8394 Mon Sep 17 00:00:00 2001
|
|
From: Christophe Fergeau <cfergeau@redhat.com>
|
|
Date: Wed, 9 Jan 2019 14:01:26 +0100
|
|
Subject: [PATCH] conn: Use vnc_connection_has_error() extensively
|
|
|
|
It's better to call this helper rather than directly checking for
|
|
priv->coroutine_stop.
|
|
|
|
Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
|
|
(cherry picked from commit ad6478a1e522f5e0c2f396ac3600dc35df5871a8)
|
|
Resolves: rhbz#1688275
|
|
---
|
|
src/vncconnection.c | 77 ++++++++++++++++++++++-----------------------
|
|
1 file changed, 37 insertions(+), 40 deletions(-)
|
|
|
|
diff --git a/src/vncconnection.c b/src/vncconnection.c
|
|
index fd7468b..bbf4373 100644
|
|
--- a/src/vncconnection.c
|
|
+++ b/src/vncconnection.c
|
|
@@ -736,7 +736,7 @@ static int vnc_connection_read_wire(VncConnection *conn, void *data, size_t len)
|
|
|
|
reread:
|
|
|
|
- if (priv->coroutine_stop) return -EINVAL;
|
|
+ if (vnc_connection_has_error(conn)) return -EINVAL;
|
|
|
|
if (priv->tls_session) {
|
|
ret = gnutls_read(priv->tls_session, data, len);
|
|
@@ -885,7 +885,7 @@ static int vnc_connection_read(VncConnection *conn, void *data, size_t len)
|
|
char *ptr = data;
|
|
size_t offset = 0;
|
|
|
|
- if (priv->coroutine_stop) return -EINVAL;
|
|
+ if (vnc_connection_has_error(conn)) return -EINVAL;
|
|
|
|
while (offset < len) {
|
|
size_t tmp;
|
|
@@ -941,7 +941,7 @@ static void vnc_connection_flush_wire(VncConnection *conn,
|
|
int ret;
|
|
gboolean blocking = FALSE;
|
|
|
|
- if (priv->coroutine_stop) return;
|
|
+ if (vnc_connection_has_error(conn)) return;
|
|
|
|
if (priv->tls_session) {
|
|
ret = gnutls_write(priv->tls_session,
|
|
@@ -2878,10 +2878,9 @@ static void vnc_connection_tight_update(VncConnection *conn,
|
|
|
|
static void vnc_connection_update(VncConnection *conn, int x, int y, int width, int height)
|
|
{
|
|
- VncConnectionPrivate *priv = conn->priv;
|
|
struct signal_data sigdata;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
VNC_DEBUG("Notify update area (%dx%d) at location %d,%d", width, height, x, y);
|
|
@@ -2896,10 +2895,9 @@ static void vnc_connection_update(VncConnection *conn, int x, int y, int width,
|
|
|
|
static void vnc_connection_bell(VncConnection *conn)
|
|
{
|
|
- VncConnectionPrivate *priv = conn->priv;
|
|
struct signal_data sigdata;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
VNC_DEBUG("Server beep");
|
|
@@ -2911,11 +2909,10 @@ static void vnc_connection_server_cut_text(VncConnection *conn,
|
|
const void *data,
|
|
size_t len)
|
|
{
|
|
- VncConnectionPrivate *priv = conn->priv;
|
|
struct signal_data sigdata;
|
|
GString *text;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
text = g_string_new_len ((const gchar *)data, len);
|
|
@@ -2933,7 +2930,7 @@ static void vnc_connection_resize(VncConnection *conn, int width, int height)
|
|
|
|
VNC_DEBUG("Desktop resize w=%d h=%d", width, height);
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
priv->width = width;
|
|
@@ -2949,7 +2946,7 @@ static void vnc_connection_pixel_format(VncConnection *conn)
|
|
VncConnectionPrivate *priv = conn->priv;
|
|
struct signal_data sigdata;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
sigdata.params.pixelFormat = &priv->fmt;
|
|
@@ -2967,7 +2964,7 @@ static void vnc_connection_pointer_type_change(VncConnection *conn, gboolean abs
|
|
return;
|
|
priv->absPointer = absPointer;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
sigdata.params.absPointer = absPointer;
|
|
@@ -3028,7 +3025,7 @@ static void vnc_connection_rich_cursor(VncConnection *conn, guint16 x, guint16 y
|
|
priv->cursor = vnc_cursor_new(pixbuf, x, y, width, height);
|
|
}
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
sigdata.params.cursor = priv->cursor;
|
|
@@ -3093,7 +3090,7 @@ static void vnc_connection_xcursor(VncConnection *conn, guint16 x, guint16 y, gu
|
|
priv->cursor = vnc_cursor_new(pixbuf, x, y, width, height);
|
|
}
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return;
|
|
|
|
sigdata.params.cursor = priv->cursor;
|
|
@@ -3405,7 +3402,7 @@ static gboolean vnc_connection_server_message(VncConnection *conn)
|
|
|
|
n_type = vnc_connection_read_u8(conn);
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
break;
|
|
|
|
switch (n_type) {
|
|
@@ -3423,7 +3420,7 @@ static gboolean vnc_connection_server_message(VncConnection *conn)
|
|
n_length, 1024 * 1024);
|
|
break;
|
|
}
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
break;
|
|
|
|
if (!priv->audio) {
|
|
@@ -3491,7 +3488,7 @@ static gboolean vnc_connection_has_credentials(gpointer data)
|
|
VncConnection *conn = data;
|
|
VncConnectionPrivate *priv = conn->priv;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return TRUE;
|
|
if (priv->want_cred_username && !priv->cred_username)
|
|
return FALSE;
|
|
@@ -3508,7 +3505,7 @@ static gboolean vnc_connection_gather_credentials(VncConnection *conn)
|
|
|
|
VNC_DEBUG("Checking if credentials are needed");
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
|
|
if (!vnc_connection_has_credentials(conn)) {
|
|
@@ -3546,7 +3543,7 @@ static gboolean vnc_connection_gather_credentials(VncConnection *conn)
|
|
|
|
g_value_array_free(authCred);
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
VNC_DEBUG("Waiting for missing credentials");
|
|
g_condition_wait(vnc_connection_has_credentials, conn);
|
|
@@ -3579,13 +3576,13 @@ static gboolean vnc_connection_check_auth_result(VncConnection *conn)
|
|
vnc_connection_read(conn, reason, len);
|
|
reason[len] = '\0';
|
|
VNC_DEBUG("Fail %s", reason);
|
|
- if (!priv->coroutine_stop) {
|
|
+ if (!vnc_connection_has_error(conn)) {
|
|
vnc_connection_set_error(conn, "%s", reason);
|
|
vnc_connection_auth_failure(conn, reason);
|
|
}
|
|
} else {
|
|
VNC_DEBUG("Fail auth no result");
|
|
- if (!priv->coroutine_stop) {
|
|
+ if (!vnc_connection_has_error(conn)) {
|
|
vnc_connection_set_error(conn, "%s", "Unknown authentication failure");
|
|
vnc_connection_auth_failure(conn, "Unknown authentication failure");
|
|
}
|
|
@@ -4197,7 +4194,7 @@ static gboolean vnc_connection_perform_auth_sasl(VncConnection *conn)
|
|
|
|
/* Get the supported mechanisms from the server */
|
|
mechlistlen = vnc_connection_read_u32(conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
goto error;
|
|
if (mechlistlen > SASL_MAX_MECHLIST_LEN) {
|
|
vnc_connection_set_error(conn,
|
|
@@ -4209,7 +4206,7 @@ static gboolean vnc_connection_perform_auth_sasl(VncConnection *conn)
|
|
mechlist = g_malloc(mechlistlen+1);
|
|
vnc_connection_read(conn, mechlist, mechlistlen);
|
|
mechlist[mechlistlen] = '\0';
|
|
- if (priv->coroutine_stop) {
|
|
+ if (vnc_connection_has_error(conn)) {
|
|
g_free(mechlist);
|
|
mechlist = NULL;
|
|
goto error;
|
|
@@ -4266,14 +4263,14 @@ static gboolean vnc_connection_perform_auth_sasl(VncConnection *conn)
|
|
vnc_connection_write_u32(conn, 0);
|
|
}
|
|
vnc_connection_flush(conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
goto error;
|
|
|
|
|
|
VNC_DEBUG("%s", "Getting sever start negotiation reply");
|
|
/* Read the 'START' message reply from server */
|
|
serverinlen = vnc_connection_read_u32(conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
goto error;
|
|
if (serverinlen > SASL_MAX_DATA_LEN) {
|
|
vnc_connection_set_error(conn,
|
|
@@ -4292,7 +4289,7 @@ static gboolean vnc_connection_perform_auth_sasl(VncConnection *conn)
|
|
serverin = NULL;
|
|
}
|
|
complete = vnc_connection_read_u8(conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
goto error;
|
|
|
|
VNC_DEBUG("Client start result complete: %d. Data %u bytes %p '%s'",
|
|
@@ -4354,13 +4351,13 @@ static gboolean vnc_connection_perform_auth_sasl(VncConnection *conn)
|
|
vnc_connection_write_u32(conn, 0);
|
|
}
|
|
vnc_connection_flush(conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
goto error;
|
|
|
|
VNC_DEBUG("Server step with %u bytes %p", clientoutlen, clientout);
|
|
|
|
serverinlen = vnc_connection_read_u32(conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
goto error;
|
|
if (serverinlen > SASL_MAX_DATA_LEN) {
|
|
vnc_connection_set_error(conn,
|
|
@@ -4379,7 +4376,7 @@ static gboolean vnc_connection_perform_auth_sasl(VncConnection *conn)
|
|
serverin = NULL;
|
|
}
|
|
complete = vnc_connection_read_u8(conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
goto error;
|
|
|
|
VNC_DEBUG("Client step result complete: %d. Data %u bytes %p '%s'",
|
|
@@ -4524,7 +4521,7 @@ static gboolean vnc_connection_has_auth_subtype(gpointer data)
|
|
VncConnection *conn = data;
|
|
VncConnectionPrivate *priv = conn->priv;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return TRUE;
|
|
if (priv->auth_subtype == VNC_CONNECTION_AUTH_INVALID)
|
|
return FALSE;
|
|
@@ -4597,15 +4594,15 @@ static gboolean vnc_connection_perform_auth_tls(VncConnection *conn)
|
|
VNC_DEBUG("Possible TLS sub-auth %u", auth[i]);
|
|
}
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
vnc_connection_choose_auth(conn, VNC_AUTH_CHOOSE_SUBTYPE, nauth, auth);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
|
|
VNC_DEBUG("Waiting for TLS auth subtype");
|
|
g_condition_wait(vnc_connection_has_auth_subtype, conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
|
|
VNC_DEBUG("Choose auth %u", priv->auth_subtype);
|
|
@@ -4672,15 +4669,15 @@ static gboolean vnc_connection_perform_auth_vencrypt(VncConnection *conn)
|
|
VNC_DEBUG("Possible VeNCrypt sub-auth %u", auth[i]);
|
|
}
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
vnc_connection_choose_auth(conn, VNC_AUTH_CHOOSE_SUBTYPE, nauth, auth);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
|
|
VNC_DEBUG("Waiting for VeNCrypt auth subtype");
|
|
g_condition_wait(vnc_connection_has_auth_subtype, conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
|
|
VNC_DEBUG("Choose auth %u", priv->auth_subtype);
|
|
@@ -4753,7 +4750,7 @@ static gboolean vnc_connection_has_auth_type(gpointer data)
|
|
VncConnection *conn = data;
|
|
VncConnectionPrivate *priv = conn->priv;
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return TRUE;
|
|
if (priv->auth_type == VNC_CONNECTION_AUTH_INVALID)
|
|
return FALSE;
|
|
@@ -4790,15 +4787,15 @@ static gboolean vnc_connection_perform_auth(VncConnection *conn)
|
|
VNC_DEBUG("Possible auth %u", auth[i]);
|
|
}
|
|
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
vnc_connection_choose_auth(conn, VNC_AUTH_CHOOSE_TYPE, nauth, auth);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
|
|
VNC_DEBUG("Waiting for auth type");
|
|
g_condition_wait(vnc_connection_has_auth_type, conn);
|
|
- if (priv->coroutine_stop)
|
|
+ if (vnc_connection_has_error(conn))
|
|
return FALSE;
|
|
|
|
VNC_DEBUG("Choose auth %u", priv->auth_type);
|