27d70af
From 83ec3835c36d5cd2c957512c18d21a33b4136c95 Mon Sep 17 00:00:00 2001
27d70af
From: Ondrej Holy <oholy@redhat.com>
27d70af
Date: Tue, 20 Nov 2018 14:57:17 +0100
27d70af
Subject: [PATCH] Fix build with recent FreeRDP versions
27d70af
27d70af
Vinagre is not buildable with recent FreeRDP versions and similar patches
27d70af
are used by distributions to fix that. I have also removed some old
27d70af
compatibility codes, because it wasn't buildable against 1.0, nor 1.1
27d70af
anyway and 1.2 has never been officially released and is superseded by 2.0.
27d70af
27d70af
https://gitlab.gnome.org/GNOME/vinagre/issues/4
27d70af
---
27d70af
 configure.ac                  |   7 +-
27d70af
 plugins/rdp/vinagre-rdp-tab.c | 129 +++++++---------------------------
27d70af
 2 files changed, 27 insertions(+), 109 deletions(-)
27d70af
27d70af
diff --git a/configure.ac b/configure.ac
27d70af
index 5b51a82..61617f1 100644
27d70af
--- a/configure.ac
27d70af
+++ b/configure.ac
27d70af
@@ -58,16 +58,15 @@ AS_IF([test "x$have_ssh" = "xyes"],
27d70af
 AM_CONDITIONAL([VINAGRE_ENABLE_SSH], [test "x$have_ssh" = "xyes"])
27d70af
 
27d70af
 # Whether to enable support for RDP.
27d70af
-RDP_DEPS="freerdp x11"
27d70af
+RDP_DEPS="freerdp2 x11"
27d70af
+
27d70af
 AC_ARG_ENABLE([rdp],
27d70af
   [AS_HELP_STRING([--disable-rdp],
27d70af
     [Disable Remote Desktop Protocol (RDP) support])])
27d70af
 
27d70af
 AS_IF([test "x$enable_rdp" != "xno"],
27d70af
   [PKG_CHECK_EXISTS([$RDP_DEPS],
27d70af
-    [have_rdp=yes
27d70af
-     PKG_CHECK_EXISTS(freerdp >= 1.1,
27d70af
-       [AC_DEFINE([HAVE_FREERDP_1_1], [1], [FreeRDP is of version 1.1 or newer])], [])],
27d70af
+    [have_rdp=yes],
27d70af
     [have_rdp=no])],
27d70af
   [have_rdp=no])
27d70af
 
27d70af
diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
27d70af
index 5b98c24..28e3eb6 100644
27d70af
--- a/plugins/rdp/vinagre-rdp-tab.c
27d70af
+++ b/plugins/rdp/vinagre-rdp-tab.c
27d70af
@@ -29,12 +29,7 @@
27d70af
 #include <freerdp/types.h>
27d70af
 #include <freerdp/freerdp.h>
27d70af
 #include <freerdp/gdi/gdi.h>
27d70af
-#if HAVE_FREERDP_1_1
27d70af
 #include <freerdp/locale/keyboard.h>
27d70af
-#else
27d70af
-#include <freerdp/kbd/vkcodes.h>
27d70af
-#include <gdk/gdkx.h>
27d70af
-#endif
27d70af
 
27d70af
 #include "vinagre-rdp-tab.h"
27d70af
 #include "vinagre-rdp-connection.h"
27d70af
@@ -44,12 +39,6 @@
27d70af
 
27d70af
 #define SELECT_TIMEOUT 50
27d70af
 
27d70af
-#if !HAVE_FREERDP_1_1
27d70af
-typedef boolean BOOL;
27d70af
-typedef uint8   UINT8;
27d70af
-typedef uint16  UINT16;
27d70af
-#endif
27d70af
-
27d70af
 struct _VinagreRdpTabPrivate
27d70af
 {
27d70af
   freerdp         *freerdp_session;
27d70af
@@ -476,16 +465,18 @@ frdp_drawing_area_draw (GtkWidget *area,
27d70af
   return TRUE;
27d70af
 }
27d70af
 
27d70af
-static void
27d70af
+static BOOL
27d70af
 frdp_begin_paint (rdpContext *context)
27d70af
 {
27d70af
   rdpGdi *gdi = context->gdi;
27d70af
 
27d70af
   gdi->primary->hdc->hwnd->invalid->null = 1;
27d70af
   gdi->primary->hdc->hwnd->ninvalid = 0;
27d70af
+
27d70af
+  return TRUE;
27d70af
 }
27d70af
 
27d70af
-static void
27d70af
+static BOOL
27d70af
 frdp_end_paint (rdpContext *context)
27d70af
 {
27d70af
   VinagreRdpTab        *rdp_tab = ((frdpContext *) context)->rdp_tab;
27d70af
@@ -495,7 +486,7 @@ frdp_end_paint (rdpContext *context)
27d70af
   gint                  x, y, w, h;
27d70af
 
27d70af
   if (gdi->primary->hdc->hwnd->invalid->null)
27d70af
-    return;
27d70af
+    return TRUE;
27d70af
 
27d70af
   x = gdi->primary->hdc->hwnd->invalid->x;
27d70af
   y = gdi->primary->hdc->hwnd->invalid->y;
27d70af
@@ -517,6 +508,8 @@ frdp_end_paint (rdpContext *context)
27d70af
     {
27d70af
       gtk_widget_queue_draw_area (priv->display, x, y, w, h);
27d70af
     }
27d70af
+
27d70af
+  return TRUE;
27d70af
 }
27d70af
 
27d70af
 static BOOL
27d70af
@@ -524,7 +517,6 @@ frdp_pre_connect (freerdp *instance)
27d70af
 {
27d70af
   rdpSettings *settings = instance->settings;
27d70af
 
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   settings->OrderSupport[NEG_DSTBLT_INDEX] = TRUE;
27d70af
   settings->OrderSupport[NEG_PATBLT_INDEX] = TRUE;
27d70af
   settings->OrderSupport[NEG_SCRBLT_INDEX] = TRUE;
27d70af
@@ -549,32 +541,6 @@ frdp_pre_connect (freerdp *instance)
27d70af
   settings->OrderSupport[NEG_POLYGON_CB_INDEX] = FALSE;
27d70af
   settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE;
27d70af
   settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE;
27d70af
-#else
27d70af
-  settings->order_support[NEG_DSTBLT_INDEX] = true;
27d70af
-  settings->order_support[NEG_PATBLT_INDEX] = true;
27d70af
-  settings->order_support[NEG_SCRBLT_INDEX] = true;
27d70af
-  settings->order_support[NEG_OPAQUE_RECT_INDEX] = true;
27d70af
-  settings->order_support[NEG_DRAWNINEGRID_INDEX] = false;
27d70af
-  settings->order_support[NEG_MULTIDSTBLT_INDEX] = false;
27d70af
-  settings->order_support[NEG_MULTIPATBLT_INDEX] = false;
27d70af
-  settings->order_support[NEG_MULTISCRBLT_INDEX] = false;
27d70af
-  settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = true;
27d70af
-  settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = false;
27d70af
-  settings->order_support[NEG_LINETO_INDEX] = true;
27d70af
-  settings->order_support[NEG_POLYLINE_INDEX] = true;
27d70af
-  settings->order_support[NEG_MEMBLT_INDEX] = true;
27d70af
-  settings->order_support[NEG_MEM3BLT_INDEX] = false;
27d70af
-  settings->order_support[NEG_MEMBLT_V2_INDEX] = true;
27d70af
-  settings->order_support[NEG_MEM3BLT_V2_INDEX] = false;
27d70af
-  settings->order_support[NEG_SAVEBITMAP_INDEX] = false;
27d70af
-  settings->order_support[NEG_GLYPH_INDEX_INDEX] = true;
27d70af
-  settings->order_support[NEG_FAST_INDEX_INDEX] = true;
27d70af
-  settings->order_support[NEG_FAST_GLYPH_INDEX] = false;
27d70af
-  settings->order_support[NEG_POLYGON_SC_INDEX] = false;
27d70af
-  settings->order_support[NEG_POLYGON_CB_INDEX] = false;
27d70af
-  settings->order_support[NEG_ELLIPSE_SC_INDEX] = false;
27d70af
-  settings->order_support[NEG_ELLIPSE_CB_INDEX] = false;
27d70af
-#endif
27d70af
 
27d70af
   return TRUE;
27d70af
 }
27d70af
@@ -587,15 +553,7 @@ frdp_post_connect (freerdp *instance)
27d70af
   rdpGdi               *gdi;
27d70af
   int                   stride;
27d70af
 
27d70af
-  gdi_init (instance,
27d70af
-#if defined(FREERDP_VERSION_MAJOR) && defined(FREERDP_VERSION_MINOR) && \
27d70af
-    !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && \
27d70af
-    FREERDP_VERSION_MINOR >= 2))
27d70af
-                    CLRBUF_24BPP,
27d70af
-#else
27d70af
-                    CLRBUF_32BPP,
27d70af
-#endif
27d70af
-                    NULL);
27d70af
+  gdi_init (instance, PIXEL_FORMAT_BGRA32);
27d70af
   gdi = instance->context->gdi;
27d70af
 
27d70af
   instance->update->BeginPaint = frdp_begin_paint;
27d70af
@@ -705,21 +663,15 @@ frdp_key_pressed (GtkWidget   *widget,
27d70af
   VinagreRdpTab        *rdp_tab = (VinagreRdpTab *) user_data;
27d70af
   VinagreRdpTabPrivate *priv = rdp_tab->priv;
27d70af
   frdpEventKey         *frdp_event;
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   UINT16                scancode;
27d70af
-#endif
27d70af
 
27d70af
   frdp_event = g_new0 (frdpEventKey, 1);
27d70af
   frdp_event->type = FRDP_EVENT_TYPE_KEY;
27d70af
   frdp_event->flags = event->type == GDK_KEY_PRESS ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE;
27d70af
 
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode (event->hardware_keycode);
27d70af
   frdp_event->code = RDP_SCANCODE_CODE(scancode);
27d70af
   frdp_event->extended = RDP_SCANCODE_EXTENDED(scancode);
27d70af
-#else
27d70af
-  frdp_event->code = freerdp_kbd_get_scancode_by_keycode (event->hardware_keycode, &frdp_event->extended);
27d70af
-#endif
27d70af
 
27d70af
   if (frdp_event->extended)
27d70af
     frdp_event->flags |= KBD_FLAGS_EXTENDED;
27d70af
@@ -934,11 +886,13 @@ frdp_authenticate (freerdp  *instance,
27d70af
   return TRUE;
27d70af
 }
27d70af
 
27d70af
-static BOOL
27d70af
+static DWORD
27d70af
 frdp_certificate_verify (freerdp *instance,
27d70af
-                         char    *subject,
27d70af
-                         char    *issuer,
27d70af
-                         char    *fingerprint)
27d70af
+                         const char *common_name,
27d70af
+                         const char *subject,
27d70af
+                         const char *issuer,
27d70af
+                         const char *fingerprint,
27d70af
+                         BOOL host_mismatch)
27d70af
 {
27d70af
   VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
27d70af
   GtkBuilder *builder;
27d70af
@@ -968,17 +922,18 @@ frdp_certificate_verify (freerdp *instance,
27d70af
   gtk_widget_hide (dialog);
27d70af
 
27d70af
 
27d70af
-  return response == GTK_RESPONSE_YES;
27d70af
+  return (response == GTK_RESPONSE_YES) ? 1 : 0;
27d70af
 }
27d70af
 
27d70af
-
27d70af
-#if HAVE_FREERDP_1_1
27d70af
-static BOOL
27d70af
+static DWORD
27d70af
 frdp_changed_certificate_verify (freerdp *instance,
27d70af
-                                 char    *subject,
27d70af
-                                 char    *issuer,
27d70af
-                                 char    *new_fingerprint,
27d70af
-                                 char    *old_fingerprint)
27d70af
+                                 const char *common_name,
27d70af
+                                 const char *subject,
27d70af
+                                 const char *issuer,
27d70af
+                                 const char *new_fingerprint,
27d70af
+                                 const char *old_subject,
27d70af
+                                 const char *old_issuer,
27d70af
+                                 const char *old_fingerprint)
27d70af
 {
27d70af
   VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
27d70af
   GtkBuilder *builder;
27d70af
@@ -1023,9 +978,8 @@ frdp_changed_certificate_verify (freerdp *instance,
27d70af
   gtk_widget_hide (dialog);
27d70af
 
27d70af
 
27d70af
-  return response == GTK_RESPONSE_YES;
27d70af
+  return (response == GTK_RESPONSE_YES) ? 1 : 0;
27d70af
 }
27d70af
-#endif
27d70af
 
27d70af
 static void
27d70af
 init_freerdp (VinagreRdpTab *rdp_tab)
27d70af
@@ -1053,15 +1007,9 @@ init_freerdp (VinagreRdpTab *rdp_tab)
27d70af
   priv->freerdp_session->PostConnect = frdp_post_connect;
27d70af
   priv->freerdp_session->Authenticate = frdp_authenticate;
27d70af
   priv->freerdp_session->VerifyCertificate = frdp_certificate_verify;
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   priv->freerdp_session->VerifyChangedCertificate = frdp_changed_certificate_verify;
27d70af
-#endif
27d70af
 
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   priv->freerdp_session->ContextSize = sizeof (frdpContext);
27d70af
-#else
27d70af
-  priv->freerdp_session->context_size = sizeof (frdpContext);
27d70af
-#endif
27d70af
 
27d70af
   freerdp_context_new (priv->freerdp_session);
27d70af
   ((frdpContext *) priv->freerdp_session->context)->rdp_tab = rdp_tab;
27d70af
@@ -1070,53 +1018,24 @@ init_freerdp (VinagreRdpTab *rdp_tab)
27d70af
   settings = priv->freerdp_session->settings;
27d70af
 
27d70af
   /* Security settings */
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   settings->RdpSecurity = TRUE;
27d70af
   settings->TlsSecurity = TRUE;
27d70af
   settings->NlaSecurity = TRUE;
27d70af
   settings->EncryptionMethods = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
27d70af
   settings->EncryptionLevel = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
27d70af
-#else
27d70af
-  settings->rdp_security = true;
27d70af
-  settings->tls_security = true;
27d70af
-  settings->nla_security = true;
27d70af
-  settings->encryption = true;
27d70af
-  settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
27d70af
-  settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
27d70af
-#endif
27d70af
-#include <freerdp/version.h>
27d70af
-#if (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2 && FREERDP_VERSION_REVISION >= 1) || (FREERDP_VERSION_MAJOR == 2)
27d70af
   settings->UseRdpSecurityLayer = FALSE;
27d70af
-#else
27d70af
-  settings->DisableEncryption = FALSE;
27d70af
-#endif
27d70af
 
27d70af
   /* Set display size */
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   settings->DesktopWidth = width;
27d70af
   settings->DesktopHeight = height;
27d70af
-#else
27d70af
-  settings->width = width;
27d70af
-  settings->height = height;
27d70af
-#endif
27d70af
 
27d70af
   /* Set hostname */
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   settings->WindowTitle = g_strdup (hostname);
27d70af
   settings->ServerHostname = g_strdup (hostname);
27d70af
   settings->ServerPort = port;
27d70af
-#else
27d70af
-  settings->window_title = g_strdup (hostname);
27d70af
-  settings->hostname = g_strdup (hostname);
27d70af
-  settings->port = port;
27d70af
-#endif
27d70af
 
27d70af
   /* Set keyboard layout */
27d70af
-#if HAVE_FREERDP_1_1
27d70af
   freerdp_keyboard_init (KBD_US);
27d70af
-#else
27d70af
-  freerdp_kbd_init (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), KBD_US);
27d70af
-#endif
27d70af
 
27d70af
   /* Allow font smoothing by default */
27d70af
   settings->AllowFontSmoothing = TRUE;
27d70af
-- 
27d70af
2.19.1
27d70af