summaryrefslogtreecommitdiffstats
path: root/sesman/chansrv/clipboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'sesman/chansrv/clipboard.c')
-rw-r--r--sesman/chansrv/clipboard.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/sesman/chansrv/clipboard.c b/sesman/chansrv/clipboard.c
index 6708bba2..3963cfef 100644
--- a/sesman/chansrv/clipboard.c
+++ b/sesman/chansrv/clipboard.c
@@ -55,6 +55,7 @@ xlsatoms - dump atoms
#include "clipboard_file.h"
#include "clipboard_common.h"
#include "xcommon.h"
+#include "chansrv_fuse.h"
#define LLOG_LEVEL 11
#define LLOGLN(_level, _args) \
@@ -202,6 +203,7 @@ clipboard_init(void)
return 0;
}
+ fuse_init();
xcommon_init();
clipboard_deinit();
g_incr_max_req_size = XMaxRequestSize(g_display) * 4 - 24;
@@ -346,6 +348,8 @@ clipboard_deinit(void)
g_wnd = 0;
}
+ fuse_deinit();
+
g_free(g_clip_c2s.data);
g_clip_c2s.data = 0;
g_free(g_clip_s2c.data);
@@ -442,7 +446,7 @@ clipboard_out_unicode(struct stream *s, char *text, int num_chars)
/*****************************************************************************/
/* returns number of bytes read */
-static int APP_CC
+int APP_CC
clipboard_in_unicode(struct stream *s, char *text, int *num_chars)
{
int index;
@@ -838,6 +842,7 @@ clipboard_process_format_announce(struct stream *s, int clip_msg_status,
int formatId;
int count;
int bytes;
+ int got_file;
char desc[256];
char *holdp;
@@ -847,6 +852,7 @@ clipboard_process_format_announce(struct stream *s, int clip_msg_status,
clipboard_send_format_ack();
desc[0] = 0;
g_num_formatIds = 0;
+ got_file = 0;
while (clip_msg_len > 3)
{
in_uint32_le(s, formatId);
@@ -869,7 +875,7 @@ clipboard_process_format_announce(struct stream *s, int clip_msg_status,
desc[15] = 0;
clip_msg_len -= 32;
}
- LLOGLN(10, ("clipboard_process_format_announce: formatId 0x%8.8x "
+ LLOGLN(0, ("clipboard_process_format_announce: formatId 0x%8.8x "
"wszFormatName [%s] clip_msg_len %d", formatId, desc,
clip_msg_len));
g_formatIds[g_num_formatIds] = formatId;
@@ -878,6 +884,18 @@ clipboard_process_format_announce(struct stream *s, int clip_msg_status,
{
LLOGLN(10, ("clipboard_process_format_announce: max formats"));
}
+ if (formatId == 0x0000c0c8)
+ {
+ got_file = 1;
+ }
+ }
+
+ if (got_file)
+ {
+ LLOGLN(0, ("clipboard_process_format_announce: sending file list request"));
+ g_clip_c2s.xrdp_clip_type = XRDP_CB_FILE;
+ clipboard_send_data_request(0x0000c0c8);
+ return 0;
}
if ((g_num_formatIds > 0) &&
@@ -1069,6 +1087,13 @@ clipboard_process_data_response(struct stream *s, int clip_msg_status,
clip_msg_len);
return 0;
}
+ if (g_clip_c2s.xrdp_clip_type == XRDP_CB_FILE)
+ {
+ LLOGLN(0, (" XRDP_CB_FILE"));
+ //g_hexdump(s->p, s->end - s->p);
+ clipboard_c2s_in_files(s);
+ return 0;
+ }
LOGM((LOG_LEVEL_DEBUG, "clipboard_process_data_response: "
"CLIPRDR_DATA_RESPONSE"));
len = (int)(s->end - s->p);