From e84e7928e3b15d1053657e9e4bf4d958610a8c7b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Moreau?= Date: Wed, 17 Sep 2014 21:18:47 -0400 Subject: [PATCH] server/shadow: split into library + executable --- include/freerdp/server/shadow.h | 20 ++++++++++ server/shadow/CMakeLists.txt | 22 +++++++++-- server/shadow/shadow.c | 86 +++++++++++++++++++++++++++++++++++++++++ server/shadow/shadow_server.c | 54 +------------------------- 4 files changed, 126 insertions(+), 56 deletions(-) create mode 100644 server/shadow/shadow.c diff --git a/include/freerdp/server/shadow.h b/include/freerdp/server/shadow.h index 929e6fa..8f010b5 100644 --- a/include/freerdp/server/shadow.h +++ b/include/freerdp/server/shadow.h @@ -142,5 +142,25 @@ struct rdp_shadow_subsystem RDP_SHADOW_SUBSYSTEM_COMMON(); }; +#ifdef __cplusplus +extern "C" { +#endif + +FREERDP_API int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** argv); +FREERDP_API int shadow_server_command_line_status_print(rdpShadowServer* server, int argc, char** argv, int status); + +FREERDP_API int shadow_server_start(rdpShadowServer* server); +FREERDP_API int shadow_server_stop(rdpShadowServer* server); + +FREERDP_API int shadow_server_init(rdpShadowServer* server); +FREERDP_API int shadow_server_uninit(rdpShadowServer* server); + +FREERDP_API rdpShadowServer* shadow_server_new(); +FREERDP_API void shadow_server_free(rdpShadowServer* server); + +#ifdef __cplusplus +} +#endif + #endif /* FREERDP_SERVER_SHADOW_H */ diff --git a/server/shadow/CMakeLists.txt b/server/shadow/CMakeLists.txt index 9577611..b928a27 100644 --- a/server/shadow/CMakeLists.txt +++ b/server/shadow/CMakeLists.txt @@ -186,9 +186,7 @@ elseif(WITH_SHADOW_MAC) list(APPEND ${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_MAC_LIBS}) endif() -add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) - -set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "freerdp-shadow") +add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) list(APPEND ${MODULE_PREFIX}_LIBS freerdp) list(APPEND ${MODULE_PREFIX}_LIBS freerdp-server) @@ -203,3 +201,21 @@ install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ser set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Server/shadow") +# command-line executable + +set(MODULE_NAME "freerdp-shadow-cli") +set(MODULE_PREFIX "FREERDP_SERVER_SHADOW_CLI") + +set(${MODULE_PREFIX}_SRCS + shadow.c) + +add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) +set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "freerdp-shadow") + +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-shadow) + +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) + +install(TARGETS ${MODULE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT server) + +set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Server/shadow") diff --git a/server/shadow/shadow.c b/server/shadow/shadow.c new file mode 100644 index 0000000..8386024 --- /dev/null +++ b/server/shadow/shadow.c @@ -0,0 +1,86 @@ +/** + * FreeRDP: A Remote Desktop Protocol Implementation + * + * Copyright 2014 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 + +#ifdef _WIN32 +#include +#endif + +#ifdef _WIN32 +static BOOL g_MessagePump = TRUE; +#else +static BOOL g_MessagePump = FALSE; +#endif + +#include + +int main(int argc, char** argv) +{ + MSG msg; + int status; + DWORD dwExitCode; + rdpShadowServer* server; + + server = shadow_server_new(); + + if (!server) + return 0; + + if (shadow_server_init(server) < 0) + return 0; + + status = shadow_server_parse_command_line(server, argc, argv); + + status = shadow_server_command_line_status_print(server, argc, argv, status); + + if (status < 0) + return 0; + + if (shadow_server_start(server) < 0) + return 0; + + if (g_MessagePump) + { + while (GetMessage(&msg, 0, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + WaitForSingleObject(server->thread, INFINITE); + + GetExitCodeThread(server->thread, &dwExitCode); + + shadow_server_free(server); + + return 0; +} + diff --git a/server/shadow/shadow_server.c b/server/shadow/shadow_server.c index 49b4c14..e44808f 100644 --- a/server/shadow/shadow_server.c +++ b/server/shadow/shadow_server.c @@ -27,15 +27,11 @@ #include #include -#include #include +#include #include -#ifdef _WIN32 -#include -#endif - #ifndef _WIN32 #include #include @@ -45,12 +41,6 @@ #define TAG SERVER_TAG("shadow") -#ifdef _WIN32 -static BOOL g_MessagePump = TRUE; -#else -static BOOL g_MessagePump = FALSE; -#endif - #ifdef WITH_SHADOW_X11 extern rdpShadowSubsystem* X11_ShadowCreateSubsystem(rdpShadowServer* server); #endif @@ -648,45 +638,3 @@ void shadow_server_free(rdpShadowServer* server) free(server); } -int main(int argc, char** argv) -{ - MSG msg; - int status; - DWORD dwExitCode; - rdpShadowServer* server; - - server = shadow_server_new(); - - if (!server) - return 0; - - if (shadow_server_init(server) < 0) - return 0; - - status = shadow_server_parse_command_line(server, argc, argv); - - status = shadow_server_command_line_status_print(server, argc, argv, status); - - if (status < 0) - return 0; - - if (shadow_server_start(server) < 0) - return 0; - - if (g_MessagePump) - { - while (GetMessage(&msg, 0, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - - WaitForSingleObject(server->thread, INFINITE); - - GetExitCodeThread(server->thread, &dwExitCode); - - shadow_server_free(server); - - return 0; -} -- 2.7.4