From 5fd35f0402aa9599ed87f20c49033e8fb650286f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Sun, 28 Aug 2011 15:51:49 -0400 Subject: [PATCH] libfreerdp-core: added --play-rfx option to play RemoteFX data from a file --- include/freerdp/settings.h | 2 ++ include/freerdp/update.h | 1 + libfreerdp-core/freerdp.c | 32 ++++++++++++++++++++++++++++++++ libfreerdp-utils/args.c | 11 +++++++++++ server/test/rfx_test.pcap | Bin 414979 -> 419012 bytes 5 files changed, 46 insertions(+) diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index cc870e9d9..9adf77bb7 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -298,7 +298,9 @@ struct rdp_settings boolean frame_acknowledge; boolean dump_rfx; + boolean play_rfx; char* dump_rfx_file; + char* play_rfx_file; boolean remote_app; uint8 num_icon_caches; diff --git a/include/freerdp/update.h b/include/freerdp/update.h index 006f624b2..aaaf56567 100644 --- a/include/freerdp/update.h +++ b/include/freerdp/update.h @@ -1076,6 +1076,7 @@ struct rdp_update void* param2; boolean dump_rfx; + boolean play_rfx; rdpPcap* pcap_rfx; pcBeginPaint BeginPaint; diff --git a/libfreerdp-core/freerdp.c b/libfreerdp-core/freerdp.c index 4b06392e5..bd88f449d 100644 --- a/libfreerdp-core/freerdp.c +++ b/libfreerdp-core/freerdp.c @@ -20,6 +20,7 @@ #include "rdp.h" #include "input.h" #include "update.h" +#include "surface.h" #include "transport.h" #include "connection.h" @@ -46,6 +47,37 @@ boolean freerdp_connect(freerdp* instance) } IFCALL(instance->PostConnect, instance); + + if (instance->settings->play_rfx) + { + STREAM* s; + rdpUpdate* update; + pcap_record record; + + s = stream_new(1024); + instance->update->play_rfx = instance->settings->play_rfx; + instance->update->pcap_rfx = pcap_open(instance->settings->play_rfx_file, False); + update = instance->update; + + while (pcap_has_next_record(update->pcap_rfx)) + { + pcap_get_next_record_header(update->pcap_rfx, &record); + + s->data = xrealloc(s->data, record.length); + record.data = s->data; + s->size = record.length; + + pcap_get_next_record_content(update->pcap_rfx, &record); + stream_set_pos(s, 0); + + update->BeginPaint(update); + update_recv_surfcmds(update, s->size, s); + update->EndPaint(update); + } + + xfree(s->data); + return True; + } } return status; diff --git a/libfreerdp-utils/args.c b/libfreerdp-utils/args.c index 2d177d306..b6ce38145 100644 --- a/libfreerdp-utils/args.c +++ b/libfreerdp-utils/args.c @@ -293,6 +293,17 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, settings->dump_rfx_file = xstrdup(argv[index]); settings->dump_rfx = True; } + else if (strcmp("--play-rfx", argv[index]) == 0) + { + index++; + if (index == argc) + { + printf("missing file name\n"); + return -1; + } + settings->play_rfx_file = xstrdup(argv[index]); + settings->play_rfx = True; + } else if (strcmp("-m", argv[index]) == 0) { settings->mouse_motion = 0; diff --git a/server/test/rfx_test.pcap b/server/test/rfx_test.pcap index 3a857a36a23723d3987df7fd5673283498389beb..c830e10b596daca4ba744f4d117c8b3561574160 100644 GIT binary patch delta 26204 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 P*M3pX|I*Ibdx8G}A!F{p delta 8660 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