diff --git a/.gitignore b/.gitignore index cfd208f..c4f75b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /Debug /.settings -/.vscode .project .cproject diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..73179f5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 2.8) +project(xfree) +#include_directories(/home/alexander/repositories/iup/include) +include_directories(/root/iup/include) +set(SOURCE_EXE + address.c + arguments.c + concat.c + db.c + gui.c + images.c + monitor.c + node_settings.c + rxrandr_broker.c + rxrandr.c + settings.c + xfreerdp.c + xrdp.c +) +add_executable(xfree ${SOURCE_EXE}) +#target_link_libraries(xfree iup X11 Xrandr m /home/alexander/programming/c/iup/sqlite3.a) +target_link_libraries(xfree + gtk-3 + gdk-3 + pangocairo-1.0 + pango-1.0 + atk-1.0 + cairo-gobject + cairo + gdk_pixbuf-2.0 + gio-2.0 + gobject-2.0 + glib-2.0 + X11 + Xrandr + m + + dl + pthread + + /root/iup/lib/Linux515/libiup.a + /root/SQLite/sqlite3.a +) +#target_link_libraries(xfree iup X11 Xrandr m sqlite3 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lX11 -lXrandr -lm) diff --git a/FreeRDP_X11_path_config/CMakeLists.txt b/FreeRDP_X11_path_config/CMakeLists.txt new file mode 100644 index 0000000..1ab8209 --- /dev/null +++ b/FreeRDP_X11_path_config/CMakeLists.txt @@ -0,0 +1,253 @@ +# FreeRDP: A Remote Desktop Protocol Implementation +# FreeRDP X11 Client +# +# Copyright 2012 Marc-Andre Moreau +# Copyright 2013 Corey Clayton +# +# 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. + +set(MODULE_NAME "xfreerdp-client") +set(MODULE_PREFIX "FREERDP_CLIENT_X11_CONTROL") + +include(FindDocBookXSL) +include_directories(${X11_INCLUDE_DIRS}) +include_directories(${OPENSSL_INCLUDE_DIR}) + +include_directories(iup PRIVATE /root/iup/iup/source/include) + +set(${MODULE_PREFIX}_SRCS + xf_gdi.c + xf_gdi.h + xf_gfx.c + xf_gfx.h + xf_rail.c + xf_rail.h + xf_input.c + xf_input.h + xf_event.c + xf_event.h + xf_floatbar.c + xf_floatbar.h + xf_input.c + xf_input.h + xf_channels.c + xf_channels.h + xf_cliprdr.c + xf_cliprdr.h + xf_monitor.c + xf_monitor.h + xf_disp.c + xf_disp.h + xf_graphics.c + xf_graphics.h + xf_keyboard.c + xf_keyboard.h + xf_video.c + xf_video.h + xf_window.c + xf_window.h + xf_client.c + xf_client.h) + +if (CHANNEL_TSMF_CLIENT) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} + xf_tsmf.c + xf_tsmf.h) +endif() + +if(WITH_CLIENT_INTERFACE) + if(CLIENT_INTERFACE_SHARED) + add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS}) + if (WITH_LIBRARY_VERSIONING) + set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION}) + endif() + else() + add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + endif() + +else() + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} cli/xfreerdp.c cli/images.c xfreerdp.h cli/arguments.c cli/concat.c cli/gui.c cli/node_settings.c cli/rxrandr_broker cli/rxrandr.c cli/settings.c cli/db.c cli/address.c cli/monitor.c cli/xrdp.c) + add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp") + include_directories(..) +endif() + +set(${MODULE_PREFIX}_LIBS + ${X11_LIBRARIES}) + +if(WITH_MANPAGES) + find_program(XSLTPROC_EXECUTABLE NAMES xsltproc) + + if(DOCBOOKXSL_FOUND AND XSLTPROC_EXECUTABLE) + + # We need the variable ${MAN_TODAY} to contain the current date in ISO + # format to replace it in the configure_file step. + include(today) + + TODAY(MAN_TODAY) + + configure_file(xfreerdp.1.xml.in xfreerdp.1.xml @ONLY IMMEDIATE) + + # Compile the helper tool with default compiler settings. + # We need the include paths though. + get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) + set(GENERATE_INCLUDES "") + foreach(dir ${dirs}) + set(GENERATE_INCLUDES ${GENERATE_INCLUDES} -I${dir}) + endforeach(dir) + + add_custom_command(OUTPUT xfreerdp.1 + COMMAND ${CMAKE_C_COMPILER} ${GENERATE_INCLUDES} + ${CMAKE_CURRENT_SOURCE_DIR}/generate_argument_docbook.c + -o ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-channels.1.xml ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-examples.1.xml ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-envvar.1.xml ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${XSLTPROC_EXECUTABLE} ${DOCBOOKXSL_DIR}/manpages/docbook.xsl xfreerdp.1.xml + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/xfreerdp.1.xml + ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-examples.1.xml + ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-channels.1.xml + ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-envvar.1.xml) + + add_custom_target(xfreerdp.manpage ALL + DEPENDS xfreerdp.1) + + install_freerdp_man(${CMAKE_CURRENT_BINARY_DIR}/xfreerdp.1 1) + else() + message(WARNING "WITH_MANPAGES was set, but xsltproc was not found. man-pages will not be installed") + endif() +endif(WITH_MANPAGES) + +set(XSHM_FEATURE_TYPE "REQUIRED") +set(XSHM_FEATURE_PURPOSE "X11 shared memory") +set(XSHM_FEATURE_DESCRIPTION "X11 shared memory extension") + +set(XINERAMA_FEATURE_TYPE "RECOMMENDED") +set(XINERAMA_FEATURE_PURPOSE "multi-monitor") +set(XINERAMA_FEATURE_DESCRIPTION "X11 multi-monitor extension") + +set(XEXT_FEATURE_TYPE "RECOMMENDED") +set(XEXT_FEATURE_PURPOSE "X11 extension") +set(XEXT_FEATURE_DESCRIPTION "X11 core extensions") + +set(XCURSOR_FEATURE_TYPE "RECOMMENDED") +set(XCURSOR_FEATURE_PURPOSE "cursor") +set(XCURSOR_FEATURE_DESCRIPTION "X11 cursor extension") + +set(XV_FEATURE_TYPE "RECOMMENDED") +set(XV_FEATURE_PURPOSE "video") +set(XV_FEATURE_DESCRIPTION "X11 video extension") + +set(XI_FEATURE_TYPE "RECOMMENDED") +set(XI_FEATURE_PURPOSE "input") +set(XI_FEATURE_DESCRIPTION "X11 input extension") + +set(XRENDER_FEATURE_TYPE "RECOMMENDED") +set(XRENDER_FEATURE_PURPOSE "rendering") +set(XRENDER_FEATURE_DESCRIPTION "X11 render extension") + +set(XRANDR_FEATURE_TYPE "RECOMMENDED") +set(XRANDR_FEATURE_PURPOSE "tracking output configuration") +set(XRANDR_FEATURE_DESCRIPTION "X11 randr extension") + +set(XFIXES_FEATURE_TYPE "RECOMMENDED") +set(XFIXES_FEATURE_PURPOSE "X11 xfixes extension") +set(XFIXES_FEATURE_DESCRIPTION "Useful additions to the X11 core protocol") + +find_feature(XShm ${XSHM_FEATURE_TYPE} ${XSHM_FEATURE_PURPOSE} ${XSHM_FEATURE_DESCRIPTION}) +find_feature(Xinerama ${XINERAMA_FEATURE_TYPE} ${XINERAMA_FEATURE_PURPOSE} ${XINERAMA_FEATURE_DESCRIPTION}) +find_feature(Xext ${XEXT_FEATURE_TYPE} ${XEXT_FEATURE_PURPOSE} ${XEXT_FEATURE_DESCRIPTION}) +find_feature(Xcursor ${XCURSOR_FEATURE_TYPE} ${XCURSOR_FEATURE_PURPOSE} ${XCURSOR_FEATURE_DESCRIPTION}) +find_feature(Xv ${XV_FEATURE_TYPE} ${XV_FEATURE_PURPOSE} ${XV_FEATURE_DESCRIPTION}) +find_feature(Xi ${XI_FEATURE_TYPE} ${XI_FEATURE_PURPOSE} ${XI_FEATURE_DESCRIPTION}) +find_feature(Xrender ${XRENDER_FEATURE_TYPE} ${XRENDER_FEATURE_PURPOSE} ${XRENDER_FEATURE_DESCRIPTION}) +find_feature(XRandR ${XRANDR_FEATURE_TYPE} ${XRANDR_FEATURE_PURPOSE} ${XRANDR_FEATURE_DESCRIPTION}) +find_feature(Xfixes ${XFIXES_FEATURE_TYPE} ${XFIXES_FEATURE_PURPOSE} ${XFIXES_FEATURE_DESCRIPTION}) + +if(WITH_XINERAMA) + add_definitions(-DWITH_XINERAMA) + include_directories(${XINERAMA_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XINERAMA_LIBRARIES}) +endif() + +if(WITH_XEXT) + add_definitions(-DWITH_XEXT) + include_directories(${XEXT_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XEXT_LIBRARIES}) +endif() + +if(WITH_XCURSOR) + add_definitions(-DWITH_XCURSOR) + include_directories(${XCURSOR_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XCURSOR_LIBRARIES}) +endif() + +if(WITH_XV) + add_definitions(-DWITH_XV) + include_directories(${XV_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XV_LIBRARIES}) +endif() + +if(WITH_XI) + add_definitions(-DWITH_XI) + include_directories(${XI_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XI_LIBRARIES}) +endif() + +if(WITH_XRENDER) + add_definitions(-DWITH_XRENDER) + include_directories(${XRENDER_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XRENDER_LIBRARIES}) +endif() + +if(WITH_XRANDR) + add_definitions(-DWITH_XRANDR) + include_directories(${XRANDR_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XRANDR_LIBRARIES}) +endif() + +if(WITH_XFIXES) + add_definitions(-DWITH_XFIXES) + include_directories(${XFIXES_INCLUDE_DIRS}) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XFIXES_LIBRARIES}) +endif() + +include_directories(${CMAKE_SOURCE_DIR}/resources) + +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client freerdp m) +if (NOT APPLE) + list(APPEND ${MODULE_PREFIX}_LIBS rt) +endif() +#target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} iup /root/xfreerdp/source/client/X11/sqlite3.a) +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} iup sqlite3) +#target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} iup Xrandr -L/home/alexander/programming/c/FreeRDP/client/X11/cli/sqlite3.a -lsqlite3) + +if(WITH_IPP) + target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${IPP_LIBRARY_LIST}) +endif() + +if(WITH_CLIENT_INTERFACE) + install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) + add_subdirectory(cli) +else() + install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client) +endif() + +set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/X11") + diff --git a/FreeRDP_X11_path_config/README.md b/FreeRDP_X11_path_config/README.md new file mode 100644 index 0000000..ca84a3f --- /dev/null +++ b/FreeRDP_X11_path_config/README.md @@ -0,0 +1,5 @@ +# CMake-файлы для FreeRDP + +Файлы основаны на [FreeRDP 2.8.0](https://github.com/FreeRDP/FreeRDP) + +Необходимо поместить в каталог проекта `./client/X11`. diff --git a/FreeRDP_X11_path_config/cli/.gitignore b/FreeRDP_X11_path_config/cli/.gitignore new file mode 100644 index 0000000..6ddebc6 --- /dev/null +++ b/FreeRDP_X11_path_config/cli/.gitignore @@ -0,0 +1,2 @@ +xfreerdp + diff --git a/FreeRDP_X11_path_config/cli/CMakeLists.txt b/FreeRDP_X11_path_config/cli/CMakeLists.txt new file mode 100644 index 0000000..a2ce9e1 --- /dev/null +++ b/FreeRDP_X11_path_config/cli/CMakeLists.txt @@ -0,0 +1,51 @@ +# FreeRDP: A Remote Desktop Protocol Implementation +# FreeRDP X11 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. + +set(MODULE_NAME "xfreerdp-cli") +set(MODULE_PREFIX "FREERDP_CLIENT_X11") + +set(${MODULE_PREFIX}_SRCS + xfreerdp.c + images.c, + arguments.c, + concat.c, + gui.c, + node_settings.c, + rxrandr_broker.c, + rxrandr.c, + settings.c, + db.c, + address.c, + monitor.c, + xrdp.c + ) + +add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) +set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp" RUNTIME_OUTPUT_DIRECTORY "..") + +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} xfreerdp-client freerdp-client) + +if(OPENBSD) + target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} ossaudio) +else() + target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +endif() + +install(TARGETS ${MODULE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client) + +set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/X11") + diff --git a/README.md b/README.md index 37a1131..6c2f80f 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,11 @@ # GUI для FreeRDP -- Основано на базе [FreeRDP 2.9.0](https://github.com/FreeRDP/FreeRDP) ([локальная версия](http://git.belpig.ru/forks/FreeRDP)) -- Надстройка для FreeRDP на основе библиотеки [`IUP`](https://www.tecgraf.puc-rio.br/iup/). +Надстройка для FreeRDP на основе библиотеки [`IUP`](https://www.tecgraf.puc-rio.br/iup/). + +## Основное окно ![main.png](img/main.png) +## Окно настроек + ![settings.png](img/settings.png) - -## Сборка программы - -- [xrandr.patch](xrandr.patch) - исправления поиска библиотеки `Xrandr` -- [gui.patch](gui.patch) - включение использования GUI в оригинальный проект `freerdp` - -### Подготовка - -Скопировать файлы из [freerdp](freerdp/) в оригинальный проект `(2.9.0)`: - -```sh -cp -r GUI-FreeRDP/freerdp/* freerdp-2.9.0/ -``` - -Перейти в оригинальный каталог: - -```sh -cd freerdp-2.9.0 -``` - -Применить патчи: - -```sh -git apply ../GUI-FreeRDP/gui.patch -git apply ../GUI-FreeRDP/xrandr.patch -``` - -## Сборка - -Параметр `WITH_COLOR_BUTTONS` отвечает за окрашивание кнопок. - -Создать отдельный каталог `build`: - -```sh -mkdir build -cd build -``` - -и выполнить в нём сборку: - -```sh -cmake -B . -S .. \ - -DWITH_WAYLAND=OFF \ - -DWITH_OSS=OFF \ - -DWITH_ALSA=OFF \ - -DWITH_PULSE=OFF \ - -DWITH_CUPS=OFF \ - -DWITH_PCSC=OFF \ - -DWITH_FFMPEG=OFF \ - -DWITH_OPENSSL=ON \ - -DWITH_XV=OFF \ - -DWITH_FUSE=OFF \ - -DWITH_SWSCALE=OFF \ - -DWITH_CAIRO=OFF \ - -DWITH_DSP_FFMPEG=OFF \ - -DWITH_FAAC=OFF \ - -DWITH_SSE2=ON \ - -DWITH_COLOR_BUTTONS=ON \ - -DBUILD_SHARED_LIBS=OFF -``` - -и компиляцию программы: - -```sh -make -j16 -``` diff --git a/freerdp/client/X11/cli/address.c b/address.c similarity index 100% rename from freerdp/client/X11/cli/address.c rename to address.c diff --git a/freerdp/client/X11/cli/address.h b/address.h similarity index 100% rename from freerdp/client/X11/cli/address.h rename to address.h diff --git a/freerdp/client/X11/cli/arguments.c b/arguments.c similarity index 100% rename from freerdp/client/X11/cli/arguments.c rename to arguments.c diff --git a/freerdp/client/X11/cli/arguments.h b/arguments.h similarity index 100% rename from freerdp/client/X11/cli/arguments.h rename to arguments.h diff --git a/freerdp/client/X11/cli/concat.c b/concat.c similarity index 100% rename from freerdp/client/X11/cli/concat.c rename to concat.c diff --git a/freerdp/client/X11/cli/concat.h b/concat.h similarity index 100% rename from freerdp/client/X11/cli/concat.h rename to concat.h diff --git a/freerdp/client/X11/cli/db.c b/db.c similarity index 100% rename from freerdp/client/X11/cli/db.c rename to db.c diff --git a/freerdp/client/X11/cli/db.h b/db.h similarity index 100% rename from freerdp/client/X11/cli/db.h rename to db.h diff --git a/freerdp/client/X11/cli/xrdp.c b/freerdp/client/X11/cli/xrdp.c deleted file mode 100644 index 7e2ef1f..0000000 --- a/freerdp/client/X11/cli/xrdp.c +++ /dev/null @@ -1,71 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#include -#include - -#include "../xf_client.h" -#include "../xfreerdp.h" - -#include -#include -#include -#include - -#include "xrdp.h" - -int free_rdp_connect(int argc, char **argv) -{ - int rc = 1; - int status; - HANDLE thread; - xfContext *xfc; - DWORD dwExitCode; - rdpContext *context; - rdpSettings *settings; - RDP_CLIENT_ENTRY_POINTS clientEntryPoints; - - ZeroMemory(&clientEntryPoints, sizeof(RDP_CLIENT_ENTRY_POINTS)); - clientEntryPoints.Size = sizeof(RDP_CLIENT_ENTRY_POINTS); - clientEntryPoints.Version = RDP_CLIENT_INTERFACE_VERSION; - - RdpClientEntry(&clientEntryPoints); - - context = freerdp_client_context_new(&clientEntryPoints); - if (!context) - return 1; - - settings = context->settings; - xfc = (xfContext*) context; - - status = freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE); - if (status) - { - rc = freerdp_client_settings_command_line_status_print(settings, status, argc, argv); - - if (settings->ListMonitors) - xf_list_monitors(xfc); - - goto out; - } - - if (freerdp_client_start(context) != 0) - goto out; - - thread = freerdp_client_get_thread(context); - - WaitForSingleObject(thread, INFINITE); - GetExitCodeThread(thread, &dwExitCode); - rc = xf_exit_code_from_disconnect_reason(dwExitCode); - - freerdp_client_stop(context); - - out: freerdp_client_context_free(context); - - return rc; -} diff --git a/freerdp/cmake/FindIUP.cmake b/freerdp/cmake/FindIUP.cmake deleted file mode 100644 index aee8af9..0000000 --- a/freerdp/cmake/FindIUP.cmake +++ /dev/null @@ -1,19 +0,0 @@ -find_path(IUP_INCLUDE_DIR NAMES iup.h - PATHS /home/alexander/repositories/iup/include - DOC "The IUP include directory" -) - -find_library(IUP_LIBRARY NAMES iup - PATHS /home/alexander/repositories/iup - DOC "The IUP library" -) - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(IUP DEFAULT_MSG IUP_LIBRARY IUP_INCLUDE_DIR) - -if(IUP_FOUND) - set( IUP_LIBRARIES ${IUP_LIBRARY} ) - set( IUP_INCLUDE_DIRS ${IUP_INCLUDE_DIR} ) -endif() - -mark_as_advanced(IUP_INCLUDE_DIR IUP_LIBRARY) diff --git a/freerdp/cmake/FindSQLite.cmake b/freerdp/cmake/FindSQLite.cmake deleted file mode 100644 index f0907a3..0000000 --- a/freerdp/cmake/FindSQLite.cmake +++ /dev/null @@ -1,19 +0,0 @@ -find_path(SQLITE_INCLUDE_DIR NAMES sqlite3.h - PATHS /usr/include - DOC "The SQLITE include directory" -) - -find_library(SQLITE_LIBRARY NAMES sqlite3 - PATHS /usr/lib64 - DOC "The SQLITE library" -) - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SQLite DEFAULT_MSG SQLITE_LIBRARY SQLITE_INCLUDE_DIR) - -if(SQLITE_FOUND) - set( SQLITE_LIBRARIES ${SQLITE_LIBRARY} ) - set( SQLITE_INCLUDE_DIRS ${SQLITE_INCLUDE_DIR} ) -endif() - -mark_as_advanced(SQLITE_INCLUDE_DIR SQLITE_LIBRARY) diff --git a/freerdp/client/X11/cli/gui.c b/gui.c similarity index 75% rename from freerdp/client/X11/cli/gui.c rename to gui.c index 53afea6..a8612c0 100644 --- a/freerdp/client/X11/cli/gui.c +++ b/gui.c @@ -18,55 +18,21 @@ #include "db.h" #include "xrdp.h" -#include "../xfreerdp.h" +//#include "../xfreerdp.h" static int guiExit(Ihandle *self) { return IUP_CLOSE; } -int isEmptyFieldServerUser(Ihandle *self) -{ - char *name = IupGetAttribute(self, "NAME"); - if (!strcmp(name, "SERVER")) - return !strcmp(IupGetAttribute(IupGetDialogChild(self, "USER"), "LINEVALUE"), "\0"); - else - return !strcmp(IupGetAttribute(IupGetDialogChild(self, "SERVER"), "VALUE"), "\0"); -} - -static int activeBtnConnect(Ihandle *self, int c, char *value) -{ - if (!strcmp(value, "\0") || isEmptyFieldServerUser(self)) - { - IupSetInt(IupGetDialogChild(self, "CONNECT"), "ACTIVE", 0); -#ifdef WITH_COLOR_BUTTONS - IupSetAttribute(IupGetDialogChild(self, "CONNECT"), "BGCOLOR", "49 54 61"); - IupSetAttribute(IupGetDialogChild(self, "CONNECT"), "FGCOLOR", "238 238 238"); -#endif - } - else - { - IupSetInt(IupGetDialogChild(self, "CONNECT"), "ACTIVE", 1); -#ifdef WITH_COLOR_BUTTONS - IupSetAttribute(IupGetDialogChild(self, "CONNECT"), "BGCOLOR", "0 179 0"); - IupSetAttribute(IupGetDialogChild(self, "CONNECT"), "FGCOLOR", "255 255 255"); -#endif - } - return IUP_DEFAULT; -} - static int guiConnect(Ihandle *self) { char *host = IupGetAttribute(IupGetDialogChild(self, "SERVER"), "VALUE"); + char *login = IupGetAttribute(IupGetDialogChild(self, "USER"), "LINEVALUE"); char *result = getHostIP(host); if (!result) - return IUP_IGNORE; - - char *login = IupGetAttribute(IupGetDialogChild(self, "USER"), "LINEVALUE"); - - if (!strcmp(login, "\0")) - return IUP_IGNORE; + return IUP_DEFAULT; setParameterValue(PARAMETER_SERVER, VALUE_SERVER, result); setParameterValue(PARAMETER_USERNAME, VALUE_USERNAME, login); @@ -79,19 +45,16 @@ static int guiConnect(Ihandle *self) printf("%s\n", args.argv[i]); } - enum XF_EXIT_CODE xCode = free_rdp_connect(args.argc, args.argv); - - if (!(xCode == XF_EXIT_DNS_NAME_NOT_FOUND || xCode == XF_EXIT_CONNECT_FAILED || xCode == XF_EXIT_TLS_CONNECT_FAILED)) - { - IupSetAttribute(IupGetDialogChild(self, "PASSWORD"), "VALUE", ""); - +// if (free_rdp_connect(args.argc, args.argv) != XF_EXIT_DNS_NAME_NOT_FOUND) +// { if (!dbAddServer(result, host)) { - dbInsertHistory(login, host); IupSetAttribute(IupGetDialogChild(self, "SERVER"), "APPENDITEM", host); } + + dbInsertHistory(login, host); dbSetUserNameCurrent(login); - } +// } freeArguments(&args); @@ -147,13 +110,11 @@ Ihandle* guiStart() inputServer = IupList(NULL); IupSetAttribute(inputServer, "NAME", "SERVER"); - IupSetAttribute(inputServer, "TIP", "IP-адрес или имя удаленного сервера\n(обязательное для заполнения поле)"); + IupSetAttribute(inputServer, "TIP", "IP-адрес или имя удаленного сервера (обязательно)"); createHostsList(inputServer); IupSetAttribute(inputServer, "SIZE", "100"); IupSetAttribute(inputServer, "EDITBOX", "YES"); IupSetAttribute(inputServer, "DROPDOWN", "YES"); - IupSetAttribute(inputServer, "MASK", "[A-Za-z0-9/./-]*"); - IupSetCallback(inputServer, "EDIT_CB", (Icallback) activeBtnConnect); hBoxServer = IupHbox(labelServer, inputServer, NULL); IupSetAttribute(hBoxServer, "MARGIN", "10x10"); @@ -163,11 +124,9 @@ Ihandle* guiStart() IupSetAttribute(labelUser, "PADDING", "5"); inputUser = IupText(NULL); IupSetAttribute(inputUser, "NAME", "USER"); - IupSetAttribute(inputUser, "TIP", "<домен>\\<имя пользователя>\n<имя пользователя>@<домен>\n(обязательное для заполнения поле)"); + IupSetAttribute(inputUser, "TIP", "<домен>\\<имя пользователя> (обязательно)"); IupSetAttribute(inputUser, "VALUE", getSetValueCurrent(PARAMETER_USERNAME)); IupSetAttribute(inputUser, "SIZE", "100"); - IupSetAttribute(inputUser, "MASK", "(/w|[/./\\/@/-])*"); - IupSetCallback(inputUser, "ACTION", (Icallback) activeBtnConnect); hBoxUser = IupHbox(labelUser, inputUser, NULL); IupSetAttribute(hBoxUser, "MARGIN", "10x0"); @@ -188,27 +147,21 @@ Ihandle* guiStart() IupSetHandle("CONNECT", btnConnect); IupSetAttribute(btnConnect, "NAME", "CONNECT"); IupSetAttribute(btnConnect, "TIP", "Выполнить подключение"); -#ifdef WITH_COLOR_BUTTONS IupSetAttribute(btnConnect, "BGCOLOR", "0 179 0"); IupSetAttribute(btnConnect, "FGCOLOR", "255 255 255"); -#endif btnClose = IupButton("Закрыть", NULL); IupSetHandle("CLOSE", btnClose); IupSetAttribute(btnClose, "NAME", "CLOSE"); IupSetAttribute(btnClose, "TIP", "Закрыть FreeRDP"); -#ifdef WITH_COLOR_BUTTONS IupSetAttribute(btnClose, "BGCOLOR", "204 0 0"); IupSetAttribute(btnClose, "FGCOLOR", "255 255 255"); -#endif btnSettings = IupButton("Настройки", NULL); IupSetAttribute(btnSettings, "NAME", "SETTINGS"); IupSetAttribute(btnSettings, "TIP", "Перейти в настройки"); -#ifdef WITH_COLOR_BUTTONS IupSetAttribute(btnSettings, "BGCOLOR", "0 136 204"); IupSetAttribute(btnSettings, "FGCOLOR", "255 255 255"); -#endif hBoxButtons = IupHbox(IupFill(), btnSettings, btnConnect, btnClose, IupFill(), NULL); IupSetAttribute(hBoxButtons, "ALIGNMENT", "ACENTER:ACENTER"); diff --git a/freerdp/client/X11/cli/gui.h b/gui.h similarity index 100% rename from freerdp/client/X11/cli/gui.h rename to gui.h diff --git a/gui.patch b/gui.patch deleted file mode 100644 index eb66a99..0000000 --- a/gui.patch +++ /dev/null @@ -1,200 +0,0 @@ -diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt -index 869652c..0588402 100644 ---- a/client/X11/CMakeLists.txt -+++ b/client/X11/CMakeLists.txt -@@ -57,6 +57,37 @@ set(${MODULE_PREFIX}_SRCS - xf_client.c - xf_client.h) - -+set(${GUI_IUP}_SRCS -+ cli/xfreerdp.c -+ cli/images.c -+ xfreerdp.h -+ cli/xrdp.h -+ cli/arguments.c -+ cli/concat.c -+ cli/gui.c -+ cli/node_settings.c -+ cli/rxrandr_broker.c -+ cli/rxrandr.c -+ cli/settings.c -+ cli/db.c -+ cli/address.c -+ cli/monitor.c -+ cli/xrdp.c) -+ -+set(IUP_FEATURE_TYPE "REQUIRED") -+set(IUP_FEATURE_PURPOSE "IUP extension") -+set(IUP_FEATURE_DESCRIPTION "Multi-platform toolkit") -+ -+include_directories(${IUP_INCLUDE_DIRS}) -+find_feature(IUP ${IUP_FEATURE_TYPE} ${IUP_FEATURE_PURPOSE} ${IUP_FEATURE_DESCRIPTION}) -+ -+set(SQLITE_FEATURE_TYPE "REQUIRED") -+set(SQLITE_FEATURE_PURPOSE "SQLite extension") -+set(SQLITE_FEATURE_DESCRIPTION "C-language library SQL database engine") -+ -+include_directories(${SQLITE_INCLUDE_DIRS}) -+find_feature(SQLite ${SQLITE_FEATURE_TYPE} ${SQLITE_FEATURE_PURPOSE} ${SQLITE_FEATURE_DESCRIPTION}) -+ - if (CHANNEL_TSMF_CLIENT) - set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} - xf_tsmf.c -@@ -74,7 +105,7 @@ if(WITH_CLIENT_INTERFACE) - endif() - - else() -- set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} cli/xfreerdp.c xfreerdp.h) -+ set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${GUI_IUP}_SRCS}) - add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) - set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp") - include_directories(..) -@@ -226,13 +257,17 @@ if(WITH_XFIXES) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XFIXES_LIBRARIES}) - endif() - -+if(WITH_COLOR_BUTTONS) -+ add_definitions(-DWITH_COLOR_BUTTONS) -+endif() -+ - include_directories(${CMAKE_SOURCE_DIR}/resources) - - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client freerdp m) - if (NOT APPLE) - list(APPEND ${MODULE_PREFIX}_LIBS rt) - endif() --target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS}) -+target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} ${IUP_LIBRARIES} ${SQLITE_LIBRARIES}) - - if(WITH_IPP) - target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${IPP_LIBRARY_LIST}) -diff --git a/client/X11/cli/CMakeLists.txt b/client/X11/cli/CMakeLists.txt -index 5f805c2..1e7d1c4 100644 ---- a/client/X11/cli/CMakeLists.txt -+++ b/client/X11/cli/CMakeLists.txt -@@ -19,7 +19,19 @@ set(MODULE_NAME "xfreerdp-cli") - set(MODULE_PREFIX "FREERDP_CLIENT_X11") - - set(${MODULE_PREFIX}_SRCS -- xfreerdp.c) -+ xfreerdp.c -+ images.c -+ arguments.c -+ concat.c -+ gui.c -+ node_settings.c -+ rxrandr_broker.c -+ rxrandr.c -+ settings.c -+ db.c -+ address.c -+ monitor.c -+ xrdp.c) - - add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) - set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp" RUNTIME_OUTPUT_DIRECTORY "..") -diff --git a/client/X11/cli/xfreerdp.c b/client/X11/cli/xfreerdp.c -index 8db4d39..abdf3ca 100644 ---- a/client/X11/cli/xfreerdp.c -+++ b/client/X11/cli/xfreerdp.c -@@ -1,85 +1,24 @@ --/** -- * FreeRDP: A Remote Desktop Protocol Implementation -- * X11 Client -- * -- * Copyright 2011 Marc-Andre Moreau -- * Copyright 2012 HP Development Company, LLC -- * -- * 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. -- */ -+#include -+#include "gui.h" -+#include "arguments.h" - --#ifdef HAVE_CONFIG_H --#include "config.h" --#endif -+#include - --#include --#include --#include -- --#include --#include -- --#include "../xf_client.h" --#include "../xfreerdp.h" -- --int main(int argc, char* argv[]) -+int main(int argc, char **argv) - { -- int rc = 1; -- int status; -- HANDLE thread; -- xfContext* xfc; -- DWORD dwExitCode; -- rdpContext* context; -- rdpSettings* settings; -- RDP_CLIENT_ENTRY_POINTS clientEntryPoints; -- -- ZeroMemory(&clientEntryPoints, sizeof(RDP_CLIENT_ENTRY_POINTS)); -- clientEntryPoints.Size = sizeof(RDP_CLIENT_ENTRY_POINTS); -- clientEntryPoints.Version = RDP_CLIENT_INTERFACE_VERSION; -- -- RdpClientEntry(&clientEntryPoints); -- -- context = freerdp_client_context_new(&clientEntryPoints); -- if (!context) -- return 1; -- -- settings = context->settings; -- xfc = (xfContext*)context; -- -- status = freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE); -- if (status) -- { -- rc = freerdp_client_settings_command_line_status_print(settings, status, argc, argv); -- -- if (settings->ListMonitors) -- xf_list_monitors(xfc); -- -- goto out; -- } -- -- if (freerdp_client_start(context) != 0) -- goto out; -+ if (argc > 1) -+ settingsLoad(argv[1]); -+ else -+ settingsLoad("/etc/freerdp/freerdp.db"); - -- thread = freerdp_client_get_thread(context); -+ IupOpen(&argc, &argv); - -- WaitForSingleObject(thread, INFINITE); -- GetExitCodeThread(thread, &dwExitCode); -- rc = xf_exit_code_from_disconnect_reason(dwExitCode); -+ IupShowXY(guiStart(), IUP_CENTER, IUP_CENTER); -+ IupMainLoop(); - -- freerdp_client_stop(context); -+ IupClose(); - --out: -- freerdp_client_context_free(context); -+ settingsFree(); - -- return rc; -+ return EXIT_SUCCESS; - } diff --git a/freerdp/client/X11/cli/images.c b/images.c similarity index 100% rename from freerdp/client/X11/cli/images.c rename to images.c diff --git a/freerdp/client/X11/cli/images.h b/images.h similarity index 100% rename from freerdp/client/X11/cli/images.h rename to images.h diff --git a/freerdp/client/X11/cli/monitor.c b/monitor.c similarity index 100% rename from freerdp/client/X11/cli/monitor.c rename to monitor.c diff --git a/freerdp/client/X11/cli/monitor.h b/monitor.h similarity index 100% rename from freerdp/client/X11/cli/monitor.h rename to monitor.h diff --git a/freerdp/client/X11/cli/node_settings.c b/node_settings.c similarity index 100% rename from freerdp/client/X11/cli/node_settings.c rename to node_settings.c diff --git a/freerdp/client/X11/cli/node_settings.h b/node_settings.h similarity index 100% rename from freerdp/client/X11/cli/node_settings.h rename to node_settings.h diff --git a/freerdp/client/X11/cli/parameter.h b/parameter.h similarity index 100% rename from freerdp/client/X11/cli/parameter.h rename to parameter.h diff --git a/parameters.txt b/parameters.txt deleted file mode 100644 index 22b30ec..0000000 --- a/parameters.txt +++ /dev/null @@ -1,201 +0,0 @@ -/flag (enables flag) -/option: (specifies option with value) -+toggle -toggle (enables or disables toggle, where '/' is a synonym of '+') - -/a:[,] Addin -/action-script: Action script -/admin Admin (or console) session -+aero Enable desktop composition -/app: or || Remote application program -/app-cmd: Remote application command-line parameters -/app-file: File to open with remote application -/app-guid: Remote application GUID -/app-icon: Remote application icon for user interface -/app-name: Remote application name for user interface -/app-workdir: Remote application workspace path -/assistance: Remote assistance password -/auto-request-control Automatically request remote assistance input control -+async-channels Enable Asynchronous channels (experimental) -+async-input Enable Asynchronous input -+async-update Enable Asynchronous update -/audio-mode: Audio output mode -+auth-only Enable Authenticate only --authentication Disable Authentication (experimental) -+auto-reconnect Enable Automatic reconnection -/auto-reconnect-max-retries: - Automatic reconnection maximum retries, 0 for unlimited [0,1000] -+bitmap-cache Enable bitmap cache -/bpp: Session bpp (color depth) -/buildconfig Print the build configuration -/cert:[deny,ignore,name:,tofu,fingerprint:: - [,fingerprint::]] - Certificate accept options. Use with care! - * deny ... Automatically abort connection if the certificate does not match, no user interaction. - * ignore ... Ignore the certificate checks altogether (overrules all other options) - * name ... Use the alternate instead of the certificate subject to match locally stored certificates - * tofu ... Accept certificate unconditionally on first connect and deny on subsequent connections if the certificate does not match - * fingerprints ... A list of certificate hashes that are accepted unconditionally for a connection -/cert-deny [deprecated, use /cert:deny] Automatically abort connection for any certificate that can not be validated. -/cert-ignore [deprecated, use /cert:ignore] Ignore certificate -/cert-name: [deprecated, use /cert:name:] Certificate name -/cert-tofu [deprecated, use /cert:tofu] Automatically accept certificate on first connect -/client-build-number: Client Build Number sent to server (influences smartcard behaviour, see [MS-RDPESC]) -/client-hostname: Client Hostname to send to server --clipboard[:[use-selection:]] - Disable Redirect clipboard. - * use-selection: ... (X11) Specify which X selection to access. Default is CLIPBOARD. PRIMARY is the X-style middle-click selection. -/codec-cache:[rfx|nsc|jpeg] Bitmap codec cache --compression Disable compression -/compression-level: Compression level (0,1,2) -+credentials-delegation Enable credentials delegation -/d: Domain --decorations Disable Window decorations -/disp Display control -/drive:, Redirect directory as named share . Hotplug support is enabled with /drive:hotplug,*. This argument provides the same function as "Drives that I plug in later" option in MSTSC. -+drives Enable Redirect all mount points as shares -/dvc:[,] Dynamic virtual channel -/dynamic-resolution Send resolution updates when the window is resized -/echo Echo channel --encryption Disable Encryption (experimental) -/encryption-methods:[40,][56,][128,][FIPS] - RDP standard security encryption methods -/f Fullscreen mode (++ toggles fullscreen) --fast-path Disable fast-path input/output -+fipsmode Enable FIPS mode -/floatbar[:sticky:[on|off],default:[visible|hidden],show: - [always|fullscreen||window]] - floatbar is disabled by default (when enabled defaults to sticky in fullscreen mode) --fonts Disable smooth fonts (ClearType) -/frame-ack: Number of frame acknowledgement -/from-stdin[:force] Read credentials from stdin. With the prompt is done before connection, otherwise on server request. -/g:[:] Gateway Hostname -/gateway-usage-method:[direct|detect] - Gateway usage method -/gd: Gateway domain -/gdi:sw|hw GDI rendering -/geometry Geometry tracking channel -+gestures Enable Consume multitouch input locally -/gfx[:RFX] RDP8 graphics pipeline -+gfx-progressive Enable RDP8 graphics pipeline using progressive codec -+gfx-small-cache Enable RDP8 graphics pipeline using small cache mode -+gfx-thin-client Enable RDP8 graphics pipeline using thin client mode -+glyph-cache Enable Glyph cache (experimental) -/gp: Gateway password --grab-keyboard Disable Grab keyboard -/gt:[rpc|http[,no-websockets]|auto[,no-websockets]] - Gateway transport type -/gu:[[\]|[@]] - Gateway username -/gat: Gateway Access Token -/h: Height --heartbeat Disable Support heartbeat PDUs -/help Print help -+home-drive Enable Redirect user home as share -/ipv6 Prefer IPv6 AAA record over IPv4 A record -/kbd:0x or Keyboard layout -/kbd-lang:0x Keyboard active language identifier -/kbd-fn-key: Function key value -/kbd-list List keyboard layouts -/kbd-lang-list List keyboard languages -/kbd-remap:List of =,... pairs to remap scancodes - Keyboard scancode remapping -/kbd-subtype: Keyboard subtype -/kbd-type: Keyboard type -/load-balance-info: Load balance info -/log-filters::[,:[,...]] - Set logger filters, see wLog(7) for details -/log-level:[OFF|FATAL|ERROR|WARN|INFO|DEBUG|TRACE] - Set the default log level, see wLog(7) for details -/max-fast-path-size: Specify maximum fast-path update size -/max-loop-time: