libfreerdp-core: add option to dump remotefx to pcap
This commit is contained in:
parent
a863c107ab
commit
9f256c8374
@ -718,7 +718,7 @@ int main(int argc, char* argv[])
|
|||||||
chanman = freerdp_chanman_new();
|
chanman = freerdp_chanman_new();
|
||||||
SET_CHANMAN(instance, chanman);
|
SET_CHANMAN(instance, chanman);
|
||||||
|
|
||||||
instance->settings->sw_gdi = False;
|
instance->settings->sw_gdi = True;
|
||||||
|
|
||||||
if (freerdp_parse_args(instance->settings, argc, argv,
|
if (freerdp_parse_args(instance->settings, argc, argv,
|
||||||
xf_process_plugin_args, chanman, xf_process_ui_args, NULL) < 0)
|
xf_process_plugin_args, chanman, xf_process_ui_args, NULL) < 0)
|
||||||
|
@ -76,7 +76,9 @@ void test_pcap(void)
|
|||||||
|
|
||||||
pcap = pcap_open("/tmp/test.pcap", True);
|
pcap = pcap_open("/tmp/test.pcap", True);
|
||||||
pcap_add_record(pcap, test_packet_1, sizeof(test_packet_1));
|
pcap_add_record(pcap, test_packet_1, sizeof(test_packet_1));
|
||||||
|
pcap_flush(pcap);
|
||||||
pcap_add_record(pcap, test_packet_2, sizeof(test_packet_2));
|
pcap_add_record(pcap, test_packet_2, sizeof(test_packet_2));
|
||||||
|
pcap_flush(pcap);
|
||||||
pcap_add_record(pcap, test_packet_3, sizeof(test_packet_3));
|
pcap_add_record(pcap, test_packet_3, sizeof(test_packet_3));
|
||||||
pcap_close(pcap);
|
pcap_close(pcap);
|
||||||
|
|
||||||
@ -90,6 +92,8 @@ void test_pcap(void)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CU_ASSERT(i == 3);
|
||||||
|
|
||||||
pcap_close(pcap);
|
pcap_close(pcap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,6 +297,9 @@ struct rdp_settings
|
|||||||
uint8 rfx_codec_id;
|
uint8 rfx_codec_id;
|
||||||
boolean frame_acknowledge;
|
boolean frame_acknowledge;
|
||||||
|
|
||||||
|
boolean dump_rfx;
|
||||||
|
char* dump_rfx_file;
|
||||||
|
|
||||||
boolean remote_app;
|
boolean remote_app;
|
||||||
uint8 num_icon_caches;
|
uint8 num_icon_caches;
|
||||||
uint16 num_icon_cache_entries;
|
uint16 num_icon_cache_entries;
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <freerdp/rail.h>
|
#include <freerdp/rail.h>
|
||||||
#include <freerdp/types.h>
|
#include <freerdp/types.h>
|
||||||
|
#include <freerdp/utils/pcap.h>
|
||||||
|
|
||||||
/* Common */
|
/* Common */
|
||||||
|
|
||||||
@ -1072,6 +1073,9 @@ struct rdp_update
|
|||||||
void* param1;
|
void* param1;
|
||||||
void* param2;
|
void* param2;
|
||||||
|
|
||||||
|
boolean dump_rfx;
|
||||||
|
rdpPcap* pcap_rfx;
|
||||||
|
|
||||||
pcBeginPaint BeginPaint;
|
pcBeginPaint BeginPaint;
|
||||||
pcEndPaint EndPaint;
|
pcEndPaint EndPaint;
|
||||||
pcSetBounds SetBounds;
|
pcSetBounds SetBounds;
|
||||||
|
@ -76,5 +76,6 @@ FREERDP_API void pcap_close(rdpPcap* pcap);
|
|||||||
FREERDP_API void pcap_add_record(rdpPcap* pcap, void* data, uint32 length);
|
FREERDP_API void pcap_add_record(rdpPcap* pcap, void* data, uint32 length);
|
||||||
FREERDP_API boolean pcap_has_next_record(rdpPcap* pcap);
|
FREERDP_API boolean pcap_has_next_record(rdpPcap* pcap);
|
||||||
FREERDP_API boolean pcap_get_next_record(rdpPcap* pcap, pcap_record* record);
|
FREERDP_API boolean pcap_get_next_record(rdpPcap* pcap, pcap_record* record);
|
||||||
|
FREERDP_API void pcap_flush(rdpPcap* pcap);
|
||||||
|
|
||||||
#endif /* __UTILS_PCAP_H */
|
#endif /* __UTILS_PCAP_H */
|
||||||
|
@ -34,9 +34,19 @@ boolean freerdp_connect(freerdp* instance)
|
|||||||
rdp = (rdpRdp*) instance->rdp;
|
rdp = (rdpRdp*) instance->rdp;
|
||||||
|
|
||||||
IFCALL(instance->PreConnect, instance);
|
IFCALL(instance->PreConnect, instance);
|
||||||
|
|
||||||
status = rdp_client_connect((rdpRdp*) instance->rdp);
|
status = rdp_client_connect((rdpRdp*) instance->rdp);
|
||||||
|
|
||||||
if (status)
|
if (status)
|
||||||
|
{
|
||||||
|
if (instance->settings->dump_rfx)
|
||||||
|
{
|
||||||
|
instance->update->dump_rfx = instance->settings->dump_rfx;
|
||||||
|
instance->update->pcap_rfx = pcap_open(instance->settings->dump_rfx_file, True);
|
||||||
|
}
|
||||||
|
|
||||||
IFCALL(instance->PostConnect, instance);
|
IFCALL(instance->PostConnect, instance);
|
||||||
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <freerdp/utils/pcap.h>
|
||||||
|
|
||||||
#include "surface.h"
|
#include "surface.h"
|
||||||
|
|
||||||
static int update_recv_surfcmd_surface_bits(rdpUpdate* update, STREAM* s)
|
static int update_recv_surfcmd_surface_bits(rdpUpdate* update, STREAM* s)
|
||||||
@ -62,6 +64,12 @@ boolean update_recv_surfcmds(rdpUpdate* update, uint16 size, STREAM* s)
|
|||||||
|
|
||||||
while (size > 2)
|
while (size > 2)
|
||||||
{
|
{
|
||||||
|
if (update->dump_rfx)
|
||||||
|
{
|
||||||
|
pcap_add_record(update->pcap_rfx, s->p, size);
|
||||||
|
pcap_flush(update->pcap_rfx);
|
||||||
|
}
|
||||||
|
|
||||||
stream_read_uint16(s, cmdType);
|
stream_read_uint16(s, cmdType);
|
||||||
size -= 2;
|
size -= 2;
|
||||||
|
|
||||||
|
@ -242,6 +242,17 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
|
|||||||
settings->performance_flags = PERF_FLAG_NONE;
|
settings->performance_flags = PERF_FLAG_NONE;
|
||||||
settings->large_pointer = True;
|
settings->large_pointer = True;
|
||||||
}
|
}
|
||||||
|
else if (strcmp("--dump-rfx", argv[index]) == 0)
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
if (index == argc)
|
||||||
|
{
|
||||||
|
printf("missing file name\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
settings->dump_rfx_file = xstrdup(argv[index]);
|
||||||
|
settings->dump_rfx = True;
|
||||||
|
}
|
||||||
else if (strcmp("-m", argv[index]) == 0)
|
else if (strcmp("-m", argv[index]) == 0)
|
||||||
{
|
{
|
||||||
settings->mouse_motion = 0;
|
settings->mouse_motion = 0;
|
||||||
|
@ -80,6 +80,9 @@ void pcap_add_record(rdpPcap* pcap, void* data, uint32 length)
|
|||||||
pcap->tail = record;
|
pcap->tail = record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pcap->record == NULL)
|
||||||
|
pcap->record = record;
|
||||||
|
|
||||||
record->data = data;
|
record->data = data;
|
||||||
record->length = length;
|
record->length = length;
|
||||||
record->header.incl_len = length;
|
record->header.incl_len = length;
|
||||||
|
Loading…
Reference in New Issue
Block a user