From 72bf8ea032472f54c68c5f14392b011ca69f1095 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Moreau?= Date: Thu, 28 Mar 2013 18:29:57 -0400 Subject: [PATCH] libfreerdp-utils: start migrating old eventing system --- channels/client/channels.c | 23 +++++++- channels/cliprdr/client/cliprdr_format.c | 14 ++--- channels/cliprdr/client/cliprdr_main.c | 9 ++-- channels/rail/client/rail_main.c | 5 +- client/DirectFB/dfreerdp.c | 13 ++--- client/Sample/freerdp.c | 2 +- client/X11/xf_cliprdr.c | 54 ++++++++++--------- client/X11/xf_rail.c | 6 +-- client/X11/xfreerdp.c | 4 +- include/freerdp/client/cliprdr.h | 4 -- include/freerdp/message.h | 90 +++++++++++++++++++++++++++++++- include/freerdp/types.h | 6 ++- libfreerdp/utils/event.c | 35 ++++++++----- 13 files changed, 191 insertions(+), 74 deletions(-) diff --git a/channels/client/channels.c b/channels/client/channels.c index 745ea96..0eccc1d 100644 --- a/channels/client/channels.c +++ b/channels/client/channels.c @@ -1159,7 +1159,7 @@ int freerdp_channels_data(freerdp* instance, int channel_id, void* data, int dat static const char* event_class_to_name_table[] = { "rdpdbg", /* RDP_EVENT_CLASS_DEBUG */ - "cliprdr", /* RDP_EVENT_CLASS_CLIPRDR */ + "", /* RDP_EVENT_CLASS_CLIPRDR */ "tsmf", /* RDP_EVENT_CLASS_TSMF */ "rail", /* RDP_EVENT_CLASS_RAIL */ NULL @@ -1174,11 +1174,30 @@ static const char* event_class_to_name_table[] = FREERDP_API int freerdp_channels_send_event(rdpChannels* channels, RDP_EVENT* event) { int index; - const char* name; + const char* name = NULL; struct channel_data* lchannel_data; name = event_class_to_name_table[event->event_class]; + switch (GetMessageClass(event->id)) + { + case DebugChannel_Class: + name = "rdpdbg"; + break; + + case CliprdrChannel_Class: + name = "cliprdr"; + break; + + case TsmfChannel_Class: + name = "tsmf"; + break; + + case RailChannel_Class: + name = "rail"; + break; + } + if (!name) { DEBUG_CHANNELS("unknown event_class %d", event->event_class); diff --git a/channels/cliprdr/client/cliprdr_format.c b/channels/cliprdr/client/cliprdr_format.c index eae768e..41e4f4f 100644 --- a/channels/cliprdr/client/cliprdr_format.c +++ b/channels/cliprdr/client/cliprdr_format.c @@ -202,8 +202,8 @@ void cliprdr_process_format_list(cliprdrPlugin* cliprdr, wStream* s, UINT32 data CLIPRDR_FORMAT_NAME* format_name; RDP_CB_FORMAT_LIST_EVENT* cb_event; - cb_event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + cb_event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_FormatList, NULL, NULL); if (dataLen > 0) { @@ -304,8 +304,8 @@ void cliprdr_process_format_data_request(cliprdrPlugin* cliprdr, wStream* s, UIN { RDP_CB_DATA_REQUEST_EVENT* cb_event; - cb_event = (RDP_CB_DATA_REQUEST_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_DATA_REQUEST, NULL, NULL); + cb_event = (RDP_CB_DATA_REQUEST_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_DataRequest, NULL, NULL); stream_read_UINT32(s, cb_event->format); svc_plugin_send_event((rdpSvcPlugin*) cliprdr, (RDP_EVENT*) cb_event); @@ -345,14 +345,14 @@ void cliprdr_process_format_data_response(cliprdrPlugin* cliprdr, wStream* s, UI { RDP_CB_DATA_RESPONSE_EVENT* cb_event; - cb_event = (RDP_CB_DATA_RESPONSE_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_DATA_RESPONSE, NULL, NULL); + cb_event = (RDP_CB_DATA_RESPONSE_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_DataResponse, NULL, NULL); if (dataLen > 0) { cb_event->size = dataLen; cb_event->data = (BYTE*) malloc(dataLen); - memcpy(cb_event->data, stream_get_tail(s), dataLen); + CopyMemory(cb_event->data, stream_get_tail(s), dataLen); } svc_plugin_send_event((rdpSvcPlugin*) cliprdr, (RDP_EVENT*) cb_event); diff --git a/channels/cliprdr/client/cliprdr_main.c b/channels/cliprdr/client/cliprdr_main.c index ae60267..b7b756f 100644 --- a/channels/cliprdr/client/cliprdr_main.c +++ b/channels/cliprdr/client/cliprdr_main.c @@ -188,7 +188,8 @@ static void cliprdr_process_monitor_ready(cliprdrPlugin* cliprdr, wStream* s, UI if (cliprdr->received_caps) cliprdr_send_clip_caps(cliprdr); - event = freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, RDP_EVENT_TYPE_CB_MONITOR_READY, NULL, NULL); + event = freerdp_event_new(CliprdrChannel_Class, CliprdrChannel_MonitorReady, NULL, NULL); + svc_plugin_send_event((rdpSvcPlugin*) cliprdr, event); } @@ -244,15 +245,15 @@ static void cliprdr_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event) { switch (event->event_type) { - case RDP_EVENT_TYPE_CB_FORMAT_LIST: + case CliprdrChannel_FormatList: cliprdr_process_format_list_event((cliprdrPlugin*) plugin, (RDP_CB_FORMAT_LIST_EVENT*) event); break; - case RDP_EVENT_TYPE_CB_DATA_REQUEST: + case CliprdrChannel_DataRequest: cliprdr_process_format_data_request_event((cliprdrPlugin*) plugin, (RDP_CB_DATA_REQUEST_EVENT*) event); break; - case RDP_EVENT_TYPE_CB_DATA_RESPONSE: + case CliprdrChannel_DataResponse: cliprdr_process_format_data_response_event((cliprdrPlugin*) plugin, (RDP_CB_DATA_RESPONSE_EVENT*) event); break; diff --git a/channels/rail/client/rail_main.c b/channels/rail/client/rail_main.c index 23bf601..16a6927 100644 --- a/channels/rail/client/rail_main.c +++ b/channels/rail/client/rail_main.c @@ -51,10 +51,7 @@ void rail_send_channel_data(void* rail_object, void* data, size_t length) static void on_free_rail_channel_event(RDP_EVENT* event) { - if (event->event_class == RDP_EVENT_CLASS_RAIL) - { - rail_free_cloned_order(event->event_type, event->user_data); - } + rail_free_cloned_order(event->event_type, event->user_data); } void rail_send_channel_event(void* rail_object, UINT16 event_type, void* param) diff --git a/client/DirectFB/dfreerdp.c b/client/DirectFB/dfreerdp.c index 1812cd3..3b5b253 100644 --- a/client/DirectFB/dfreerdp.c +++ b/client/DirectFB/dfreerdp.c @@ -268,9 +268,9 @@ static void df_process_cb_monitor_ready_event(rdpChannels* channels, freerdp* in RDP_EVENT* event; RDP_CB_FORMAT_LIST_EVENT* format_list_event; - event = freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + event = freerdp_event_new(CliprdrChannel_Class, CliprdrChannel_FormatList, NULL, NULL); - format_list_event = (RDP_CB_FORMAT_LIST_EVENT*)event; + format_list_event = (RDP_CB_FORMAT_LIST_EVENT*) event; format_list_event->num_formats = 0; freerdp_channels_send_event(channels, event); @@ -284,11 +284,12 @@ static void df_process_channel_event(rdpChannels* channels, freerdp* instance) if (event) { - switch (event->event_type) + switch (GetMessageType(event->id)) { - case RDP_EVENT_TYPE_CB_MONITOR_READY: + case CliprdrChannel_MonitorReady: df_process_cb_monitor_ready_event(channels, instance); break; + default: printf("df_process_channel_event: unknown event type %d\n", event->event_type); break; @@ -319,8 +320,8 @@ int dfreerdp_run(freerdp* instance) dfContext* context; rdpChannels* channels; - memset(rfds, 0, sizeof(rfds)); - memset(wfds, 0, sizeof(wfds)); + ZeroMemory(rfds, sizeof(rfds)); + ZeroMemory(wfds, sizeof(wfds)); if (!freerdp_connect(instance)) return 0; diff --git a/client/Sample/freerdp.c b/client/Sample/freerdp.c index 11155c2..34bbb31 100644 --- a/client/Sample/freerdp.c +++ b/client/Sample/freerdp.c @@ -103,7 +103,7 @@ void tf_process_cb_monitor_ready_event(rdpChannels* channels, freerdp* instance) RDP_EVENT* event; RDP_CB_FORMAT_LIST_EVENT* format_list_event; - event = freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + event = freerdp_event_new(CliprdrChannel_Class, CliprdrChannel_FormatList, NULL, NULL); format_list_event = (RDP_CB_FORMAT_LIST_EVENT*) event; format_list_event->num_formats = 0; diff --git a/client/X11/xf_cliprdr.c b/client/X11/xf_cliprdr.c index 78299cf..bc11d0a 100644 --- a/client/X11/xf_cliprdr.c +++ b/client/X11/xf_cliprdr.c @@ -329,8 +329,8 @@ static void xf_cliprdr_send_raw_format_list(xfInfo* xfi) } DEBUG_X11_CLIPRDR("format=%d len=%d bytes_left=%d", format, (int) length, (int) bytes_left); - event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_FormatList, NULL, NULL); event->raw_format_data = (BYTE*) malloc(length); memcpy(event->raw_format_data, format_data, length); @@ -345,8 +345,8 @@ static void xf_cliprdr_send_null_format_list(xfInfo* xfi) RDP_CB_FORMAT_LIST_EVENT* event; clipboardContext* cb = (clipboardContext*) xfi->clipboard_context; - event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_FormatList, NULL, NULL); event->num_formats = 0; @@ -359,8 +359,8 @@ static void xf_cliprdr_send_supported_format_list(xfInfo* xfi) RDP_CB_FORMAT_LIST_EVENT* event; clipboardContext* cb = (clipboardContext*) xfi->clipboard_context; - event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_FormatList, NULL, NULL); event->formats = (UINT32*) malloc(sizeof(UINT32) * cb->num_format_mappings); event->num_formats = cb->num_format_mappings; @@ -396,8 +396,8 @@ static void xf_cliprdr_send_data_request(xfInfo* xfi, UINT32 format) RDP_CB_DATA_REQUEST_EVENT* event; clipboardContext* cb = (clipboardContext*) xfi->clipboard_context; - event = (RDP_CB_DATA_REQUEST_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_DATA_REQUEST, NULL, NULL); + event = (RDP_CB_DATA_REQUEST_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_DataRequest, NULL, NULL); event->format = format; @@ -409,8 +409,8 @@ static void xf_cliprdr_send_data_response(xfInfo* xfi, BYTE* data, int size) RDP_CB_DATA_RESPONSE_EVENT* event; clipboardContext* cb = (clipboardContext*) xfi->clipboard_context; - event = (RDP_CB_DATA_RESPONSE_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_DATA_RESPONSE, NULL, NULL); + event = (RDP_CB_DATA_RESPONSE_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_DataResponse, NULL, NULL); event->data = data; event->size = size; @@ -481,19 +481,19 @@ static void xf_cliprdr_get_requested_targets(xfInfo* xfi) clipboardContext* cb = (clipboardContext*) xfi->clipboard_context; XGetWindowProperty(xfi->display, xfi->drawable, cb->property_atom, - 0, 200, 0, XA_ATOM, - &atom, &format, &length, &bytes_left, &data); + 0, 200, 0, XA_ATOM, &atom, &format, &length, &bytes_left, &data); DEBUG_X11_CLIPRDR("type=%d format=%d length=%d bytes_left=%d", (int) atom, format, (int) length, (int) bytes_left); if (length > 0) { - event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, - RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + event = (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new(CliprdrChannel_Class, + CliprdrChannel_FormatList, NULL, NULL); event->formats = (UINT32*) malloc(sizeof(UINT32) * cb->num_format_mappings); num = 0; + for (i = 0; i < length; i++) { atom = ((Atom*) data)[i]; @@ -509,6 +509,7 @@ static void xf_cliprdr_get_requested_targets(xfInfo* xfi) } } } + event->num_formats = num; XFree(data); @@ -561,9 +562,10 @@ static BYTE* xf_cliprdr_process_requested_dib(BYTE* data, int* size) BYTE* outbuf; /* length should be at least BMP header (14) + sizeof(BITMAPINFOHEADER) */ + if (*size < 54) { - DEBUG_X11_CLIPRDR("bmp length %d too short", *capacity); + DEBUG_X11_CLIPRDR("bmp length %d too short", *size); return NULL; } @@ -571,7 +573,7 @@ static BYTE* xf_cliprdr_process_requested_dib(BYTE* data, int* size) outbuf = (BYTE*) malloc(*size); ZeroMemory(outbuf, *size); - memcpy(outbuf, data + 14, *size); + CopyMemory(outbuf, data + 14, *size); return outbuf; } @@ -904,9 +906,10 @@ static void xf_cliprdr_process_dib(clipboardContext* cb, BYTE* data, int size) UINT32 ncolors; /* size should be at least sizeof(BITMAPINFOHEADER) */ + if (size < 40) { - DEBUG_X11_CLIPRDR("dib size %d too short", capacity); + DEBUG_X11_CLIPRDR("dib size %d too short", size); return; } @@ -967,9 +970,9 @@ static void xf_cliprdr_process_cb_data_response_event(xfInfo* xfi, RDP_CB_DATA_R { clipboardContext* cb = (clipboardContext*) xfi->clipboard_context; - DEBUG_X11_CLIPRDR("size=%d", event->capacity); + DEBUG_X11_CLIPRDR("size=%d", event->size); - if (cb->respond == NULL) + if (!cb->respond) { DEBUG_X11_CLIPRDR("unexpected data"); return; @@ -986,6 +989,7 @@ static void xf_cliprdr_process_cb_data_response_event(xfInfo* xfi, RDP_CB_DATA_R free(cb->data); cb->data = NULL; } + switch (cb->data_format) { case CB_FORMAT_RAW: @@ -1029,26 +1033,26 @@ static void xf_cliprdr_process_cb_data_response_event(xfInfo* xfi, RDP_CB_DATA_R void xf_process_cliprdr_event(xfInfo* xfi, RDP_EVENT* event) { - switch (event->event_type) + switch (GetMessageType(event->id)) { - case RDP_EVENT_TYPE_CB_MONITOR_READY: + case CliprdrChannel_MonitorReady: xf_cliprdr_process_cb_monitor_ready_event(xfi); break; - case RDP_EVENT_TYPE_CB_FORMAT_LIST: + case CliprdrChannel_FormatList: xf_cliprdr_process_cb_format_list_event(xfi, (RDP_CB_FORMAT_LIST_EVENT*) event); break; - case RDP_EVENT_TYPE_CB_DATA_REQUEST: + case CliprdrChannel_DataRequest: xf_cliprdr_process_cb_data_request_event(xfi, (RDP_CB_DATA_REQUEST_EVENT*) event); break; - case RDP_EVENT_TYPE_CB_DATA_RESPONSE: + case CliprdrChannel_DataResponse: xf_cliprdr_process_cb_data_response_event(xfi, (RDP_CB_DATA_RESPONSE_EVENT*) event); break; default: - DEBUG_X11_CLIPRDR("unknown event type %d", event->event_type); + DEBUG_X11_CLIPRDR("unknown event type %d", GetMessageType(event->id)); break; } } diff --git a/client/X11/xf_rail.c b/client/X11/xf_rail.c index fe9f1c8..48e8591 100644 --- a/client/X11/xf_rail.c +++ b/client/X11/xf_rail.c @@ -244,10 +244,7 @@ void xf_rail_register_callbacks(xfInfo* xfi, rdpRail* rail) static void xf_on_free_rail_client_event(RDP_EVENT* event) { - if (event->event_class == RDP_EVENT_CLASS_RAIL) - { - rail_free_cloned_order(event->event_type, event->user_data); - } + rail_free_cloned_order(event->event_type, event->user_data); } static void xf_send_rail_client_event(rdpChannels* channels, UINT16 event_type, void* param) @@ -261,6 +258,7 @@ static void xf_send_rail_client_event(rdpChannels* channels, UINT16 event_type, { out_event = freerdp_event_new(RDP_EVENT_CLASS_RAIL, event_type, xf_on_free_rail_client_event, payload); + freerdp_channels_send_event(channels, out_event); } } diff --git a/client/X11/xfreerdp.c b/client/X11/xfreerdp.c index 0752dde..81c43cb 100644 --- a/client/X11/xfreerdp.c +++ b/client/X11/xfreerdp.c @@ -977,7 +977,7 @@ void xf_process_channel_event(rdpChannels* channels, freerdp* instance) if (event) { - switch (event->event_class) + switch (GetMessageClass(event->id)) { case RDP_EVENT_CLASS_RAIL: xf_process_rail_event(xfi, channels, event); @@ -987,7 +987,7 @@ void xf_process_channel_event(rdpChannels* channels, freerdp* instance) xf_process_tsmf_event(xfi, event); break; - case RDP_EVENT_CLASS_CLIPRDR: + case CliprdrChannel_Class: xf_process_cliprdr_event(xfi, event); break; diff --git a/include/freerdp/client/cliprdr.h b/include/freerdp/client/cliprdr.h index c503de4..3153315 100644 --- a/include/freerdp/client/cliprdr.h +++ b/include/freerdp/client/cliprdr.h @@ -23,10 +23,6 @@ /** * Event Types */ -#define RDP_EVENT_TYPE_CB_MONITOR_READY 1 -#define RDP_EVENT_TYPE_CB_FORMAT_LIST 2 -#define RDP_EVENT_TYPE_CB_DATA_REQUEST 3 -#define RDP_EVENT_TYPE_CB_DATA_RESPONSE 4 /** * Clipboard Formats diff --git a/include/freerdp/message.h b/include/freerdp/message.h index 9eea250..504c68d 100644 --- a/include/freerdp/message.h +++ b/include/freerdp/message.h @@ -20,8 +20,10 @@ #ifndef FREERDP_CORE_MESSAGE_H #define FREERDP_CORE_MESSAGE_H -#define GetMessageType(_id) (_id & 0xFF) -#define GetMessageClass(_id) ((_id >> 16) & 0xFF) +#define GetMessageType(_id) (_id & 0xFF) +#define GetMessageClass(_id) ((_id >> 16) & 0xFF) + +#define GetMessageId(_class, _type) ((_class << 16) | _type) #define MakeMessageId(_class, _type) \ (((_class ##_Class) << 16) | (_class ## _ ## _type)) @@ -234,5 +236,89 @@ #define FREERDP_INPUT_MOUSE_EVENT MakeMessageId(Input, MouseEvent) #define FREERDP_INPUT_EXTENDED_MOUSE_EVENT MakeMessageId(Input, ExtendedMouseEvent) +/** + * Static Channel Message Queues + */ + +#define FREERDP_CHANNEL_MESSAGE_QUEUE 3 + +#define Channel_Base 20 + +/** + * Debug Channel + */ + +#define DebugChannel_Class (Channel_Base + 1) + +/** + * Clipboard Channel + */ + +#define CliprdrChannel_Class (Channel_Base + 2) + +#define CliprdrChannel_MonitorReady 1 +#define CliprdrChannel_FormatList 2 +#define CliprdrChannel_DataRequest 3 +#define CliprdrChannel_DataResponse 4 + +#define FREERDP_CLIPRDR_CHANNEL_MONITOR_READY MakeMessageId(CliprdrChannel, MonitorReady) +#define FREERDP_CLIPRDR_CHANNEL_FORMAT_LIST MakeMessageId(CliprdrChannel, FormatList) +#define FREERDP_CLIPRDR_CHANNEL_DATA_REQUEST MakeMessageId(CliprdrChannel, DataRequest) +#define FREERDP_CLIPRDR_CHANNEL_DATA_RESPONSE MakeMessageId(CliprdrChannel, DataResponse) + +/** + * Multimedia Redirection Channel + */ + +#define TsmfChannel_Class (Channel_Base + 3) + +#define TsmfChannel_VideoFrame 1 +#define TsmfChannel_Redraw 2 + +#define FREERDP_TSMF_CHANNEL_VIDEO_FRAME MakeMessageId(TsmfChannel, VideoFrame) +#define FREERDP_TSMF_CHANNEL_REDRAW MakeMessageId(TsmfChannel, Redraw) + +/** + * RemoteApp Channel + */ + +#define RailChannel_Class (Channel_Base + 4) + +#define RailChannel_ClientExecute 1 +#define RailChannel_ClientActivate 2 +#define RailChannel_ClientSystemParameters 3 +#define RailChannel_ClientSystemCommand 4 +#define RailChannel_ClientHandshake 5 +#define RailChannel_ServerHandshake 6 +#define RailChannel_ClientNotifyEvent 7 +#define RailChannel_ClientWindowMove 8 +#define RailChannel_ServerLocalMoveSize 9 +#define RailChannel_ServerMinMaxInfo 10 +#define RailChannel_ClientInformation 11 +#define RailChannel_ClientSystemMenu 12 +#define RailChannel_ClientLanguageBarInfo 13 +#define RailChannel_ServerLanguageBarInfo 14 +#define RailChannel_ServerExecuteResult 15 +#define RailChannel_ClientGetAppIdRequest 16 +#define RailChannel_ServerGetAppIdResponse 17 + +#define FREERDP_RAIL_CHANNEL_CLIENT_EXECUTE MakeMessageId(RailChannel, ClientExecute) +#define FREERDP_RAIL_CHANNEL_CLIENT_ACTIVATE MakeMessageId(RailChannel, ClientActivate) +#define FREERDP_RAIL_CHANNEL_CLIENT_SYSTEM_PARAMETERS MakeMessageId(RailChannel, ClientSystemParameters) +#define FREERDP_RAIL_CHANNEL_CLIENT_SYSTEM_COMMAND MakeMessageId(RailChannel, ClientSystemCommand) +#define FREERDP_RAIL_CHANNEL_CLIENT_HANDSHAKE MakeMessageId(RailChannel, ClientHandshake) +#define FREERDP_RAIL_CHANNEL_SERVER_HANDSHAKE MakeMessageId(RailChannel, ServerHandshake) +#define FREERDP_RAIL_CHANNEL_CLIENT_NOTIFY_EVENT MakeMessageId(RailChannel, ClientNotifyEvent) +#define FREERDP_RAIL_CHANNEL_CLIENT_WINDOW_MOVE MakeMessageId(RailChannel, ClientWindowMove) +#define FREERDP_RAIL_CHANNEL_SERVER_LOCAL_MOVE_SIZE MakeMessageId(RailChannel, ServerLocalMoveSize) +#define FREERDP_RAIL_CHANNEL_SERVER_MIN_MAX_INFO MakeMessageId(RailChannel, ServerMinMaxInfo) +#define FREERDP_RAIL_CHANNEL_CLIENT_INFORMATION MakeMessageId(RailChannel, ClientInformation) +#define FREERDP_RAIL_CHANNEL_CLIENT_SYSTEM_MENU MakeMessageId(RailChannel, ClientSystemMenu) +#define FREERDP_RAIL_CHANNEL_CLIENT_LANGUAGE_BAR_INFO MakeMessageId(RailChannel, ClientLanguageBarInfo) +#define FREERDP_RAIL_CHANNEL_SERVER_LANGUAGE_BAR_INFO MakeMessageId(RailChannel, ServerLanguageBarInfo) +#define FREERDP_RAIL_CHANNEL_SERVER_EXECUTE_RESULT MakeMessageId(RailChannel, ServerExecuteResult) +#define FREERDP_RAIL_CHANNEL_CLIENT_GET_APP_ID_REQUEST MakeMessageId(RailChannel, ClientGetAppIdRequest) +#define FREERDP_RAIL_CHANNEL_SERVER_GET_APP_ID_RESPONSE MakeMessageId(RailChannel, ServerGetAppIdResponse) + #endif /* FREERDP_CORE_MESSAGE_H */ diff --git a/include/freerdp/types.h b/include/freerdp/types.h index e36bea5..64557a2 100644 --- a/include/freerdp/types.h +++ b/include/freerdp/types.h @@ -59,12 +59,17 @@ struct _RECTANGLE_16 typedef struct _RECTANGLE_16 RECTANGLE_16; /* Plugin events */ + +#include +#include + typedef struct _RDP_EVENT RDP_EVENT; typedef void (*RDP_EVENT_CALLBACK) (RDP_EVENT* event); struct _RDP_EVENT { + UINT32 id; UINT16 event_class; UINT16 event_type; RDP_EVENT_CALLBACK on_event_free_callback; @@ -74,7 +79,6 @@ struct _RDP_EVENT enum RDP_EVENT_CLASS { RDP_EVENT_CLASS_DEBUG = 0, - RDP_EVENT_CLASS_CLIPRDR, RDP_EVENT_CLASS_TSMF, RDP_EVENT_CLASS_RAIL }; diff --git a/libfreerdp/utils/event.c b/libfreerdp/utils/event.c index 39e186e..763a95d 100644 --- a/libfreerdp/utils/event.c +++ b/libfreerdp/utils/event.c @@ -27,6 +27,7 @@ #include +#include #include #include #include @@ -38,24 +39,28 @@ static RDP_EVENT* freerdp_cliprdr_event_new(UINT16 event_type) switch (event_type) { - case RDP_EVENT_TYPE_CB_MONITOR_READY: + case CliprdrChannel_MonitorReady: event = (RDP_EVENT*) malloc(sizeof(RDP_CB_MONITOR_READY_EVENT)); ZeroMemory(event, sizeof(RDP_CB_MONITOR_READY_EVENT)); + event->id = MakeMessageId(CliprdrChannel, MonitorReady); break; - case RDP_EVENT_TYPE_CB_FORMAT_LIST: + case CliprdrChannel_FormatList: event = (RDP_EVENT*) malloc(sizeof(RDP_CB_FORMAT_LIST_EVENT)); ZeroMemory(event, sizeof(RDP_CB_FORMAT_LIST_EVENT)); + event->id = MakeMessageId(CliprdrChannel, FormatList); break; - case RDP_EVENT_TYPE_CB_DATA_REQUEST: + case CliprdrChannel_DataRequest: event = (RDP_EVENT*) malloc(sizeof(RDP_CB_DATA_REQUEST_EVENT)); ZeroMemory(event, sizeof(RDP_CB_DATA_REQUEST_EVENT)); + event->id = MakeMessageId(CliprdrChannel, DataRequest); break; - case RDP_EVENT_TYPE_CB_DATA_RESPONSE: + case CliprdrChannel_DataResponse: event = (RDP_EVENT*) malloc(sizeof(RDP_CB_DATA_RESPONSE_EVENT)); ZeroMemory(event, sizeof(RDP_CB_DATA_RESPONSE_EVENT)); + event->id = MakeMessageId(CliprdrChannel, DataResponse); break; } @@ -104,7 +109,7 @@ RDP_EVENT* freerdp_event_new(UINT16 event_class, UINT16 event_type, ZeroMemory(event, sizeof(RDP_EVENT)); break; - case RDP_EVENT_CLASS_CLIPRDR: + case CliprdrChannel_Class: event = freerdp_cliprdr_event_new(event_type); break; @@ -123,6 +128,8 @@ RDP_EVENT* freerdp_event_new(UINT16 event_class, UINT16 event_type, event->event_type = event_type; event->on_event_free_callback = on_event_free_callback; event->user_data = user_data; + + event->id = GetMessageId(event_class, event_type); } return event; @@ -130,18 +137,19 @@ RDP_EVENT* freerdp_event_new(UINT16 event_class, UINT16 event_type, static void freerdp_cliprdr_event_free(RDP_EVENT* event) { - switch (event->event_type) + switch (GetMessageType(event->id)) { - case RDP_EVENT_TYPE_CB_FORMAT_LIST: + case CliprdrChannel_FormatList: { - RDP_CB_FORMAT_LIST_EVENT* cb_event = (RDP_CB_FORMAT_LIST_EVENT*)event; + RDP_CB_FORMAT_LIST_EVENT* cb_event = (RDP_CB_FORMAT_LIST_EVENT*) event; free(cb_event->formats); free(cb_event->raw_format_data); } break; - case RDP_EVENT_TYPE_CB_DATA_RESPONSE: + + case CliprdrChannel_DataResponse: { - RDP_CB_DATA_RESPONSE_EVENT* cb_event = (RDP_CB_DATA_RESPONSE_EVENT*)event; + RDP_CB_DATA_RESPONSE_EVENT* cb_event = (RDP_CB_DATA_RESPONSE_EVENT*) event; free(cb_event->data); } break; @@ -164,6 +172,7 @@ static void freerdp_tsmf_event_free(RDP_EVENT* event) static void freerdp_rail_event_free(RDP_EVENT* event) { + } void freerdp_event_free(RDP_EVENT* event) @@ -173,14 +182,16 @@ void freerdp_event_free(RDP_EVENT* event) if (event->on_event_free_callback) event->on_event_free_callback(event); - switch (event->event_class) + switch (GetMessageClass(event->id)) { - case RDP_EVENT_CLASS_CLIPRDR: + case CliprdrChannel_Class: freerdp_cliprdr_event_free(event); break; + case RDP_EVENT_CLASS_TSMF: freerdp_tsmf_event_free(event); break; + case RDP_EVENT_CLASS_RAIL: freerdp_rail_event_free(event); break; -- 2.7.4