diff --git a/channels/disp/CMakeLists.txt b/channels/disp/CMakeLists.txt deleted file mode 100644 index 541892d95..000000000 --- a/channels/disp/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# FreeRDP: A Remote Desktop Protocol Implementation -# FreeRDP cmake build script -# -# Copyright 2012 Marc-Andre Moreau -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -define_channel("disp") - -if(WITH_CLIENT_CHANNELS) - add_channel_client(${MODULE_PREFIX} ${CHANNEL_NAME}) -endif() diff --git a/channels/disp/ChannelOptions.cmake b/channels/disp/ChannelOptions.cmake deleted file mode 100644 index 0e254adad..000000000 --- a/channels/disp/ChannelOptions.cmake +++ /dev/null @@ -1,12 +0,0 @@ - -set(OPTION_DEFAULT OFF) -set(OPTION_CLIENT_DEFAULT ON) -set(OPTION_SERVER_DEFAULT OFF) - -define_channel_options(NAME "disp" TYPE "dynamic" - DESCRIPTION "Display Update Virtual Channel Extension" - SPECIFICATIONS "[MS-RDPEDISP]" - DEFAULT ${OPTION_DEFAULT}) - -define_channel_client_options(${OPTION_CLIENT_DEFAULT}) -define_channel_server_options(${OPTION_SERVER_DEFAULT}) diff --git a/channels/disp/client/CMakeLists.txt b/channels/disp/client/CMakeLists.txt deleted file mode 100644 index 403a15ce4..000000000 --- a/channels/disp/client/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -# FreeRDP: A Remote Desktop Protocol Implementation -# FreeRDP cmake build script -# -# Copyright 2013 Marc-Andre Moreau -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -define_channel_client("disp") - -set(${MODULE_PREFIX}_SRCS - disp_main.c - disp_main.h) - -include_directories(..) - -add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE "DVCPluginEntry") - -set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "") - -set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS - MONOLITHIC ${MONOLITHIC_BUILD} - MODULE freerdp - MODULES freerdp-common freerdp-utils) - -set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS - MONOLITHIC ${MONOLITHIC_BUILD} - MODULE winpr - MODULES winpr-sysinfo) - -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) - -if(NOT STATIC_CHANNELS) - install(TARGETS ${MODULE_NAME} DESTINATION ${FREERDP_PLUGIN_PATH}) -endif() - -set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${CHANNEL_NAME}/Client") - diff --git a/channels/disp/client/disp_main.c b/channels/disp/client/disp_main.c deleted file mode 100644 index feb971550..000000000 --- a/channels/disp/client/disp_main.c +++ /dev/null @@ -1,341 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * Display Update Virtual Channel Extension - * - * Copyright 2013 Marc-Andre Moreau - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "disp_main.h" - -struct _DISP_CHANNEL_CALLBACK -{ - IWTSVirtualChannelCallback iface; - - IWTSPlugin* plugin; - IWTSVirtualChannelManager* channel_mgr; - IWTSVirtualChannel* channel; -}; -typedef struct _DISP_CHANNEL_CALLBACK DISP_CHANNEL_CALLBACK; - -struct _DISP_LISTENER_CALLBACK -{ - IWTSListenerCallback iface; - - IWTSPlugin* plugin; - IWTSVirtualChannelManager* channel_mgr; - DISP_CHANNEL_CALLBACK* channel_callback; -}; -typedef struct _DISP_LISTENER_CALLBACK DISP_LISTENER_CALLBACK; - -struct _DISP_PLUGIN -{ - IWTSPlugin iface; - - IWTSListener* listener; - DISP_LISTENER_CALLBACK* listener_callback; - - UINT32 MaxNumMonitors; - UINT32 MaxMonitorWidth; - UINT32 MaxMonitorHeight; -}; -typedef struct _DISP_PLUGIN DISP_PLUGIN; - -int disp_send_display_control_monitor_layout_pdu(DISP_CHANNEL_CALLBACK* callback, UINT32 NumMonitors, DISPLAY_CONTROL_MONITOR_LAYOUT* Monitors) -{ - int index; - int status; - wStream* s; - UINT32 type; - UINT32 length; - DISP_PLUGIN* disp; - UINT32 MonitorLayoutSize; - - disp = (DISP_PLUGIN*) callback->plugin; - -#ifdef DISP_PREVIEW - MonitorLayoutSize = 32; -#else - MonitorLayoutSize = 40; -#endif - - length = 8 + 8 + (NumMonitors * MonitorLayoutSize); - - type = DISPLAY_CONTROL_PDU_TYPE_MONITOR_LAYOUT; - - s = Stream_New(NULL, length); - - Stream_Write_UINT32(s, type); /* Type (4 bytes) */ - Stream_Write_UINT32(s, length); /* Length (4 bytes) */ - - if (NumMonitors > disp->MaxNumMonitors) - NumMonitors = disp->MaxNumMonitors; - -#ifdef DISP_PREVIEW - Stream_Write_UINT32(s, NumMonitors); /* NumMonitors (4 bytes) */ -#else - Stream_Write_UINT32(s, MonitorLayoutSize); /* MonitorLayoutSize (4 bytes) */ -#endif - - Stream_Write_UINT32(s, NumMonitors); /* NumMonitors (4 bytes) */ - - //fprintf(stderr, "NumMonitors: %d\n", NumMonitors); - - for (index = 0; index < NumMonitors; index++) - { - Monitors[index].Width -= (Monitors[index].Width % 2); - - if (Monitors[index].Width < 200) - Monitors[index].Width = 200; - - if (Monitors[index].Width > disp->MaxMonitorWidth) - Monitors[index].Width = disp->MaxMonitorWidth; - - if (Monitors[index].Height < 200) - Monitors[index].Height = 200; - - if (Monitors[index].Height > disp->MaxMonitorHeight) - Monitors[index].Height = disp->MaxMonitorHeight; - - Stream_Write_UINT32(s, Monitors[index].Flags); /* Flags (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].Left); /* Left (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].Top); /* Top (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].Width); /* Width (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].Height); /* Height (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].PhysicalWidth); /* PhysicalWidth (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].PhysicalHeight); /* PhysicalHeight (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].Orientation); /* Orientation (4 bytes) */ - -#if 0 - fprintf(stderr, "\t: Flags: 0x%04X\n", Monitors[index].Flags); - fprintf(stderr, "\t: Left: %d\n", Monitors[index].Left); - fprintf(stderr, "\t: Top: %d\n", Monitors[index].Top); - fprintf(stderr, "\t: Width: %d\n", Monitors[index].Width); - fprintf(stderr, "\t: Height: %d\n", Monitors[index].Height); - fprintf(stderr, "\t: PhysicalWidth: %d\n", Monitors[index].PhysicalWidth); - fprintf(stderr, "\t: PhysicalHeight: %d\n", Monitors[index].PhysicalHeight); - fprintf(stderr, "\t: Orientation: %d\n", Monitors[index].Orientation); -#endif - -#ifndef DISP_PREVIEW - Stream_Write_UINT32(s, Monitors[index].DesktopScaleFactor); /* DesktopScaleFactor (4 bytes) */ - Stream_Write_UINT32(s, Monitors[index].DeviceScaleFactor); /* DeviceScaleFactor (4 bytes) */ -#endif - } - - Stream_SealLength(s); - - status = callback->channel->Write(callback->channel, Stream_Length(s), Stream_Buffer(s), NULL); - - Stream_Free(s, TRUE); - - return status; -} - -int disp_recv_display_control_caps_pdu(DISP_CHANNEL_CALLBACK* callback, wStream* s) -{ - DISP_PLUGIN* disp; - - disp = (DISP_PLUGIN*) callback->plugin; - - Stream_Read_UINT32(s, disp->MaxNumMonitors); /* MaxNumMonitors (4 bytes) */ - Stream_Read_UINT32(s, disp->MaxMonitorWidth); /* MaxMonitorWidth (4 bytes) */ - Stream_Read_UINT32(s, disp->MaxMonitorHeight); /* MaxMonitorHeight (4 bytes) */ - - //fprintf(stderr, "DisplayControlCapsPdu: MaxNumMonitors: %d MaxMonitorWidth: %d MaxMonitorHeight: %d\n", - // disp->MaxNumMonitors, disp->MaxMonitorWidth, disp->MaxMonitorHeight); - - return 0; -} - -int disp_recv_pdu(DISP_CHANNEL_CALLBACK* callback, wStream* s) -{ - UINT32 type; - UINT32 length; - - Stream_Read_UINT32(s, type); /* Type (4 bytes) */ - Stream_Read_UINT32(s, length); /* Length (4 bytes) */ - - //fprintf(stderr, "Type: %d Length: %d\n", type, length); - - switch (type) - { - case DISPLAY_CONTROL_PDU_TYPE_CAPS: - disp_recv_display_control_caps_pdu(callback, s); - break; - - default: - break; - } - - return 0; -} - -static int disp_on_data_received(IWTSVirtualChannelCallback* pChannelCallback, UINT32 cbSize, BYTE* pBuffer) -{ - wStream* s; - int status = 0; - DISP_CHANNEL_CALLBACK* callback = (DISP_CHANNEL_CALLBACK*) pChannelCallback; - - s = Stream_New(pBuffer, cbSize); - - status = disp_recv_pdu(callback, s); - - Stream_Free(s, FALSE); - - return status; -} - -static int disp_on_close(IWTSVirtualChannelCallback* pChannelCallback) -{ - DISP_CHANNEL_CALLBACK* callback = (DISP_CHANNEL_CALLBACK*) pChannelCallback; - - if (callback) - { - free(callback); - } - - return 0; -} - -static int disp_on_new_channel_connection(IWTSListenerCallback* pListenerCallback, - IWTSVirtualChannel* pChannel, BYTE* Data, int* pbAccept, - IWTSVirtualChannelCallback** ppCallback) -{ - DISP_CHANNEL_CALLBACK* callback; - DISP_LISTENER_CALLBACK* listener_callback = (DISP_LISTENER_CALLBACK*) pListenerCallback; - - callback = (DISP_CHANNEL_CALLBACK*) malloc(sizeof(DISP_CHANNEL_CALLBACK)); - ZeroMemory(callback, sizeof(DISP_CHANNEL_CALLBACK)); - - callback->iface.OnDataReceived = disp_on_data_received; - callback->iface.OnClose = disp_on_close; - callback->plugin = listener_callback->plugin; - callback->channel_mgr = listener_callback->channel_mgr; - callback->channel = pChannel; - listener_callback->channel_callback = callback; - - *ppCallback = (IWTSVirtualChannelCallback*) callback; - - return 0; -} - -static int disp_plugin_initialize(IWTSPlugin* pPlugin, IWTSVirtualChannelManager* pChannelMgr) -{ - int status; - DISP_PLUGIN* disp = (DISP_PLUGIN*) pPlugin; - - disp->listener_callback = (DISP_LISTENER_CALLBACK*) malloc(sizeof(DISP_LISTENER_CALLBACK)); - ZeroMemory(disp->listener_callback, sizeof(DISP_LISTENER_CALLBACK)); - - disp->listener_callback->iface.OnNewChannelConnection = disp_on_new_channel_connection; - disp->listener_callback->plugin = pPlugin; - disp->listener_callback->channel_mgr = pChannelMgr; - - status = pChannelMgr->CreateListener(pChannelMgr, DISP_DVC_CHANNEL_NAME, 0, - (IWTSListenerCallback*) disp->listener_callback, &(disp->listener)); - - disp->listener->pInterface = disp->iface.pInterface; - - return status; -} - -static int disp_plugin_terminated(IWTSPlugin* pPlugin) -{ - DISP_PLUGIN* disp = (DISP_PLUGIN*) pPlugin; - - if (disp) - { - free(disp); - } - - return 0; -} - -/** - * Channel Client Interface - */ - -int disp_send_monitor_layout(DispClientContext* context, UINT32 NumMonitors, DISPLAY_CONTROL_MONITOR_LAYOUT* Monitors) -{ - DISP_PLUGIN* disp = (DISP_PLUGIN*) context->handle; - DISP_CHANNEL_CALLBACK* callback = disp->listener_callback->channel_callback; - - disp_send_display_control_monitor_layout_pdu(callback, NumMonitors, Monitors); - - return 1; -} - -#ifdef STATIC_CHANNELS -#define DVCPluginEntry disp_DVCPluginEntry -#endif - -int DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints) -{ - int error = 0; - DISP_PLUGIN* disp; - DispClientContext* context; - - disp = (DISP_PLUGIN*) pEntryPoints->GetPlugin(pEntryPoints, "disp"); - - if (disp == NULL) - { - disp = (DISP_PLUGIN*) malloc(sizeof(DISP_PLUGIN)); - - if (disp) - { - ZeroMemory(disp, sizeof(DISP_PLUGIN)); - - disp->iface.Initialize = disp_plugin_initialize; - disp->iface.Connected = NULL; - disp->iface.Disconnected = NULL; - disp->iface.Terminated = disp_plugin_terminated; - - context = (DispClientContext*) malloc(sizeof(DispClientContext)); - - context->handle = (void*) disp; - - context->SendMonitorLayout = disp_send_monitor_layout; - - disp->iface.pInterface = (void*) context; - - disp->MaxNumMonitors = 16; - disp->MaxMonitorWidth = 8192; - disp->MaxMonitorHeight = 8192; - - error = pEntryPoints->RegisterPlugin(pEntryPoints, "disp", (IWTSPlugin*) disp); - } - } - - return error; -} diff --git a/channels/disp/client/disp_main.h b/channels/disp/client/disp_main.h deleted file mode 100644 index db1ce10c5..000000000 --- a/channels/disp/client/disp_main.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * Display Update Virtual Channel Extension - * - * Copyright 2013 Marc-Andre Moreau - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FREERDP_CHANNEL_DISP_CLIENT_MAIN_H -#define FREERDP_CHANNEL_DISP_CLIENT_MAIN_H - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -#include - -#define DISPLAY_CONTROL_PDU_TYPE_MONITOR_LAYOUT 0x00000002 -#define DISPLAY_CONTROL_PDU_TYPE_CAPS 0x00000003 - -#define DISP_PREVIEW 1 - -#endif /* FREERDP_CHANNEL_DISP_CLIENT_MAIN_H */ - diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 1796983b4..afe978df2 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -91,7 +91,6 @@ COMMAND_LINE_ARGUMENT_A args[] = { "usb", COMMAND_LINE_VALUE_REQUIRED, NULL, NULL, NULL, -1, NULL, "Redirect USB device" }, { "multitouch", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Redirect multitouch input" }, { "echo", COMMAND_LINE_VALUE_FLAG, NULL, NULL, NULL, -1, "echo", "Echo channel" }, - { "disp", COMMAND_LINE_VALUE_FLAG, NULL, NULL, NULL, -1, NULL, "Display control" }, { "fonts", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Smooth fonts (ClearType)" }, { "aero", COMMAND_LINE_VALUE_BOOL, NULL, NULL, BoolValueFalse, -1, NULL, "Desktop composition" }, { "window-drag", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Full window drag" }, @@ -608,16 +607,6 @@ int freerdp_client_command_line_post_filter(void* context, COMMAND_LINE_ARGUMENT freerdp_client_add_dynamic_channel(settings, count, p); } - CommandLineSwitchCase(arg, "disp") - { - char* p[1]; - int count; - - count = 1; - p[0] = "disp"; - - freerdp_client_add_dynamic_channel(settings, count, p); - } CommandLineSwitchCase(arg, "sound") { if (arg->Flags & COMMAND_LINE_VALUE_PRESENT)