GUACAMOLE-249: Migrate to newer API (partial).

This commit is contained in:
Michael Jumper 2017-03-25 19:59:04 -07:00
parent 381ff1a421
commit a5b62aa82e
14 changed files with 108 additions and 73 deletions

View File

@ -554,11 +554,11 @@ then
# libfreerdp-core / libfreerdp
AC_CHECK_LIB([freerdp-core], [freerdp_new],
[RDP_LIBS="$RDP_LIBS -lfreerdp-core"],
[AC_CHECK_LIB([freerdp], [freerdp_new],
[RDP_LIBS="$RDP_LIBS -lfreerdp -lfreerdp-client"],
[AC_CHECK_LIB([freerdp2], [freerdp_new],
[RDP_LIBS="$RDP_LIBS -lfreerdp2 -lfreerdp-client2"],
[AC_MSG_WARN([
--------------------------------------------
Unable to find libfreerdp-core / libfreerdp
Unable to find libfreerdp2
RDP will be disabled.
--------------------------------------------])
have_freerdp=no])])

View File

@ -55,7 +55,6 @@ libguac_client_rdp_la_SOURCES = \
rdp_rail.c \
rdp_settings.c \
rdp_stream.c \
rdp_svc.c \
resolution.c \
unicode.c \
user.c
@ -127,7 +126,6 @@ noinst_HEADERS = \
rdp_settings.h \
rdp_status.h \
rdp_stream.h \
rdp_svc.h \
resolution.h \
unicode.h \
user.h
@ -283,59 +281,59 @@ if LEGACY_FREERDP_EXTENSIONS
# FreeRDP 1.0-style extensions
freerdp_LTLIBRARIES = \
guacai.la \
guacdr.la \
guacsnd.la \
guacsvc.la
guacai.la
# guacdr.la \
# guacsnd.la \
# guacsvc.la
guacai_la_SOURCES = ${guacai_sources}
guacai_la_CFLAGS = ${guacai_cflags}
guacai_la_LDFLAGS = ${guacai_ldflags}
guacai_la_LIBADD = ${guacai_libadd}
guacdr_la_SOURCES = ${guacdr_sources}
guacdr_la_CFLAGS = ${guacdr_cflags}
guacdr_la_LDFLAGS = ${guacdr_ldflags}
guacdr_la_LIBADD = ${guacdr_libadd}
#guacdr_la_SOURCES = ${guacdr_sources}
#guacdr_la_CFLAGS = ${guacdr_cflags}
#guacdr_la_LDFLAGS = ${guacdr_ldflags}
#guacdr_la_LIBADD = ${guacdr_libadd}
guacsnd_la_SOURCES = ${guacsnd_sources}
guacsnd_la_CFLAGS = ${guacsnd_cflags}
guacsnd_la_LDFLAGS = ${guacsnd_ldflags}
guacsnd_la_LIBADD = ${guacsnd_libadd}
#guacsnd_la_SOURCES = ${guacsnd_sources}
#guacsnd_la_CFLAGS = ${guacsnd_cflags}
#guacsnd_la_LDFLAGS = ${guacsnd_ldflags}
#guacsnd_la_LIBADD = ${guacsnd_libadd}
guacsvc_la_SOURCES = ${guacsvc_sources}
guacsvc_la_CFLAGS = ${guacsvc_cflags}
guacsvc_la_LDFLAGS = ${guacsvc_ldflags}
guacsvc_la_LIBADD = ${guacsvc_libadd}
#guacsvc_la_SOURCES = ${guacsvc_sources}
#guacsvc_la_CFLAGS = ${guacsvc_cflags}
#guacsvc_la_LDFLAGS = ${guacsvc_ldflags}
#guacsvc_la_LIBADD = ${guacsvc_libadd}
else
# FreeRDP 1.1 (and hopefully onward) extensions
freerdp_LTLIBRARIES = \
guacai-client.la \
guacdr-client.la \
guacsnd-client.la \
guacsvc-client.la
guacai-client.la
# guacdr-client.la \
# guacsnd-client.la \
# guacsvc-client.la
guacai_client_la_SOURCES = ${guacai_sources}
guacai_client_la_CFLAGS = ${guacai_cflags}
guacai_client_la_LDFLAGS = ${guacai_ldflags}
guacai_client_la_LIBADD = ${guacai_libadd}
guacdr_client_la_SOURCES = ${guacdr_sources}
guacdr_client_la_CFLAGS = ${guacdr_cflags}
guacdr_client_la_LDFLAGS = ${guacdr_ldflags}
guacdr_client_la_LIBADD = ${guacdr_libadd}
#guacdr_client_la_SOURCES = ${guacdr_sources}
#guacdr_client_la_CFLAGS = ${guacdr_cflags}
#guacdr_client_la_LDFLAGS = ${guacdr_ldflags}
#guacdr_client_la_LIBADD = ${guacdr_libadd}
guacsnd_client_la_SOURCES = ${guacsnd_sources}
guacsnd_client_la_CFLAGS = ${guacsnd_cflags}
guacsnd_client_la_LDFLAGS = ${guacsnd_ldflags}
guacsnd_client_la_LIBADD = ${guacsnd_libadd}
#guacsnd_client_la_SOURCES = ${guacsnd_sources}
#guacsnd_client_la_CFLAGS = ${guacsnd_cflags}
#guacsnd_client_la_LDFLAGS = ${guacsnd_ldflags}
#guacsnd_client_la_LIBADD = ${guacsnd_libadd}
guacsvc_client_la_SOURCES = ${guacsvc_sources}
guacsvc_client_la_CFLAGS = ${guacsvc_cflags}
guacsvc_client_la_LDFLAGS = ${guacsvc_ldflags}
guacsvc_client_la_LIBADD = ${guacsvc_libadd}
#guacsvc_client_la_SOURCES = ${guacsvc_sources}
#guacsvc_client_la_CFLAGS = ${guacsvc_cflags}
#guacsvc_client_la_LDFLAGS = ${guacsvc_ldflags}
#guacsvc_client_la_LIBADD = ${guacsvc_libadd}
endif

View File

@ -143,7 +143,7 @@ static int guac_rdp_ai_data(IWTSVirtualChannelCallback* channel_callback,
* @return
* Always zero.
*/
static int guac_rdp_ai_data(IWTSVirtualChannelCallback* channel_callback,
static UINT guac_rdp_ai_data(IWTSVirtualChannelCallback* channel_callback,
wStream* stream) {
guac_rdp_ai_channel_callback* ai_channel_callback =
@ -169,7 +169,7 @@ static int guac_rdp_ai_data(IWTSVirtualChannelCallback* channel_callback,
* @return
* Always zero.
*/
static int guac_rdp_ai_close(IWTSVirtualChannelCallback* channel_callback) {
static UINT guac_rdp_ai_close(IWTSVirtualChannelCallback* channel_callback) {
guac_rdp_ai_channel_callback* ai_channel_callback =
(guac_rdp_ai_channel_callback*) channel_callback;
@ -219,7 +219,7 @@ static int guac_rdp_ai_close(IWTSVirtualChannelCallback* channel_callback) {
* @return
* Always zero.
*/
static int guac_rdp_ai_new_connection(
static UINT guac_rdp_ai_new_connection(
IWTSListenerCallback* listener_callback, IWTSVirtualChannel* channel,
BYTE* data, int* accept,
IWTSVirtualChannelCallback** channel_callback) {
@ -261,7 +261,7 @@ static int guac_rdp_ai_new_connection(
* @return
* Always zero.
*/
static int guac_rdp_ai_initialize(IWTSPlugin* plugin,
static UINT guac_rdp_ai_initialize(IWTSPlugin* plugin,
IWTSVirtualChannelManager* manager) {
/* Allocate new listener callback */
@ -295,7 +295,7 @@ static int guac_rdp_ai_initialize(IWTSPlugin* plugin,
* @return
* Always zero.
*/
static int guac_rdp_ai_terminated(IWTSPlugin* plugin) {
static UINT guac_rdp_ai_terminated(IWTSPlugin* plugin) {
guac_rdp_ai_plugin* ai_plugin = (guac_rdp_ai_plugin*) plugin;
guac_client* client = ai_plugin->client;

View File

@ -38,7 +38,9 @@
#include "rdp_pointer.h"
#include "rdp_rail.h"
#include "rdp_stream.h"
#if 0
#include "rdp_svc.h"
#endif
#ifdef ENABLE_COMMON_SSH
#include "common-ssh/sftp.h"

View File

@ -191,10 +191,12 @@ typedef struct rdp_freerdp_context {
*/
guac_client* client;
#if 0
/**
* Color conversion structure to be used to convert RDP images to PNGs.
*/
CLRCONV* clrconv;
#endif
/**
* The current color palette, as received from the RDP server.

View File

@ -42,7 +42,7 @@
#include <stdio.h>
#include <stdlib.h>
void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) {
BOOL guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) {
guac_client* client = ((rdp_freerdp_context*) context)->client;
guac_rdp_client* rdp_client = (guac_rdp_client*) client->data;
@ -70,9 +70,11 @@ void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) {
/* Store buffer reference in bitmap */
((guac_rdp_bitmap*) bitmap)->layer = buffer;
return TRUE;
}
void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) {
BOOL guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) {
/* Convert image data if present */
if (bitmap->data != NULL && bitmap->bpp != 32) {
@ -103,9 +105,11 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) {
/* Start at zero usage */
((guac_rdp_bitmap*) bitmap)->used = 0;
return TRUE;
}
void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) {
BOOL guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) {
guac_client* client = ((rdp_freerdp_context*) context)->client;
guac_rdp_client* rdp_client = (guac_rdp_client*) client->data;
@ -145,6 +149,8 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) {
/* Increment usage counter */
((guac_rdp_bitmap*) bitmap)->used++;
return TRUE;
}
void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) {
@ -159,7 +165,7 @@ void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) {
}
void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, BOOL primary) {
BOOL guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, BOOL primary) {
guac_client* client = ((rdp_freerdp_context*) context)->client;
guac_rdp_client* rdp_client = (guac_rdp_client*) client->data;
@ -184,14 +190,16 @@ void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, BOOL pri
}
return TRUE;
}
#ifdef LEGACY_RDPBITMAP
void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, UINT8* data,
int width, int height, int bpp, int length, BOOL compressed) {
#else
void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, UINT8* data,
int width, int height, int bpp, int length, BOOL compressed, int codec_id) {
BOOL guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, const BYTE* data,
UINT32 width, UINT32 height, UINT32 bpp, UINT32 length, BOOL compressed, UINT32 codec_id) {
#endif
int size = width * height * 4;

View File

@ -67,7 +67,7 @@ typedef struct guac_rdp_bitmap {
* @param bitmap
* The bitmap to cache.
*/
void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap);
BOOL guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap);
/**
* Initializes the given newly-created rdpBitmap.
@ -78,7 +78,7 @@ void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap);
* @param bitmap
* The bitmap to initialize.
*/
void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap);
BOOL guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap);
/**
* Paints the given rdpBitmap on the primary display surface. Note that this
@ -93,7 +93,7 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap);
* the paint operation to perform, including the destination X/Y
* coordinates.
*/
void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap);
BOOL guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap);
/**
* Frees any Guacamole-specific data associated with the given rdpBitmap.
@ -123,7 +123,7 @@ void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap);
* surface should be reset to the primary drawing surface of the remote
* display, FALSE otherwise.
*/
void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap,
BOOL guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap,
BOOL primary);
#ifdef LEGACY_RDPBITMAP
@ -195,9 +195,9 @@ void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap,
* The ID of the codec used to compress the image data. This parameter is
* currently ignored.
*/
void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap,
UINT8* data, int width, int height, int bpp, int length,
BOOL compressed, int codec_id);
BOOL guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap,
const BYTE* data, UINT32 width, UINT32 height, UINT32 bpp, UINT32 length,
BOOL compressed, UINT32 codec_id);
#endif
#endif

View File

@ -345,6 +345,7 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect
}
#if 0
/**
* Updates the palette within a FreeRDP CLRCONV object using the new palette
* entries provided by an RDP palette update.
@ -368,6 +369,7 @@ static void guac_rdp_update_clrconv(CLRCONV* clrconv,
#endif
}
#endif
/**
* Updates a raw ARGB32 palette using the new palette entries provided by an
@ -402,14 +404,14 @@ static void guac_rdp_update_palette(UINT32* guac_palette,
}
void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette) {
#if 0
CLRCONV* clrconv = ((rdp_freerdp_context*) context)->clrconv;
UINT32* guac_palette = ((rdp_freerdp_context*) context)->palette;
/* Update internal palette representations */
guac_rdp_update_clrconv(clrconv, palette);
guac_rdp_update_palette(guac_palette, palette);
#endif
}
void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) {

View File

@ -44,7 +44,7 @@
#define cairo_format_stride_for_width(format, width) (width*4)
#endif
void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) {
BOOL guac_rdp_glyph_new(rdpContext* context, const rdpGlyph* glyph) {
int x, y, i;
int stride;
@ -95,9 +95,13 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) {
((guac_rdp_glyph*) glyph)->surface = cairo_image_surface_create_for_data(
image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride);
return TRUE;
}
void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) {
BOOL guac_rdp_glyph_draw(rdpContext* context, const rdpGlyph* glyph,
UINT32 x, UINT32 y, UINT32 w, UINT32 h, UINT32 sx, UINT32 sy,
BOOL redundant);
guac_client* client = ((rdp_freerdp_context*) context)->client;
guac_rdp_client* rdp_client = (guac_rdp_client*) client->data;
@ -110,6 +114,8 @@ void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) {
(fgcolor & 0x00FF00) >> 8,
fgcolor & 0x0000FF);
return TRUE;
}
void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) {
@ -123,8 +129,8 @@ void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) {
}
void guac_rdp_glyph_begindraw(rdpContext* context,
int x, int y, int width, int height, UINT32 fgcolor, UINT32 bgcolor) {
BOOL guac_rdp_glyph_begindraw(rdpContext* context,
UINT32 x, UINT32 y, UINT32 width, UINT32 height, UINT32 fgcolor, UINT32 bgcolor, BOOL redundant) {
guac_client* client = ((rdp_freerdp_context*) context)->client;
guac_rdp_client* rdp_client =
@ -148,10 +154,13 @@ void guac_rdp_glyph_begindraw(rdpContext* context,
/* Convert foreground color */
rdp_client->glyph_color = guac_rdp_convert_color(context, fgcolor);
return TRUE;
}
void guac_rdp_glyph_enddraw(rdpContext* context,
int x, int y, int width, int height, UINT32 fgcolor, UINT32 bgcolor) {
BOOL guac_rdp_glyph_enddraw(rdpContext* context,
UINT32 x, UINT32 y, UINT32 width, UINT32 height, UINT32 fgcolor, UINT32 bgcolor) {
/* IGNORE */
return TRUE;
}

View File

@ -59,7 +59,7 @@ typedef struct guac_rdp_glyph {
* @param glyph
* The glyph to cache.
*/
void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph);
BOOL guac_rdp_glyph_new(rdpContext* context, const rdpGlyph* glyph);
/**
* Draws a previously-cached glyph at the given coordinates within the current
@ -77,7 +77,9 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph);
* @param y
* The destination Y coordinate of the upper-left corner of the glyph.
*/
void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y);
BOOL guac_rdp_glyph_draw(rdpContext* context, const rdpGlyph* glyph,
UINT32 x, UINT32 y, UINT32 w, UINT32 h, UINT32 sx, UINT32 sy,
BOOL redundant);
/**
* Frees any Guacamole-specific data associated with the given glyph, such that
@ -126,8 +128,8 @@ void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph);
* be translated via guac_rdp_convert_color(). If the background is
* transparent, this value is undefined.
*/
void guac_rdp_glyph_begindraw(rdpContext* context,
int x, int y, int width, int height, UINT32 fgcolor, UINT32 bgcolor);
BOOL guac_rdp_glyph_begindraw(rdpContext* context,
UINT32 x, UINT32 y, UINT32 width, UINT32 height, UINT32 fgcolor, UINT32 bgcolor, BOOL redundant);
/**
* Called immediately after rendering a series of glyphs. Unlike
@ -163,7 +165,7 @@ void guac_rdp_glyph_begindraw(rdpContext* context,
* be translated via guac_rdp_convert_color(). If the background is
* transparent, this value is undefined.
*/
void guac_rdp_glyph_enddraw(rdpContext* context,
int x, int y, int width, int height, UINT32 fgcolor, UINT32 bgcolor);
BOOL guac_rdp_glyph_enddraw(rdpContext* context,
UINT32 x, UINT32 y, UINT32 width, UINT32 height, UINT32 fgcolor, UINT32 bgcolor);
#endif

View File

@ -93,11 +93,13 @@ void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) {
}
void guac_rdp_pointer_set_null(rdpContext* context) {
BOOL guac_rdp_pointer_set_null(rdpContext* context) {
/* STUB */
return TRUE;
}
void guac_rdp_pointer_set_default(rdpContext* context) {
BOOL guac_rdp_pointer_set_default(rdpContext* context) {
/* STUB */
return TRUE;
}

View File

@ -85,7 +85,7 @@ void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer);
* @param context
* The rdpContext associated with the current RDP session.
*/
void guac_rdp_pointer_set_null(rdpContext* context);
BOOL guac_rdp_pointer_set_null(rdpContext* context);
/**
* Sets the system-dependent (as in dependent on the client system) default
@ -94,6 +94,6 @@ void guac_rdp_pointer_set_null(rdpContext* context);
* @param context
* The rdpContext associated with the current RDP session.
*/
void guac_rdp_pointer_set_default(rdpContext* context);
BOOL guac_rdp_pointer_set_default(rdpContext* context);
#endif

View File

@ -23,7 +23,9 @@
#include "config.h"
#include "common/json.h"
#if 0
#include "rdp_svc.h"
#endif
#include <guacamole/user.h>
#include <guacamole/protocol.h>
@ -150,10 +152,12 @@ typedef struct guac_rdp_stream {
*/
guac_rdp_ls_status ls_status;
#if 0
/**
* Associated SVC instance. Only valid for GUAC_RDP_INBOUND_SVC_STREAM.
*/
guac_rdp_svc* svc;
#endif
} guac_rdp_stream;

View File

@ -26,7 +26,9 @@
#include "rdp.h"
#include "rdp_settings.h"
#include "rdp_stream.h"
#if 0
#include "rdp_svc.h"
#endif
#ifdef ENABLE_COMMON_SSH
#include "sftp.h"
@ -85,8 +87,10 @@ int guac_rdp_user_join_handler(guac_user* user, int argc, char** argv) {
if (rdp_client->audio)
guac_audio_stream_add_user(rdp_client->audio, user);
#if 0
/* Bring user up to date with any registered static channels */
guac_rdp_svc_send_pipes(user);
#endif
/* Synchronize with current display */
guac_common_display_dup(rdp_client->display, user, user->socket);
@ -108,8 +112,10 @@ int guac_rdp_user_join_handler(guac_user* user, int argc, char** argv) {
/* Set generic (non-filesystem) file upload handler */
user->file_handler = guac_rdp_user_file_handler;
#if 0
/* Inbound arbitrary named pipes */
user->pipe_handler = guac_rdp_svc_pipe_handler;
#endif
}