GUAC-608: Migrate RDP to common clipboard code for inbound data.
This commit is contained in:
parent
3cf644009f
commit
6743795a68
@ -465,27 +465,6 @@ int rdp_guac_client_clipboard_handler(guac_client* client, guac_stream* stream,
|
||||
|
||||
return guac_rdp_clipboard_handler(client, stream, mimetype);
|
||||
|
||||
#if 0
|
||||
rdp_guac_client_data* client_data = (rdp_guac_client_data*) client->data;
|
||||
rdpChannels* channels = client_data->rdp_inst->context->channels;
|
||||
|
||||
RDP_CB_FORMAT_LIST_EVENT* format_list =
|
||||
(RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(
|
||||
CliprdrChannel_Class,
|
||||
CliprdrChannel_FormatList,
|
||||
NULL, NULL);
|
||||
|
||||
/* Store data in client */
|
||||
strncpy(client_data->clipboard, data, GUAC_RDP_CLIPBOARD_MAX_LENGTH);
|
||||
|
||||
/* Notify server that text data is now available */
|
||||
format_list->formats = (UINT32*) malloc(sizeof(UINT32));
|
||||
format_list->formats[0] = CB_FORMAT_TEXT;
|
||||
format_list->num_formats = 1;
|
||||
|
||||
freerdp_channels_send_event(channels, (wMessage*) format_list);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
int rdp_guac_client_file_handler(guac_client* client, guac_stream* stream,
|
||||
|
@ -175,7 +175,7 @@ void guac_rdp_process_cb_data_request(guac_client* client,
|
||||
rdpChannels* channels = client_data->rdp_inst->context->channels;
|
||||
|
||||
guac_iconv_write* writer;
|
||||
char* input = (char*) client_data->clipboard;;
|
||||
char* input = client_data->clipboard->buffer;
|
||||
char* output = malloc(GUAC_RDP_CLIPBOARD_MAX_LENGTH);
|
||||
|
||||
RDP_CB_DATA_RESPONSE_EVENT* data_response;
|
||||
@ -206,7 +206,7 @@ void guac_rdp_process_cb_data_request(guac_client* client,
|
||||
|
||||
/* Set data and size */
|
||||
data_response->data = (BYTE*) output;
|
||||
guac_iconv(GUAC_READ_UTF8, &input, GUAC_RDP_CLIPBOARD_MAX_LENGTH,
|
||||
guac_iconv(GUAC_READ_UTF8, &input, client_data->clipboard->length,
|
||||
writer, &output, GUAC_RDP_CLIPBOARD_MAX_LENGTH);
|
||||
data_response->size = ((BYTE*) output) - data_response->data;
|
||||
|
||||
|
@ -27,11 +27,18 @@
|
||||
#include "rdp_svc.h"
|
||||
#include "rdp_stream.h"
|
||||
|
||||
#include <freerdp/channels/channels.h>
|
||||
#include <guacamole/client.h>
|
||||
#include <guacamole/error.h>
|
||||
#include <guacamole/protocol.h>
|
||||
#include <guacamole/socket.h>
|
||||
|
||||
#ifdef HAVE_FREERDP_CLIENT_CLIPRDR_H
|
||||
#include <freerdp/client/cliprdr.h>
|
||||
#else
|
||||
#include "compat/client-cliprdr.h"
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_WINPR
|
||||
#include <winpr/wtypes.h>
|
||||
#else
|
||||
@ -146,13 +153,14 @@ int guac_rdp_svc_pipe_handler(guac_client* client, guac_stream* stream,
|
||||
int guac_rdp_clipboard_handler(guac_client* client, guac_stream* stream,
|
||||
char* mimetype) {
|
||||
|
||||
rdp_guac_client_data* client_data = (rdp_guac_client_data*) client->data;
|
||||
guac_rdp_stream* rdp_stream;
|
||||
|
||||
/* Init stream data */
|
||||
stream->data = rdp_stream = malloc(sizeof(guac_rdp_stream));
|
||||
rdp_stream->type = GUAC_RDP_INBOUND_CLIPBOARD_STREAM;
|
||||
|
||||
guac_client_log_info(client, "Creating clipboard stream %s", mimetype);
|
||||
guac_common_clipboard_reset(client_data->clipboard, mimetype);
|
||||
return 0;
|
||||
|
||||
}
|
||||
@ -221,7 +229,10 @@ int guac_rdp_svc_blob_handler(guac_client* client, guac_stream* stream,
|
||||
|
||||
int guac_rdp_clipboard_blob_handler(guac_client* client, guac_stream* stream,
|
||||
void* data, int length) {
|
||||
guac_client_log_info(client, "Received %i bytes of clipboard data", length);
|
||||
|
||||
rdp_guac_client_data* client_data = (rdp_guac_client_data*) client->data;
|
||||
guac_common_clipboard_append(client_data->clipboard, (char*) data, length);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -252,7 +263,24 @@ int guac_rdp_upload_end_handler(guac_client* client, guac_stream* stream) {
|
||||
}
|
||||
|
||||
int guac_rdp_clipboard_end_handler(guac_client* client, guac_stream* stream) {
|
||||
guac_client_log_info(client, "Received end of clipboard data");
|
||||
|
||||
rdp_guac_client_data* client_data = (rdp_guac_client_data*) client->data;
|
||||
rdpChannels* channels = client_data->rdp_inst->context->channels;
|
||||
|
||||
RDP_CB_FORMAT_LIST_EVENT* format_list =
|
||||
(RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(
|
||||
CliprdrChannel_Class,
|
||||
CliprdrChannel_FormatList,
|
||||
NULL, NULL);
|
||||
|
||||
/* Notify server that text data is now available */
|
||||
format_list->formats = (UINT32*) malloc(sizeof(UINT32));
|
||||
format_list->formats[0] = CB_FORMAT_TEXT;
|
||||
format_list->formats[1] = CB_FORMAT_UNICODETEXT;
|
||||
format_list->num_formats = 2;
|
||||
|
||||
freerdp_channels_send_event(channels, (wMessage*) format_list);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user