GUACAMOLE-25: Support FreeRDP stable-1.0 and compatible.
This commit is contained in:
parent
f1d4393eb8
commit
8ccf61e6b1
@ -579,6 +579,15 @@ then
|
||||
[#include <freerdp/channels/channels.h>])
|
||||
fi
|
||||
|
||||
# Availability of ADDIN_ARGV structure for configuring plugins
|
||||
if test "x${have_freerdp}" = "xyes"
|
||||
then
|
||||
AC_CHECK_TYPE([ADDIN_ARGV],
|
||||
[AC_DEFINE([HAVE_ADDIN_ARGV],,
|
||||
[Whether the ADDIN_ARGV type is available])],,
|
||||
[#include <freerdp/settings.h>])
|
||||
fi
|
||||
|
||||
#
|
||||
# FreeRDP: WinPR
|
||||
#
|
||||
|
@ -117,6 +117,14 @@ int guac_rdp_load_drdynvc(rdpContext* context, guac_rdp_dvc_list* list) {
|
||||
if (list->channel_count == 0)
|
||||
return 0;
|
||||
|
||||
#ifndef HAVE_ADDIN_ARGV
|
||||
/* Allocate plugin data array */
|
||||
RDP_PLUGIN_DATA* all_plugin_data =
|
||||
calloc(list->channel_count + 1, sizeof(RDP_PLUGIN_DATA));
|
||||
|
||||
RDP_PLUGIN_DATA* current_plugin_data = all_plugin_data;
|
||||
#endif
|
||||
|
||||
/* For each channel */
|
||||
guac_common_list_element* current = list->channels->head;
|
||||
while (current != NULL) {
|
||||
@ -135,20 +143,41 @@ int guac_rdp_load_drdynvc(rdpContext* context, guac_rdp_dvc_list* list) {
|
||||
guac_client_log(client, GUAC_LOG_DEBUG,
|
||||
"Registering DVC plugin \"%s\"", dvc->argv[0]);
|
||||
|
||||
#ifdef HAVE_ADDIN_ARGV
|
||||
/* Register plugin with FreeRDP */
|
||||
ADDIN_ARGV* args = malloc(sizeof(ADDIN_ARGV));
|
||||
args->argc = dvc->argc;
|
||||
args->argv = dvc->argv;
|
||||
freerdp_dynamic_channel_collection_add(context->settings, args);
|
||||
#else
|
||||
/* Copy all arguments */
|
||||
for (int i = 0; i < dvc->argc; i++)
|
||||
current_plugin_data->data[i] = dvc->argv[i];
|
||||
|
||||
/* Store size of entry */
|
||||
current_plugin_data->size = sizeof(*current_plugin_data);
|
||||
|
||||
/* Advance to next set of plugin data */
|
||||
current_plugin_data++;
|
||||
#endif
|
||||
|
||||
/* Rely on FreeRDP to free argv storage */
|
||||
dvc->argv = NULL;
|
||||
|
||||
}
|
||||
|
||||
#ifdef HAVE_ADDIN_ARGV
|
||||
/* Load virtual channel management plugin */
|
||||
return freerdp_channels_load_plugin(channels, context->settings,
|
||||
"drdynvc", context->settings);
|
||||
return freerdp_channels_load_plugin(channels, context->instance->settings,
|
||||
"drdynvc", context->instance->settings);
|
||||
#else
|
||||
/* Terminate with empty RDP_PLUGIN_DATA element */
|
||||
current_plugin_data->size = 0;
|
||||
|
||||
/* Load virtual channel management plugin */
|
||||
return freerdp_channels_load_plugin(channels, context->instance->settings,
|
||||
"drdynvc", all_plugin_data);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
@ -314,8 +314,14 @@ static int guac_rdp_ai_terminated(IWTSPlugin* plugin) {
|
||||
*/
|
||||
int DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints) {
|
||||
|
||||
/* Pull guac_client from arguments */
|
||||
#ifdef HAVE_ADDIN_ARGV
|
||||
ADDIN_ARGV* args = pEntryPoints->GetPluginData(pEntryPoints);
|
||||
guac_client* client = (guac_client*) guac_rdp_string_to_ptr(args->argv[1]);
|
||||
#else
|
||||
RDP_PLUGIN_DATA* data = pEntryPoints->GetPluginData(pEntryPoints);
|
||||
guac_client* client = (guac_client*) guac_rdp_string_to_ptr(data->data[1]);
|
||||
#endif
|
||||
|
||||
/* Pull previously-allocated plugin */
|
||||
guac_rdp_ai_plugin* ai_plugin = (guac_rdp_ai_plugin*)
|
||||
|
Loading…
Reference in New Issue
Block a user