diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ae1759..8330721 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -277,6 +277,22 @@ if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer") endif() endif() + if (WITH_NO_UNDEFINED) + if (DEFINED CMAKE_REQUIRED_FLAGS) + set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) + endif() + set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined") + CHECK_C_COMPILER_FLAG (-Wl,--no-undefined no-undefined) + if (DEFINED SAVE_CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS}) + unset(SAVE_CMAKE_REQUIRED_FLAGS) + else() + unset(CMAKE_REQUIRED_FLAGS) + endif() + if(no-undefined) + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" ) + endif() + endif() endif() if(MSVC) @@ -757,6 +773,14 @@ endif() include_directories("${CMAKE_SOURCE_DIR}/winpr/include") include_directories("${CMAKE_BINARY_DIR}/winpr/include") +if (${CMAKE_VERSION} VERSION_LESS 2.8.12) + set(PUBLIC_KEYWORD "") + set(PRIVATE_KEYWORD "") +else() + set(PUBLIC_KEYWORD "PUBLIC") + set(PRIVATE_KEYWORD "PRIVATE") +endif() + add_subdirectory(winpr) # Sub-directories @@ -807,14 +831,6 @@ if(WITH_CHANNELS) add_subdirectory(channels) endif() -if (${CMAKE_VERSION} VERSION_LESS 2.8.12) - set(PUBLIC_KEYWORD "") - set(PRIVATE_KEYWORD "") -else() - set(PUBLIC_KEYWORD "PUBLIC") - set(PRIVATE_KEYWORD "PRIVATE") -endif() - if(WITH_CLIENT_COMMON OR WITH_CLIENT) add_subdirectory(client) endif() diff --git a/ChangeLog b/ChangeLog index 4c49252..90a3f29 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,175 @@ +2016-05-02 18:44:40 +0200 Bernhard Miklautz (a7ca42e) + + * Merge pull request #3313 from bmiklautz/typos + +2016-05-02 18:31:43 +0200 Bernhard Miklautz (9d98759) + + * libfreerd/color: fix typo + +2016-05-02 18:09:24 +0200 akallabeth (38beb29) + + * Merge pull request #3311 from bmiklautz/static_rdtk + +2016-05-02 18:08:46 +0200 akallabeth (9591d2e) + + * Merge pull request #3312 from bmiklautz/commtests + +2016-05-02 17:44:25 +0200 Bernhard Miklautz (29adf0c) + + * rdtk: fix windows build + +2016-05-02 16:59:25 +0200 Bernhard Miklautz (81d30cc) + + * Disable comm tests per default + +2016-05-02 16:10:31 +0200 Bernhard Miklautz (1bad57c) + + * Don't export/install rdtk + +2016-04-26 11:01:40 +0200 Bernhard Miklautz (bd7ed27) + + * Merge pull request #3305 from akallabeth/dynamic_channel_crash_fix + +2016-04-26 09:59:40 +0200 akallabeth (a62d962) + + * Merge pull request #3250 from mfleisz/cssp_v3 + +2016-04-26 09:35:54 +0200 Armin Novak (48b11cf) + + * Dynamic channel internal functions now static. + +2016-04-26 09:34:12 +0200 Armin Novak (ee186be) + + * ListDictionary handle NULL list argument. + +2016-04-19 17:57:53 +0200 Hardening (ca2d015) + + * Merge pull request #3296 from akallabeth/clipboard_file_fix + +2016-04-19 16:44:31 +0200 Armin Novak (8917a3d) + + * Fix CB_FILECONTENTS_REQUEST message decoding. + +2016-04-19 15:32:56 +0200 Norbert Federa (8110435) + + * Merge pull request #3294 from bmiklautz/misc_build + +2016-04-19 15:21:49 +0200 Norbert Federa (a4cec9f) + + * Merge pull request #3287 from bmiklautz/linking_fixes2 + +2016-04-19 14:55:26 +0200 Hardening (d4b7301) + + * Merge pull request #3293 from + nfedera/mitigate-cbclientaddress-verification + +2016-04-19 14:33:26 +0200 Bernhard Miklautz (0ebc6f1) + + * build: disable -Wl,--no-undefined per default + +2016-04-19 14:09:58 +0200 Norbert Federa (9f148e6) + + * core: allow TS Gateway protocol violation + +2016-04-19 12:46:54 +0200 Bernhard Miklautz (4a9da95) + + * Tests: Disable TESTS_WTSAPI_EXTRA per default + +2016-04-15 14:48:46 +0200 Bernhard Miklautz (470e147) + + * Merge pull request #3285 from rjcorrig/kb3148851 + +2016-04-15 14:32:40 +0200 Bernhard Miklautz (62cb5fa) + + * build: add missing dependencies + +2016-04-13 13:34:43 -0400 Robert Corrigan (f8c42da) + + * KB3148851: Updates to Russian Time Zones for 2016 + +2016-04-11 20:47:53 +0200 Hardening (11d1138) + + * Merge pull request #3274 from bmiklautz/linking_fixes + +2016-04-11 11:10:08 +0200 Hardening (c9f4485) + + * Merge pull request #3276 from + nfedera/nf-fix-ms-android-protocol-violation + +2016-04-11 10:50:27 +0200 Norbert Federa (4ae77b8) + + * core: allow ms android client protocol violation + +2016-04-08 15:28:40 +0200 akallabeth (45ab979) + + * Merge pull request #3275 from + nfedera/fix-server-establish-keys-typo + +2016-04-08 14:47:35 +0200 Norbert Federa (6ee4453) + + * core: fix broken rdp security (server side) + +2016-04-07 14:39:16 +0200 Bernhard Miklautz (7838072) + + * build: add missing dependencies + +2016-04-07 14:52:52 +0200 Bernhard Miklautz (0e2c4f2) + + * Merge pull request #3273 from + realjiangms/fix_android_crash_rotate_3258 + +2016-04-07 14:35:57 +0200 Bernhard Miklautz (8fe88ac) + + * build: use --no-undefined if available + +2016-04-07 20:19:22 +0800 zihao.jiang (748982c) + + * Fix android rotation crash + +2016-03-31 11:43:38 +0200 Bernhard Miklautz (a0d9969) + + * Merge pull request #3254 from akallabeth/avc444_cmd_arg + +2016-03-31 11:01:45 +0200 Armin Novak (81450dd) + + * Cleaned up empty if. + +2016-03-30 15:20:53 +0200 akallabeth (445059b) + + * Merge pull request #3259 from bmiklautz/overlinking + +2016-03-29 15:10:00 +0200 Bernhard Miklautz (bafe1aa) + + * usbdrc: remove unused dependencies + +2016-03-25 16:28:17 +0100 Bernhard Miklautz (9e8c6c9) + + * First shot on fixing over linking + +2016-03-01 12:45:25 +0100 Bernhard Miklautz (b184f58) + + * winpr/TestFileGetStdHandle: rename variable stdout + +2016-03-24 16:25:22 +0100 Armin Novak (50873be) + + * Added advanced gfx command line options. + +2016-03-21 16:58:09 +0100 Martin Fleisz (5d956eb) + + * core: correctly set last error on credssp errors + +2016-03-21 10:23:18 +0100 Martin Fleisz (34a7c18) + + * core: Propagate credssp error code by setting last error + +2016-03-18 13:45:51 +0100 Martin Fleisz (98528ea) + + * winpr: Fix definition of NTSTATUS_FROM_WIN32 + +2016-03-18 13:32:13 +0100 Martin Fleisz (1c2d315) + + * core: Add support for CredSSP version 3 + 2016-03-17 11:06:39 +0100 akallabeth (75ae3f5) * Merge pull request #3243 from hardening/typofix diff --git a/channels/audin/client/CMakeLists.txt b/channels/audin/client/CMakeLists.txt index 1f593b8..9e2f47b 100644 --- a/channels/audin/client/CMakeLists.txt +++ b/channels/audin/client/CMakeLists.txt @@ -25,7 +25,7 @@ include_directories(..) add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE "DVCPluginEntry") -target_link_libraries(${MODULE_NAME} freerdp) +target_link_libraries(${MODULE_NAME} freerdp winpr) if (WITH_DEBUG_SYMBOLS AND MSVC AND NOT STATIC_CHANNELS AND BUILD_SHARED_LIBS) install(FILES ${CMAKE_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${FREERDP_ADDIN_PATH} COMPONENT symbols) diff --git a/channels/audin/client/alsa/CMakeLists.txt b/channels/audin/client/alsa/CMakeLists.txt index 9a90387..c9f4a5f 100644 --- a/channels/audin/client/alsa/CMakeLists.txt +++ b/channels/audin/client/alsa/CMakeLists.txt @@ -27,6 +27,6 @@ add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_N -set(${MODULE_PREFIX}_LIBS freerdp ${ALSA_LIBRARIES}) +set(${MODULE_PREFIX}_LIBS freerdp winpr ${ALSA_LIBRARIES}) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/audin/client/mac/CMakeLists.txt b/channels/audin/client/mac/CMakeLists.txt index a5371c1..b4c695f 100644 --- a/channels/audin/client/mac/CMakeLists.txt +++ b/channels/audin/client/mac/CMakeLists.txt @@ -17,6 +17,9 @@ # limitations under the License. define_channel_client_subsystem("audin" "mac" "") +FIND_LIBRARY(CORE_AUDIO CoreAudio) +FIND_LIBRARY(AUDIO_TOOL AudioToolbox) +FIND_LIBRARY(APP_SERVICES ApplicationServices) set(${MODULE_PREFIX}_SRCS audin_mac.c) @@ -26,6 +29,6 @@ include_directories(${MAC_INCLUDE_DIRS}) add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} "" TRUE "") -set(${MODULE_PREFIX}_LIBS freerdp ${MAC_LIBRARIES}) +set(${MODULE_PREFIX}_LIBS freerdp ${CORE_AUDIO} ${AUDIO_TOOL} ${APP_SERVICES} winpr) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/audin/client/oss/CMakeLists.txt b/channels/audin/client/oss/CMakeLists.txt index 315e71e..bf51ce0 100644 --- a/channels/audin/client/oss/CMakeLists.txt +++ b/channels/audin/client/oss/CMakeLists.txt @@ -27,7 +27,7 @@ add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_N -set(${MODULE_PREFIX}_LIBS freerdp ${OSS_LIBRARIES}) +set(${MODULE_PREFIX}_LIBS freerdp winpr ${OSS_LIBRARIES}) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/audin/client/pulse/CMakeLists.txt b/channels/audin/client/pulse/CMakeLists.txt index 10000f4..e50f79a 100644 --- a/channels/audin/client/pulse/CMakeLists.txt +++ b/channels/audin/client/pulse/CMakeLists.txt @@ -26,7 +26,6 @@ include_directories(${PULSE_INCLUDE_DIR}) add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} "" TRUE "") - -set(${MODULE_PREFIX}_LIBS freerdp ${PULSE_LIBRARY}) +set(${MODULE_PREFIX}_LIBS freerdp ${PULSE_LIBRARY} winpr) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/cliprdr/client/cliprdr_main.c b/channels/cliprdr/client/cliprdr_main.c index 21fb784..7ca0c94 100644 --- a/channels/cliprdr/client/cliprdr_main.c +++ b/channels/cliprdr/client/cliprdr_main.c @@ -310,9 +310,9 @@ static UINT cliprdr_process_filecontents_request(cliprdrPlugin* cliprdr, wStream return ERROR_INTERNAL_ERROR; } - if (Stream_GetRemainingLength(s) < 28) + if (Stream_GetRemainingLength(s) < 24) { - WLog_ERR(TAG, "not enought remaining data"); + WLog_ERR(TAG, "not enough remaining data"); return ERROR_INVALID_DATA; } @@ -326,7 +326,10 @@ static UINT cliprdr_process_filecontents_request(cliprdrPlugin* cliprdr, wStream Stream_Read_UINT32(s, request.nPositionLow); /* nPositionLow (4 bytes) */ Stream_Read_UINT32(s, request.nPositionHigh); /* nPositionHigh (4 bytes) */ Stream_Read_UINT32(s, request.cbRequested); /* cbRequested (4 bytes) */ - Stream_Read_UINT32(s, request.clipDataId); /* clipDataId (4 bytes) */ + if (Stream_GetRemainingLength(s) >= 4) + Stream_Read_UINT32(s, request.clipDataId); /* clipDataId (4 bytes) */ + else + request.clipDataId = 0; IFCALLRET(context->ServerFileContentsRequest, error, context, &request); @@ -357,7 +360,7 @@ static UINT cliprdr_process_filecontents_response(cliprdrPlugin* cliprdr, wStrea if (Stream_GetRemainingLength(s) < 4) { - WLog_ERR(TAG, "not enought remaining data"); + WLog_ERR(TAG, "not enough remaining data"); return ERROR_INVALID_DATA; } @@ -399,7 +402,7 @@ static UINT cliprdr_process_lock_clipdata(cliprdrPlugin* cliprdr, wStream* s, UI if (Stream_GetRemainingLength(s) < 4) { - WLog_ERR(TAG, "not enought remaining data"); + WLog_ERR(TAG, "not enough remaining data"); return ERROR_INVALID_DATA; } @@ -437,7 +440,7 @@ static UINT cliprdr_process_unlock_clipdata(cliprdrPlugin* cliprdr, wStream* s, if (Stream_GetRemainingLength(s) < 4) { - WLog_ERR(TAG, "not enought remaining data"); + WLog_ERR(TAG, "not enough remaining data"); return ERROR_INVALID_DATA; } diff --git a/channels/cliprdr/server/cliprdr_main.c b/channels/cliprdr/server/cliprdr_main.c index ed98170..3baa905 100644 --- a/channels/cliprdr/server/cliprdr_main.c +++ b/channels/cliprdr/server/cliprdr_main.c @@ -849,7 +849,7 @@ static UINT cliprdr_server_receive_lock_clipdata(CliprdrServerContext* context, if (Stream_GetRemainingLength(s) < 4) { - WLog_ERR(TAG, "not enought data in stream!"); + WLog_ERR(TAG, "not enough data in stream!"); return ERROR_INVALID_DATA; } @@ -884,7 +884,7 @@ static UINT cliprdr_server_receive_unlock_clipdata(CliprdrServerContext* context if (Stream_GetRemainingLength(s) < 4) { - WLog_ERR(TAG, "not enought data in stream!"); + WLog_ERR(TAG, "not enough data in stream!"); return ERROR_INVALID_DATA; } @@ -915,7 +915,7 @@ static UINT cliprdr_server_receive_format_data_request(CliprdrServerContext* con if (Stream_GetRemainingLength(s) < 4) { - WLog_ERR(TAG, "not enought data in stream!"); + WLog_ERR(TAG, "not enough data in stream!"); return ERROR_INVALID_DATA; } @@ -947,7 +947,7 @@ static UINT cliprdr_server_receive_format_data_response(CliprdrServerContext* co if (Stream_GetRemainingLength(s) < header->dataLen) { - WLog_ERR(TAG, "not enought data in stream!"); + WLog_ERR(TAG, "not enough data in stream!"); return ERROR_INVALID_DATA; } @@ -984,7 +984,7 @@ static UINT cliprdr_server_receive_filecontents_request(CliprdrServerContext* co if (Stream_GetRemainingLength(s) < 24) { - WLog_ERR(TAG, "not enought data in stream!"); + WLog_ERR(TAG, "not enough data in stream!"); return ERROR_INVALID_DATA; } @@ -1024,7 +1024,7 @@ static UINT cliprdr_server_receive_filecontents_response(CliprdrServerContext* c if (Stream_GetRemainingLength(s) < 4) { - WLog_ERR(TAG, "not enought data in stream!"); + WLog_ERR(TAG, "not enough data in stream!"); return ERROR_INVALID_DATA; } diff --git a/channels/disp/client/CMakeLists.txt b/channels/disp/client/CMakeLists.txt index 6bed7bf..d0bbaeb 100644 --- a/channels/disp/client/CMakeLists.txt +++ b/channels/disp/client/CMakeLists.txt @@ -27,7 +27,7 @@ add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/drdynvc/client/drdynvc_main.c b/channels/drdynvc/client/drdynvc_main.c index ee052ad..03e71d9 100644 --- a/channels/drdynvc/client/drdynvc_main.c +++ b/channels/drdynvc/client/drdynvc_main.c @@ -31,6 +31,8 @@ #define TAG CHANNELS_TAG("drdynvc.client") static void dvcman_channel_free(void* channel); +static UINT drdynvc_write_data(drdynvcPlugin* drdynvc, UINT32 ChannelId, + const BYTE* data, UINT32 dataSize); /** * Function description @@ -100,7 +102,8 @@ static UINT dvcman_create_listener(IWTSVirtualChannelManager* pChannelMgr, * * @return 0 on success, otherwise a Win32 error code */ -static UINT dvcman_register_plugin(IDRDYNVC_ENTRY_POINTS* pEntryPoints, const char* name, IWTSPlugin* pPlugin) +static UINT dvcman_register_plugin(IDRDYNVC_ENTRY_POINTS* pEntryPoints, + const char* name, IWTSPlugin* pPlugin) { DVCMAN* dvcman = ((DVCMAN_ENTRY_POINTS*) pEntryPoints)->dvcman; @@ -118,7 +121,7 @@ static UINT dvcman_register_plugin(IDRDYNVC_ENTRY_POINTS* pEntryPoints, const ch } } -IWTSPlugin* dvcman_get_plugin(IDRDYNVC_ENTRY_POINTS* pEntryPoints, const char* name) +static IWTSPlugin* dvcman_get_plugin(IDRDYNVC_ENTRY_POINTS* pEntryPoints, const char* name) { int i; DVCMAN* dvcman = ((DVCMAN_ENTRY_POINTS*) pEntryPoints)->dvcman; @@ -135,22 +138,23 @@ IWTSPlugin* dvcman_get_plugin(IDRDYNVC_ENTRY_POINTS* pEntryPoints, const char* n return NULL; } -ADDIN_ARGV* dvcman_get_plugin_data(IDRDYNVC_ENTRY_POINTS* pEntryPoints) +static ADDIN_ARGV* dvcman_get_plugin_data(IDRDYNVC_ENTRY_POINTS* pEntryPoints) { return ((DVCMAN_ENTRY_POINTS*) pEntryPoints)->args; } -void* dvcman_get_rdp_settings(IDRDYNVC_ENTRY_POINTS* pEntryPoints) +static void* dvcman_get_rdp_settings(IDRDYNVC_ENTRY_POINTS* pEntryPoints) { return (void*) ((DVCMAN_ENTRY_POINTS*) pEntryPoints)->settings; } -UINT32 dvcman_get_channel_id(IWTSVirtualChannel * channel) +static UINT32 dvcman_get_channel_id(IWTSVirtualChannel * channel) { return ((DVCMAN_CHANNEL*) channel)->channel_id; } -IWTSVirtualChannel* dvcman_find_channel_by_id(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId) +static IWTSVirtualChannel* dvcman_find_channel_by_id(IWTSVirtualChannelManager* pChannelMgr, + UINT32 ChannelId) { int index; BOOL found = FALSE; @@ -178,7 +182,8 @@ IWTSVirtualChannel* dvcman_find_channel_by_id(IWTSVirtualChannelManager* pChanne return (found) ? ((IWTSVirtualChannel*) channel) : NULL; } -void* dvcman_get_channel_interface_by_name(IWTSVirtualChannelManager* pChannelMgr, const char* ChannelName) +static void* dvcman_get_channel_interface_by_name(IWTSVirtualChannelManager* pChannelMgr, + const char* ChannelName) { int i; BOOL found = FALSE; @@ -201,7 +206,7 @@ void* dvcman_get_channel_interface_by_name(IWTSVirtualChannelManager* pChannelMg return (found) ? pInterface : NULL; } -IWTSVirtualChannelManager* dvcman_new(drdynvcPlugin* plugin) +static IWTSVirtualChannelManager* dvcman_new(drdynvcPlugin* plugin) { DVCMAN* dvcman; @@ -241,7 +246,8 @@ IWTSVirtualChannelManager* dvcman_new(drdynvcPlugin* plugin) * * @return 0 on success, otherwise a Win32 error code */ -static UINT dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV* args, rdpSettings* settings) +static UINT dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV* args, + rdpSettings* settings) { DVCMAN_ENTRY_POINTS entryPoints; PDVC_PLUGIN_ENTRY pDVCPluginEntry = NULL; @@ -267,7 +273,8 @@ static UINT dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV return CHANNEL_RC_OK; } -static DVCMAN_CHANNEL* dvcman_channel_new(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, const char* ChannelName) +static DVCMAN_CHANNEL* dvcman_channel_new(IWTSVirtualChannelManager* pChannelMgr, + UINT32 ChannelId, const char* ChannelName) { DVCMAN_CHANNEL* channel; @@ -306,7 +313,7 @@ static DVCMAN_CHANNEL* dvcman_channel_new(IWTSVirtualChannelManager* pChannelMgr return channel; } -void dvcman_channel_free(void* arg) +static void dvcman_channel_free(void* arg) { DVCMAN_CHANNEL* channel = (DVCMAN_CHANNEL*) arg; @@ -333,7 +340,7 @@ void dvcman_channel_free(void* arg) free(channel); } -void dvcman_free(IWTSVirtualChannelManager* pChannelMgr) +static void dvcman_free(IWTSVirtualChannelManager* pChannelMgr) { int i; IWTSPlugin* pPlugin; @@ -373,7 +380,7 @@ void dvcman_free(IWTSVirtualChannelManager* pChannelMgr) * * @return 0 on success, otherwise a Win32 error code */ -UINT dvcman_init(IWTSVirtualChannelManager* pChannelMgr) +static UINT dvcman_init(IWTSVirtualChannelManager* pChannelMgr) { int i; IWTSPlugin* pPlugin; @@ -400,14 +407,16 @@ UINT dvcman_init(IWTSVirtualChannelManager* pChannelMgr) * * @return 0 on success, otherwise a Win32 error code */ -static UINT dvcman_write_channel(IWTSVirtualChannel* pChannel, ULONG cbSize, BYTE* pBuffer, void* pReserved) +static UINT dvcman_write_channel(IWTSVirtualChannel* pChannel, ULONG cbSize, + const BYTE* pBuffer, void* pReserved) { UINT status; DVCMAN_CHANNEL* channel = (DVCMAN_CHANNEL*) pChannel; EnterCriticalSection(&(channel->lock)); - status = drdynvc_write_data(channel->dvcman->drdynvc, channel->channel_id, pBuffer, cbSize); + status = drdynvc_write_data(channel->dvcman->drdynvc, + channel->channel_id, pBuffer, cbSize); LeaveCriticalSection(&(channel->lock)); @@ -433,7 +442,8 @@ static UINT dvcman_close_channel_iface(IWTSVirtualChannel* pChannel) * * @return 0 on success, otherwise a Win32 error code */ -UINT dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, const char* ChannelName) +UINT dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, + UINT32 ChannelId, const char* ChannelName) { int i; BOOL bAccept; @@ -507,7 +517,8 @@ UINT dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 Channe * * @return 0 on success, otherwise a Win32 error code */ -UINT dvcman_open_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId) +static UINT dvcman_open_channel(IWTSVirtualChannelManager* pChannelMgr, + UINT32 ChannelId) { DVCMAN_CHANNEL* channel; IWTSVirtualChannelCallback* pCallback; @@ -540,7 +551,8 @@ UINT dvcman_open_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelI * * @return 0 on success, otherwise a Win32 error code */ -UINT dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId) +static UINT dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, + UINT32 ChannelId) { DVCMAN_CHANNEL* channel; IWTSVirtualChannel* ichannel; @@ -592,7 +604,8 @@ UINT dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 Channel * * @return 0 on success, otherwise a Win32 error code */ -UINT dvcman_receive_channel_data_first(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, UINT32 length) +static UINT dvcman_receive_channel_data_first(IWTSVirtualChannelManager* pChannelMgr, + UINT32 ChannelId, UINT32 length) { DVCMAN_CHANNEL* channel; @@ -624,7 +637,8 @@ UINT dvcman_receive_channel_data_first(IWTSVirtualChannelManager* pChannelMgr, U * * @return 0 on success, otherwise a Win32 error code */ -UINT dvcman_receive_channel_data(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, wStream* data) +static UINT dvcman_receive_channel_data(IWTSVirtualChannelManager* pChannelMgr, + UINT32 ChannelId, wStream* data) { UINT status = CHANNEL_RC_OK; DVCMAN_CHANNEL* channel; @@ -696,7 +710,7 @@ static UINT drdynvc_write_variable_uint(wStream* s, UINT32 val) * * @return 0 on success, otherwise a Win32 error code */ -UINT drdynvc_send(drdynvcPlugin* drdynvc, wStream* s) +static UINT drdynvc_send(drdynvcPlugin* drdynvc, wStream* s) { UINT status; @@ -725,7 +739,8 @@ UINT drdynvc_send(drdynvcPlugin* drdynvc, wStream* s) * * @return 0 on success, otherwise a Win32 error code */ -UINT drdynvc_write_data(drdynvcPlugin* drdynvc, UINT32 ChannelId, BYTE* data, UINT32 dataSize) +UINT drdynvc_write_data(drdynvcPlugin* drdynvc, UINT32 ChannelId, + const BYTE* data, UINT32 dataSize) { wStream* data_out; unsigned long pos; @@ -863,7 +878,8 @@ static UINT drdynvc_send_capability_response(drdynvcPlugin* drdynvc) * * @return 0 on success, otherwise a Win32 error code */ -static UINT drdynvc_process_capability_request(drdynvcPlugin* drdynvc, int Sp, int cbChId, wStream* s) +static UINT drdynvc_process_capability_request(drdynvcPlugin* drdynvc, int Sp, + int cbChId, wStream* s) { UINT status; @@ -917,7 +933,8 @@ static UINT32 drdynvc_read_variable_uint(wStream* s, int cbLen) * * @return 0 on success, otherwise a Win32 error code */ -static UINT drdynvc_process_create_request(drdynvcPlugin* drdynvc, int Sp, int cbChId, wStream* s) +static UINT drdynvc_process_create_request(drdynvcPlugin* drdynvc, int Sp, + int cbChId, wStream* s) { unsigned long pos; UINT status; @@ -1002,7 +1019,8 @@ static UINT drdynvc_process_create_request(drdynvcPlugin* drdynvc, int Sp, int c * * @return 0 on success, otherwise a Win32 error code */ -static UINT drdynvc_process_data_first(drdynvcPlugin* drdynvc, int Sp, int cbChId, wStream* s) +static UINT drdynvc_process_data_first(drdynvcPlugin* drdynvc, int Sp, + int cbChId, wStream* s) { UINT status; UINT32 Length; @@ -1040,7 +1058,8 @@ static UINT drdynvc_process_data(drdynvcPlugin* drdynvc, int Sp, int cbChId, wSt * * @return 0 on success, otherwise a Win32 error code */ -static UINT drdynvc_process_close_request(drdynvcPlugin* drdynvc, int Sp, int cbChId, wStream* s) +static UINT drdynvc_process_close_request(drdynvcPlugin* drdynvc, int Sp, + int cbChId, wStream* s) { int value; UINT error; @@ -1138,7 +1157,7 @@ static wListDictionary* g_OpenHandles = NULL; * * @return 0 on success, otherwise a Win32 error code */ -UINT drdynvc_add_init_handle_data(void* pInitHandle, void* pUserData) +static UINT drdynvc_add_init_handle_data(void* pInitHandle, void* pUserData) { if (!g_InitHandles) g_InitHandles = ListDictionary_New(TRUE); @@ -1158,14 +1177,14 @@ UINT drdynvc_add_init_handle_data(void* pInitHandle, void* pUserData) return CHANNEL_RC_OK; } -void* drdynvc_get_init_handle_data(void* pInitHandle) +static void* drdynvc_get_init_handle_data(void* pInitHandle) { void* pUserData = NULL; pUserData = ListDictionary_GetItemValue(g_InitHandles, pInitHandle); return pUserData; } -void drdynvc_remove_init_handle_data(void* pInitHandle) +static void drdynvc_remove_init_handle_data(void* pInitHandle) { ListDictionary_Remove(g_InitHandles, pInitHandle); @@ -1181,7 +1200,7 @@ void drdynvc_remove_init_handle_data(void* pInitHandle) * * @return 0 on success, otherwise a Win32 error code */ -UINT drdynvc_add_open_handle_data(DWORD openHandle, void* pUserData) +static UINT drdynvc_add_open_handle_data(DWORD openHandle, void* pUserData) { void* pOpenHandle = (void*) (size_t) openHandle; @@ -1203,7 +1222,7 @@ UINT drdynvc_add_open_handle_data(DWORD openHandle, void* pUserData) return CHANNEL_RC_OK; } -void* drdynvc_get_open_handle_data(DWORD openHandle) +static void* drdynvc_get_open_handle_data(DWORD openHandle) { void* pUserData = NULL; void* pOpenHandle = (void*) (size_t) openHandle; @@ -1211,7 +1230,7 @@ void* drdynvc_get_open_handle_data(DWORD openHandle) return pUserData; } -void drdynvc_remove_open_handle_data(DWORD openHandle) +static void drdynvc_remove_open_handle_data(DWORD openHandle) { void* pOpenHandle = (void*) (size_t) openHandle; @@ -1370,7 +1389,8 @@ static void* drdynvc_virtual_channel_client_thread(void* arg) * * @return 0 on success, otherwise a Win32 error code */ -static UINT drdynvc_virtual_channel_event_connected(drdynvcPlugin* drdynvc, LPVOID pData, UINT32 dataLength) +static UINT drdynvc_virtual_channel_event_connected(drdynvcPlugin* drdynvc, + LPVOID pData, UINT32 dataLength) { UINT32 status; UINT32 index; @@ -1452,7 +1472,8 @@ static UINT drdynvc_virtual_channel_event_disconnected(drdynvcPlugin* drdynvc) { UINT status; - if (MessageQueue_PostQuit(drdynvc->queue, 0) && (WaitForSingleObject(drdynvc->thread, INFINITE) == WAIT_FAILED)) + if (MessageQueue_PostQuit(drdynvc->queue, 0) && + (WaitForSingleObject(drdynvc->thread, INFINITE) == WAIT_FAILED)) { status = GetLastError(); WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", status); @@ -1541,7 +1562,7 @@ static VOID VCAPITYPE drdynvc_virtual_channel_init_event(LPVOID pInitHandle, * Channel Client Interface */ -int drdynvc_get_version(DrdynvcClientContext* context) +static int drdynvc_get_version(DrdynvcClientContext* context) { drdynvcPlugin* drdynvc = (drdynvcPlugin*) context->handle; return drdynvc->version; diff --git a/channels/drdynvc/client/drdynvc_main.h b/channels/drdynvc/client/drdynvc_main.h index be88770..6829745 100644 --- a/channels/drdynvc/client/drdynvc_main.h +++ b/channels/drdynvc/client/drdynvc_main.h @@ -138,6 +138,4 @@ struct drdynvc_plugin IWTSVirtualChannelManager* channel_mgr; }; -UINT drdynvc_write_data(drdynvcPlugin* plugin, UINT32 ChannelId, BYTE* data, UINT32 data_size); - #endif diff --git a/channels/echo/client/CMakeLists.txt b/channels/echo/client/CMakeLists.txt index 7c15794..29e45de 100644 --- a/channels/echo/client/CMakeLists.txt +++ b/channels/echo/client/CMakeLists.txt @@ -25,13 +25,9 @@ include_directories(..) add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE "DVCPluginEntry") - - -target_link_libraries(${MODULE_NAME} freerdp) - - if (WITH_DEBUG_SYMBOLS AND MSVC AND NOT STATIC_CHANNELS AND BUILD_SHARED_LIBS) install(FILES ${CMAKE_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${FREERDP_ADDIN_PATH} COMPONENT symbols) endif() +target_link_libraries(${MODULE_NAME} winpr) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${CHANNEL_NAME}/Client") diff --git a/channels/rdpgfx/client/rdpgfx_main.c b/channels/rdpgfx/client/rdpgfx_main.c index 1ae2882..01e766f 100644 --- a/channels/rdpgfx/client/rdpgfx_main.c +++ b/channels/rdpgfx/client/rdpgfx_main.c @@ -92,19 +92,22 @@ static UINT rdpgfx_send_caps_advertise_pdu(RDPGFX_CHANNEL_CALLBACK* callback) if (gfx->H264) capsSet->flags |= RDPGFX_CAPS_FLAG_AVC420_ENABLED; - capsSet = &capsSets[pdu.capsSetCount++]; - capsSet->version = RDPGFX_CAPVERSION_10; - capsSet->flags = 0; + if (gfx->AVC444) + { + capsSet = &capsSets[pdu.capsSetCount++]; + capsSet->version = RDPGFX_CAPVERSION_10; + capsSet->flags = 0; - if (gfx->SmallCache) - capsSet->flags |= RDPGFX_CAPS_FLAG_SMALL_CACHE; + if (gfx->SmallCache) + capsSet->flags |= RDPGFX_CAPS_FLAG_SMALL_CACHE; - if (!gfx->H264) - capsSet->flags |= RDPGFX_CAPS_FLAG_AVC_DISABLED; + if (!gfx->H264) + capsSet->flags |= RDPGFX_CAPS_FLAG_AVC_DISABLED; + } header.pduLength = RDPGFX_HEADER_SIZE + 2 + (pdu.capsSetCount * RDPGFX_CAPSET_SIZE); - WLog_DBG(TAG, "SendCapsAdvertisePdu"); + WLog_DBG(TAG, "SendCapsAdvertisePdu %d", pdu.capsSetCount); s = Stream_New(NULL, header.pduLength); if (!s) @@ -1573,6 +1576,7 @@ UINT DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints) gfx->Progressive = gfx->settings->GfxProgressive; gfx->ProgressiveV2 = gfx->settings->GfxProgressiveV2; gfx->H264 = gfx->settings->GfxH264; + gfx->AVC444 = gfx->settings->GfxAVC444; if (gfx->H264) gfx->SmallCache = TRUE; @@ -1582,7 +1586,6 @@ UINT DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints) gfx->MaxCacheSlot = (gfx->ThinClient) ? 4096 : 25600; - context = (RdpgfxClientContext*) calloc(1, sizeof(RdpgfxClientContext)); if (!context) diff --git a/channels/rdpgfx/client/rdpgfx_main.h b/channels/rdpgfx/client/rdpgfx_main.h index 62709f6..6291c44 100644 --- a/channels/rdpgfx/client/rdpgfx_main.h +++ b/channels/rdpgfx/client/rdpgfx_main.h @@ -66,6 +66,7 @@ struct _RDPGFX_PLUGIN BOOL Progressive; BOOL ProgressiveV2; BOOL H264; + BOOL AVC444; ZGFX_CONTEXT* zgfx; UINT32 UnacknowledgedFrames; diff --git a/channels/rdpsnd/client/CMakeLists.txt b/channels/rdpsnd/client/CMakeLists.txt index f2fc1aa..fb5dae0 100644 --- a/channels/rdpsnd/client/CMakeLists.txt +++ b/channels/rdpsnd/client/CMakeLists.txt @@ -25,7 +25,7 @@ add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE -target_link_libraries(${MODULE_NAME} winpr freerdp) +target_link_libraries(${MODULE_NAME} winpr freerdp ${CMAKE_THREAD_LIBS_INIT}) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Channels/${CHANNEL_NAME}/Client") diff --git a/channels/rdpsnd/client/mac/CMakeLists.txt b/channels/rdpsnd/client/mac/CMakeLists.txt index 449b345..63c4331 100644 --- a/channels/rdpsnd/client/mac/CMakeLists.txt +++ b/channels/rdpsnd/client/mac/CMakeLists.txt @@ -38,7 +38,7 @@ set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${CORE_AUDIO} ${CORE_FOUNDATION}) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp winpr) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/channels/rdpsnd/client/pulse/CMakeLists.txt b/channels/rdpsnd/client/pulse/CMakeLists.txt index a12d718..6160ec2 100644 --- a/channels/rdpsnd/client/pulse/CMakeLists.txt +++ b/channels/rdpsnd/client/pulse/CMakeLists.txt @@ -29,6 +29,7 @@ add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_N list(APPEND ${MODULE_PREFIX}_LIBS ${PULSE_LIBRARY}) list(APPEND ${MODULE_PREFIX}_LIBS freerdp) +list(APPEND ${MODULE_PREFIX}_LIBS winpr) if(GSM_FOUND) list(APPEND ${MODULE_PREFIX}_LIBS ${GSM_LIBRARIES}) diff --git a/channels/tsmf/client/CMakeLists.txt b/channels/tsmf/client/CMakeLists.txt index 2486602..6916bc5 100644 --- a/channels/tsmf/client/CMakeLists.txt +++ b/channels/tsmf/client/CMakeLists.txt @@ -40,7 +40,7 @@ add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE -target_link_libraries(${MODULE_NAME} freerdp) +target_link_libraries(${MODULE_NAME} freerdp winpr) if (WITH_DEBUG_SYMBOLS AND MSVC AND NOT STATIC_CHANNELS AND BUILD_SHARED_LIBS) install(FILES ${CMAKE_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${FREERDP_ADDIN_PATH} COMPONENT symbols) diff --git a/channels/tsmf/client/alsa/CMakeLists.txt b/channels/tsmf/client/alsa/CMakeLists.txt index f1d5292..a3938ea 100644 --- a/channels/tsmf/client/alsa/CMakeLists.txt +++ b/channels/tsmf/client/alsa/CMakeLists.txt @@ -26,5 +26,4 @@ include_directories(${ALSA_INCLUDE_DIRS}) add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} "" TRUE "") - -target_link_libraries(${MODULE_NAME} freerdp ${ALSA_LIBRARIES}) +target_link_libraries(${MODULE_NAME} ${ALSA_LIBRARIES} winpr freerdp) diff --git a/channels/tsmf/client/gstreamer/CMakeLists.txt b/channels/tsmf/client/gstreamer/CMakeLists.txt index 8557f6e..fff688c 100644 --- a/channels/tsmf/client/gstreamer/CMakeLists.txt +++ b/channels/tsmf/client/gstreamer/CMakeLists.txt @@ -47,6 +47,9 @@ else() set(SRC ${SRC} tsmf_X11.c) set(LIBS ${LIBS} ${X11_LIBRARIES} ${XEXT_LIBRARIES}) + if (NOT APPLE) + list(APPEND LIBS rt) + endif() if(XEXT_FOUND) add_definitions(-DWITH_XEXT=1) @@ -59,7 +62,4 @@ set(${MODULE_PREFIX}_SRCS "${SRC}") include_directories(..) add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} "" TRUE "") - - - -target_link_libraries(${MODULE_NAME} ${LIBS} freerdp) +target_link_libraries(${MODULE_NAME} ${LIBS} winpr) diff --git a/channels/tsmf/client/oss/CMakeLists.txt b/channels/tsmf/client/oss/CMakeLists.txt index 4137f43..8f9e627 100644 --- a/channels/tsmf/client/oss/CMakeLists.txt +++ b/channels/tsmf/client/oss/CMakeLists.txt @@ -24,7 +24,5 @@ include_directories(..) include_directories(${OSS_INCLUDE_DIRS}) add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} "" TRUE "") +target_link_libraries(${MODULE_NAME} winpr) - - -target_link_libraries(${MODULE_NAME} freerdp ${OSS_LIBRARIES}) diff --git a/channels/tsmf/client/pulse/CMakeLists.txt b/channels/tsmf/client/pulse/CMakeLists.txt index ab8a5ac..9f78ca2 100644 --- a/channels/tsmf/client/pulse/CMakeLists.txt +++ b/channels/tsmf/client/pulse/CMakeLists.txt @@ -24,7 +24,4 @@ include_directories(..) include_directories(${PULSE_INCLUDE_DIR}) add_channel_client_subsystem_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} "" TRUE "") - - - -target_link_libraries(${MODULE_NAME} freerdp) +target_link_libraries(${MODULE_NAME} winpr ${PULSE_LIBRARY}) diff --git a/channels/tsmf/client/pulse/tsmf_pulse.c b/channels/tsmf/client/pulse/tsmf_pulse.c index 5a8c90d..e9ea79b 100644 --- a/channels/tsmf/client/pulse/tsmf_pulse.c +++ b/channels/tsmf/client/pulse/tsmf_pulse.c @@ -359,12 +359,10 @@ static void tsmf_pulse_free(ITSMFAudioDevice *audio) } #ifdef STATIC_CHANNELS -#define freerdp_tsmf_client_audio_subsystem_entry pulse_freerdp_tsmf_client_audio_subsystem_entry +ITSMFAudioDevice *pulse_freerdp_tsmf_client_audio_subsystem_entry(void) #else -#define freerdp_tsmf_client_audio_subsystem_entry FREERDP_API freerdp_tsmf_client_audio_subsystem_entry +FREERDP_API ITSMFAudioDevice *freerdp_tsmf_client_audio_subsystem_entry(void) #endif - -ITSMFAudioDevice *freerdp_tsmf_client_audio_subsystem_entry(void) { TSMFPulseAudioDevice *pulse; diff --git a/channels/urbdrc/client/CMakeLists.txt b/channels/urbdrc/client/CMakeLists.txt index 5b2a831..a1d5f5f 100644 --- a/channels/urbdrc/client/CMakeLists.txt +++ b/channels/urbdrc/client/CMakeLists.txt @@ -37,16 +37,14 @@ add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} TRUE #set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} libusb-devman) -set(${MODULE_PREFIX}_LIBS - ${DBUS_GLIB_LIBRARIES} - ${UUID_LIBRARIES}) +set(${MODULE_PREFIX}_LIBS) if (UDEV_FOUND AND UDEV_LIBRARIES) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${UDEV_LIBRARIES}) endif() set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp) -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWOARD} ${${MODULE_PREFIX}_LIBS}) if (WITH_DEBUG_SYMBOLS AND MSVC AND NOT STATIC_CHANNELS AND BUILD_SHARED_LIBS) install(FILES ${CMAKE_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${FREERDP_ADDIN_PATH} COMPONENT symbols) diff --git a/channels/urbdrc/client/libusb/CMakeLists.txt b/channels/urbdrc/client/libusb/CMakeLists.txt index 84a857d..bb42002 100644 --- a/channels/urbdrc/client/libusb/CMakeLists.txt +++ b/channels/urbdrc/client/libusb/CMakeLists.txt @@ -35,8 +35,6 @@ set(${MODULE_PREFIX}_LIBS ${CMAKE_THREAD_LIBS_INIT}) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} - ${DBUS_GLIB_LIBRARIES} - ${UUID_LIBRARIES} ${LIBUSB_1_LIBRARIES}) diff --git a/ci/cmake-preloads/config-linux-all.txt b/ci/cmake-preloads/config-linux-all.txt index 275986f..010e865 100644 --- a/ci/cmake-preloads/config-linux-all.txt +++ b/ci/cmake-preloads/config-linux-all.txt @@ -45,3 +45,4 @@ set (WITH_DEBUG_X11_CLIPRDR OFF CACHE BOOL "enable debug") set (WITH_DEBUG_X11_LOCAL_MOVESIZE OFF CACHE BOOL "enable debug") set (WITH_DEBUG_XV OFF CACHE BOOL "enable debug") set (WITH_SAMPLE ON CACHE BOOL "samples") +set (WITH_NO_UNDEFINED ON CACHE BOOL "don't link with undefined symbols") diff --git a/client/Wayland/CMakeLists.txt b/client/Wayland/CMakeLists.txt index 25c69a2..e95055f 100644 --- a/client/Wayland/CMakeLists.txt +++ b/client/Wayland/CMakeLists.txt @@ -31,7 +31,6 @@ set(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${CMAKE_DL_LIBS}) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client freerdp uwac) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt index f65817f..046078d 100644 --- a/client/X11/CMakeLists.txt +++ b/client/X11/CMakeLists.txt @@ -70,8 +70,7 @@ else() endif() set(${MODULE_PREFIX}_LIBS - ${X11_LIBRARIES} - ${CMAKE_DL_LIBS}) + ${X11_LIBRARIES}) if(WITH_MANPAGES) find_program(XSLTPROC_EXECUTABLE NAMES xsltproc) @@ -203,11 +202,14 @@ endif() include_directories(${CMAKE_SOURCE_DIR}/resources) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp freerdp-client) -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +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}) if(WITH_IPP) - target_link_libraries(${MODULE_NAME} ${IPP_LIBRARY_LIST}) + target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${IPP_LIBRARY_LIST}) endif() if(WITH_CLIENT_INTERFACE) diff --git a/client/X11/cli/CMakeLists.txt b/client/X11/cli/CMakeLists.txt index 5b2bc58..d90ff71 100644 --- a/client/X11/cli/CMakeLists.txt +++ b/client/X11/cli/CMakeLists.txt @@ -26,7 +26,7 @@ set(${MODULE_PREFIX}_SRCS 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) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} xfreerdp-client freerdp-client) if(OPENBSD) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} ossaudio) diff --git a/client/common/CMakeLists.txt b/client/common/CMakeLists.txt index 95c8e98..c9dacbc 100644 --- a/client/common/CMakeLists.txt +++ b/client/common/CMakeLists.txt @@ -61,16 +61,11 @@ endif() add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) include_directories(${OPENSSL_INCLUDE_DIR}) -include_directories(${ZLIB_INCLUDE_DIRS}) - if (WITH_LIBRARY_VERSIONING) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION}) endif() -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} - ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARIES}) - -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr) target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${FREERDP_CHANNELS_CLIENT_LIBS}) if(OPENBSD) diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 93c3c1c..3de0d14 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -119,11 +119,11 @@ static COMMAND_LINE_ARGUMENT_A args[] = { "themes", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueTrue, NULL, -1, NULL, "Themes" }, { "wallpaper", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueTrue, NULL, -1, NULL, "Wallpaper" }, { "gdi", COMMAND_LINE_VALUE_REQUIRED, "", NULL, NULL, -1, NULL, "GDI rendering" }, - { "gfx", COMMAND_LINE_VALUE_OPTIONAL, NULL, NULL, NULL, -1, NULL, "RDP8 graphics pipeline (experimental)" }, + { "gfx", COMMAND_LINE_VALUE_OPTIONAL, "", NULL, NULL, -1, NULL, "RDP8 graphics pipeline (experimental)" }, { "gfx-thin-client", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "RDP8 graphics pipeline thin client mode" }, { "gfx-small-cache", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "RDP8 graphics pipeline small cache mode" }, { "gfx-progressive", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "RDP8 graphics pipeline progressive codec" }, - { "gfx-h264", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "RDP8.1 graphics pipeline H264 codec" }, + { "gfx-h264", COMMAND_LINE_VALUE_OPTIONAL, "", NULL, NULL, -1, NULL, "RDP8.1 graphics pipeline H264 codec" }, { "rfx", COMMAND_LINE_VALUE_FLAG, NULL, NULL, NULL, -1, NULL, "RemoteFX" }, { "rfx-mode", COMMAND_LINE_VALUE_REQUIRED, "", NULL, NULL, -1, NULL, "RemoteFX mode" }, { "frame-ack", COMMAND_LINE_VALUE_REQUIRED, "", NULL, NULL, -1, NULL, "Frame acknowledgement" }, @@ -2000,6 +2000,20 @@ int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings, CommandLineSwitchCase(arg, "gfx") { settings->SupportGraphicsPipeline = TRUE; + if (arg->Value) + { + if (_strnicmp("AVC444", arg->Value, 6) == 0) + { + settings->GfxH264 = TRUE; + settings->GfxAVC444 = TRUE; + } + else if (_strnicmp("AVC420", arg->Value, 6) == 0) + { + settings->GfxH264 = TRUE; + } + else if (_strnicmp("RFX", arg->Value, 3) != 0) + return COMMAND_LINE_ERROR; + } } CommandLineSwitchCase(arg, "gfx-thin-client") { @@ -2019,8 +2033,17 @@ int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings, } CommandLineSwitchCase(arg, "gfx-h264") { - settings->GfxH264 = arg->Value ? TRUE : FALSE; settings->SupportGraphicsPipeline = TRUE; + settings->GfxH264 = TRUE; + if (arg->Value) + { + if (_strnicmp("AVC444", arg->Value, 6) == 0) + { + settings->GfxAVC444 = TRUE; + } + else if (_strnicmp("AVC420", arg->Value, 6) != 0) + return COMMAND_LINE_ERROR; + } } CommandLineSwitchCase(arg, "rfx") { diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake index 19db014..8f18b9c 100644 --- a/cmake/ConfigOptions.cmake +++ b/cmake/ConfigOptions.cmake @@ -56,7 +56,8 @@ endif() option(WITH_SMARTCARD_INSPECT "Enable SmartCard API Inspector" OFF) option(BUILD_TESTING "Build unit tests" OFF) -CMAKE_DEPENDENT_OPTION(TESTS_WTSAPI_EXTRA "Build extra WTSAPI tests (interactive)" OFF "BUILD_TESTING" ON) +CMAKE_DEPENDENT_OPTION(TESTS_WTSAPI_EXTRA "Build extra WTSAPI tests (interactive)" OFF "BUILD_TESTING" OFF) +CMAKE_DEPENDENT_OPTION(BUILD_COMM_TESTS "Build comm related tests (require comm port)" OFF "BUILD_TESTING" OFF) option(WITH_SAMPLE "Build sample code" OFF) diff --git a/include/freerdp/dvc.h b/include/freerdp/dvc.h index 696cb88..0cea12d 100644 --- a/include/freerdp/dvc.h +++ b/include/freerdp/dvc.h @@ -78,7 +78,7 @@ struct _IWTSVirtualChannel /* Starts a write request on the channel. */ UINT (*Write)(IWTSVirtualChannel *pChannel, ULONG cbSize, - BYTE *pBuffer, + const BYTE *pBuffer, void *pReserved); /* Closes the channel. */ UINT (*Close)(IWTSVirtualChannel *pChannel); diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 210e711..d73d5ec 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -768,6 +768,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; #define FreeRDP_GfxProgressive 3842 #define FreeRDP_GfxProgressiveV2 3843 #define FreeRDP_GfxH264 3844 +#define FreeRDP_GfxAVC444 3845 #define FreeRDP_BitmapCacheV3CodecId 3904 #define FreeRDP_DrawNineGridEnabled 3968 #define FreeRDP_DrawNineGridCacheSize 3969 @@ -1314,7 +1315,8 @@ struct rdp_settings ALIGN64 BOOL GfxProgressive; /* 3842 */ ALIGN64 BOOL GfxProgressiveV2; /* 3843 */ ALIGN64 BOOL GfxH264; /* 3844 */ - UINT64 padding3904[3904 - 3845]; /* 3845 */ + ALIGN64 BOOL GfxAVC444; /* 3845 */ + UINT64 padding3904[3904 - 3846]; /* 3846 */ /** * Caches diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt index 95fa781..48400d3 100644 --- a/libfreerdp/CMakeLists.txt +++ b/libfreerdp/CMakeLists.txt @@ -300,7 +300,7 @@ if (WITH_LIBRARY_VERSIONING) endif() -target_link_libraries(${MODULE_NAME} ${LIBFREERDP_LIBS} winpr) +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${LIBFREERDP_LIBS} winpr) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT FreeRDPTargets) if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) install(FILES ${CMAKE_PDB_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) diff --git a/libfreerdp/codec/color.c b/libfreerdp/codec/color.c index 08c5c42..65275de 100644 --- a/libfreerdp/codec/color.c +++ b/libfreerdp/codec/color.c @@ -1555,7 +1555,7 @@ int freerdp_image_copy_from_pointer_data(BYTE* pDstData, UINT32 DstFormat, if (xorBpp == 8 && !palette) { - WLog_ERR(TAG, "null palette in convertion from %d bpp to %d bpp", + WLog_ERR(TAG, "null palette in conversion from %d bpp to %d bpp", xorBpp, dstBitsPerPixel); return -1; } diff --git a/libfreerdp/codec/test/CMakeLists.txt b/libfreerdp/codec/test/CMakeLists.txt index 83574d8..70eecb7 100644 --- a/libfreerdp/codec/test/CMakeLists.txt +++ b/libfreerdp/codec/test/CMakeLists.txt @@ -21,7 +21,7 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} freerdp) +target_link_libraries(${MODULE_NAME} freerdp winpr) set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") diff --git a/libfreerdp/common/CMakeLists.txt b/libfreerdp/common/CMakeLists.txt index 1683f44..14ad05c 100644 --- a/libfreerdp/common/CMakeLists.txt +++ b/libfreerdp/common/CMakeLists.txt @@ -25,10 +25,6 @@ set(${MODULE_PREFIX}_SRCS freerdp_module_add(${${MODULE_PREFIX}_SRCS}) -freerdp_include_directory_add(${ZLIB_INCLUDE_DIRS}) - -freerdp_library_add(${ZLIB_LIBRARIES}) - if(BUILD_TESTING) add_subdirectory(test) endif() diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index bded9d0..271569c 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -1101,6 +1101,9 @@ BOOL freerdp_get_param_bool(rdpSettings* settings, int id) case FreeRDP_GfxH264: return settings->GfxH264; + case FreeRDP_GfxAVC444: + return settings->GfxAVC444; + case FreeRDP_DrawNineGridEnabled: return settings->DrawNineGridEnabled; @@ -1612,6 +1615,10 @@ int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param) settings->GfxH264 = param; break; + case FreeRDP_GfxAVC444: + settings->GfxAVC444 = param; + break; + case FreeRDP_DrawNineGridEnabled: settings->DrawNineGridEnabled = param; break; diff --git a/libfreerdp/core/CMakeLists.txt b/libfreerdp/core/CMakeLists.txt index 03ef096..83982f5 100644 --- a/libfreerdp/core/CMakeLists.txt +++ b/libfreerdp/core/CMakeLists.txt @@ -21,7 +21,6 @@ set(MODULE_PREFIX "FREERDP_CORE") freerdp_definition_add(-DEXT_PATH="${FREERDP_EXTENSION_PATH}") freerdp_include_directory_add(${OPENSSL_INCLUDE_DIR}) -freerdp_include_directory_add(${ZLIB_INCLUDE_DIRS}) set(${MODULE_PREFIX}_GATEWAY_DIR "gateway") @@ -135,8 +134,6 @@ freerdp_module_add(${${MODULE_PREFIX}_SRCS}) if(WIN32) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ws2_32) freerdp_library_add(ws2_32) -else() - freerdp_library_add(${ZLIB_LIBRARIES}) endif() freerdp_library_add(${OPENSSL_LIBRARIES}) diff --git a/libfreerdp/core/connection.c b/libfreerdp/core/connection.c index f3a13f9..f66e181 100644 --- a/libfreerdp/core/connection.c +++ b/libfreerdp/core/connection.c @@ -648,7 +648,7 @@ BOOL rdp_server_establish_keys(rdpRdp* rdp, wStream* s) rdp->rc4_decrypt_key = winpr_RC4_New(rdp->decrypt_key, rdp->rc4_key_len); rdp->rc4_encrypt_key = winpr_RC4_New(rdp->encrypt_key, rdp->rc4_key_len); - if (!rdp->rc4_decrypt_key || rdp->rc4_encrypt_key) + if (!rdp->rc4_decrypt_key || !rdp->rc4_encrypt_key) goto end; ret = TRUE; diff --git a/libfreerdp/core/info.c b/libfreerdp/core/info.c index 57d1894..4f6c703 100644 --- a/libfreerdp/core/info.c +++ b/libfreerdp/core/info.c @@ -210,9 +210,11 @@ BOOL rdp_read_extended_info_packet(rdpRdp* rdp, wStream* s) /* cbClientAddress is the size in bytes of the character data in the clientAddress field. * This size includes the length of the mandatory null terminator. * The maximum allowed value is 80 bytes + * Note: Although according to [MS-RDPBCGR 2.2.1.11.1.1.1] the null terminator + * is mandatory, connections via Microsoft's TS Gateway set cbClientAddress to 0. */ - if ((cbClientAddress % 2) || cbClientAddress < 2 || cbClientAddress > 80) + if ((cbClientAddress % 2) || cbClientAddress > 80) { WLog_ERR(TAG, "protocol error: invalid cbClientAddress value: %u", cbClientAddress); return FALSE; @@ -229,18 +231,22 @@ BOOL rdp_read_extended_info_packet(rdpRdp* rdp, wStream* s) settings->ClientAddress = NULL; } - wstr = (WCHAR*) Stream_Pointer(s); - if (wstr[cbClientAddress / 2 - 1]) + if (cbClientAddress) { - WLog_ERR(TAG, "protocol error: clientAddress must be null terminated"); - return FALSE; + wstr = (WCHAR*) Stream_Pointer(s); + if (wstr[cbClientAddress / 2 - 1]) + { + WLog_ERR(TAG, "protocol error: clientAddress must be null terminated"); + return FALSE; + } + if (ConvertFromUnicode(CP_UTF8, 0, wstr, -1, &settings->ClientAddress, 0, NULL, NULL) < 1) + { + WLog_ERR(TAG, "failed to convert client address"); + return FALSE; + } + Stream_Seek(s, cbClientAddress); + WLog_DBG(TAG, "rdp client address: [%s]", settings->ClientAddress); } - if (ConvertFromUnicode(CP_UTF8, 0, wstr, -1, &settings->ClientAddress, 0, NULL, NULL) < 1) - { - WLog_ERR(TAG, "failed to convert client address"); - return FALSE; - } - Stream_Seek(s, cbClientAddress); if (Stream_GetRemainingLength(s) < 2) return FALSE; @@ -249,10 +255,13 @@ BOOL rdp_read_extended_info_packet(rdpRdp* rdp, wStream* s) /* cbClientDir is the size in bytes of the character data in the clientDir field. * This size includes the length of the mandatory null terminator. - * The maximum allowed value is 512 bytes + * The maximum allowed value is 512 bytes. + * Note: Although according to [MS-RDPBCGR 2.2.1.11.1.1.1] the null terminator + * is mandatory the Microsoft Android client (starting with version 8.1.31.44) + * sets cbClientDir to 0. */ - if ((cbClientDir % 2) || cbClientDir < 2 || cbClientDir > 512) + if ((cbClientDir % 2) || cbClientDir > 512) { WLog_ERR(TAG, "protocol error: invalid cbClientDir value: %u", cbClientDir); return FALSE; @@ -267,18 +276,22 @@ BOOL rdp_read_extended_info_packet(rdpRdp* rdp, wStream* s) settings->ClientDir = NULL; } - wstr = (WCHAR*) Stream_Pointer(s); - if (wstr[cbClientDir / 2 - 1]) + if (cbClientDir) { - WLog_ERR(TAG, "protocol error: clientDir must be null terminated"); - return FALSE; + wstr = (WCHAR*) Stream_Pointer(s); + if (wstr[cbClientDir / 2 - 1]) + { + WLog_ERR(TAG, "protocol error: clientDir must be null terminated"); + return FALSE; + } + if (ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) Stream_Pointer(s), -1, &settings->ClientDir, 0, NULL, NULL) < 1) + { + WLog_ERR(TAG, "failed to convert client directory"); + return FALSE; + } + Stream_Seek(s, cbClientDir); + WLog_DBG(TAG, "rdp client dir: [%s]", settings->ClientDir); } - if (ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) Stream_Pointer(s), -1, &settings->ClientDir, 0, NULL, NULL) < 1) - { - WLog_ERR(TAG, "failed to convert client directory"); - return FALSE; - } - Stream_Seek(s, cbClientDir); if (!rdp_read_client_time_zone(s, settings)) return FALSE; diff --git a/libfreerdp/core/nla.c b/libfreerdp/core/nla.c index 22c0138..457326d 100644 --- a/libfreerdp/core/nla.c +++ b/libfreerdp/core/nla.c @@ -5,6 +5,7 @@ * Copyright 2010-2012 Marc-Andre Moreau * Copyright 2015 Thincast Technologies GmbH * Copyright 2015 DI (FH) Martin Haimberger + * Copyright 2016 Martin Fleisz * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,7 +55,8 @@ * version [0] INTEGER, * negoTokens [1] NegoData OPTIONAL, * authInfo [2] OCTET STRING OPTIONAL, - * pubKeyAuth [3] OCTET STRING OPTIONAL + * pubKeyAuth [3] OCTET STRING OPTIONAL, + * errorCode [4] INTEGER OPTIONAL * } * * NegoData ::= SEQUENCE OF NegoDataItem @@ -548,7 +550,10 @@ int nla_client_authenticate(rdpNla* nla) } if (nla_client_begin(nla) < 1) + { + Stream_Free(s, TRUE); return -1; + } while (nla->state < NLA_STATE_AUTH_INFO) { @@ -566,7 +571,10 @@ int nla_client_authenticate(rdpNla* nla) status = nla_recv_pdu(nla, s); if (status < 0) + { + Stream_Free(s, TRUE); return -1; + } } Stream_Free(s, TRUE); @@ -780,8 +788,28 @@ int nla_server_authenticate(rdpNla* nla) if ((nla->status != SEC_E_OK) && (nla->status != SEC_I_CONTINUE_NEEDED)) { + /* Special handling of these specific error codes as NTSTATUS_FROM_WIN32 + unfortunately does not map directly to the corresponding NTSTATUS values + */ + switch (GetLastError()) + { + case ERROR_PASSWORD_MUST_CHANGE: + nla->errorCode = STATUS_PASSWORD_MUST_CHANGE; + break; + case ERROR_PASSWORD_EXPIRED: + nla->errorCode = STATUS_PASSWORD_EXPIRED; + break; + case ERROR_ACCOUNT_DISABLED: + nla->errorCode = STATUS_ACCOUNT_DISABLED; + break; + default: + nla->errorCode = NTSTATUS_FROM_WIN32(GetLastError()); + break; + } + WLog_ERR(TAG, "AcceptSecurityContext status %s [%08X]", GetSecurityStatusString(nla->status), nla->status); + nla_send(nla); return -1; /* Access Denied */ } @@ -1381,14 +1409,24 @@ BOOL nla_send(rdpNla* nla) wStream* s; int length; int ts_request_length; - int nego_tokens_length; - int pub_key_auth_length; - int auth_info_length; + int nego_tokens_length = 0; + int pub_key_auth_length = 0; + int auth_info_length = 0; + int error_code_context_length = 0; + int error_code_length = 0; - nego_tokens_length = (nla->negoToken.cbBuffer > 0) ? nla_sizeof_nego_tokens(nla->negoToken.cbBuffer) : 0; - pub_key_auth_length = (nla->pubKeyAuth.cbBuffer > 0) ? nla_sizeof_pub_key_auth(nla->pubKeyAuth.cbBuffer) : 0; - auth_info_length = (nla->authInfo.cbBuffer > 0) ? nla_sizeof_auth_info(nla->authInfo.cbBuffer) : 0; - length = nego_tokens_length + pub_key_auth_length + auth_info_length; + if (nla->version < 3 || nla->errorCode == 0) + { + nego_tokens_length = (nla->negoToken.cbBuffer > 0) ? nla_sizeof_nego_tokens(nla->negoToken.cbBuffer) : 0; + pub_key_auth_length = (nla->pubKeyAuth.cbBuffer > 0) ? nla_sizeof_pub_key_auth(nla->pubKeyAuth.cbBuffer) : 0; + auth_info_length = (nla->authInfo.cbBuffer > 0) ? nla_sizeof_auth_info(nla->authInfo.cbBuffer) : 0; + } + else + { + error_code_length = ber_sizeof_integer(nla->errorCode); + error_code_context_length = ber_sizeof_contextual_tag(error_code_length); + } + length = nego_tokens_length + pub_key_auth_length + auth_info_length + error_code_context_length + error_code_length; ts_request_length = nla_sizeof_ts_request(length); s = Stream_New(NULL, ber_sizeof_sequence(ts_request_length)); @@ -1404,7 +1442,7 @@ BOOL nla_send(rdpNla* nla) ber_write_sequence_tag(s, ts_request_length); /* SEQUENCE */ /* [0] version */ ber_write_contextual_tag(s, 0, 3, TRUE); - ber_write_integer(s, 2); /* INTEGER */ + ber_write_integer(s, nla->version); /* INTEGER */ /* [1] negoTokens (NegoData) */ if (nego_tokens_length > 0) @@ -1430,6 +1468,13 @@ BOOL nla_send(rdpNla* nla) length -= ber_write_sequence_octet_string(s, 3, nla->pubKeyAuth.pvBuffer, nla->pubKeyAuth.cbBuffer); } + /* [4] errorCode (INTEGER) */ + if (error_code_length > 0) + { + ber_write_contextual_tag(s, 4, error_code_length, TRUE); + ber_write_integer(s, nla->errorCode); + } + Stream_SealLength(s); transport_write(nla->transport, s); Stream_Free(s, TRUE); @@ -1439,14 +1484,12 @@ BOOL nla_send(rdpNla* nla) int nla_decode_ts_request(rdpNla* nla, wStream* s) { int length; - UINT32 version; /* TSRequest */ if (!ber_read_sequence_tag(s, &length) || !ber_read_contextual_tag(s, 0, &length, TRUE) || - !ber_read_integer(s, &version)) + !ber_read_integer(s, &nla->version)) { - Stream_Free(s, TRUE); return -1; } @@ -1459,15 +1502,12 @@ int nla_decode_ts_request(rdpNla* nla, wStream* s) !ber_read_octet_string_tag(s, &length) || /* OCTET STRING */ ((int) Stream_GetRemainingLength(s)) < length) { - Stream_Free(s, TRUE); return -1; } if (!sspi_SecBufferAlloc(&nla->negoToken, length)) - { - Stream_Free(s, TRUE); return -1; - } + Stream_Read(s, nla->negoToken.pvBuffer, length); nla->negoToken.cbBuffer = length; } @@ -1477,16 +1517,11 @@ int nla_decode_ts_request(rdpNla* nla, wStream* s) { if (!ber_read_octet_string_tag(s, &length) || /* OCTET STRING */ ((int) Stream_GetRemainingLength(s)) < length) - { - Stream_Free(s, TRUE); return -1; - } if (!sspi_SecBufferAlloc(&nla->authInfo, length)) - { - Stream_Free(s, TRUE); return -1; - } + Stream_Read(s, nla->authInfo.pvBuffer, length); nla->authInfo.cbBuffer = length; } @@ -1496,20 +1531,25 @@ int nla_decode_ts_request(rdpNla* nla, wStream* s) { if (!ber_read_octet_string_tag(s, &length) || /* OCTET STRING */ ((int) Stream_GetRemainingLength(s)) < length) - { - Stream_Free(s, TRUE); return -1; - } if (!sspi_SecBufferAlloc(&nla->pubKeyAuth, length)) - { - Stream_Free(s, TRUE); return -1; - } + Stream_Read(s, nla->pubKeyAuth.pvBuffer, length); nla->pubKeyAuth.cbBuffer = length; } + /* [4] errorCode (INTEGER) */ + if (nla->version >= 3) + { + if (ber_read_contextual_tag(s, 4, &length, TRUE) != FALSE) + { + if (!ber_read_integer(s, &nla->errorCode)) + return -1; + } + } + return 1; } @@ -1518,6 +1558,13 @@ int nla_recv_pdu(rdpNla* nla, wStream* s) if (nla_decode_ts_request(nla, s) < 1) return -1; + if (nla->errorCode) + { + WLog_ERR(TAG, "SPNEGO failed with NTSTATUS: %08X", nla->errorCode); + freerdp_set_last_error(nla->instance->context, nla->errorCode); + return -1; + } + if (nla_client_recv(nla) < 1) return -1; @@ -1547,7 +1594,10 @@ int nla_recv(rdpNla* nla) } if (nla_decode_ts_request(nla, s) < 1) + { + Stream_Free(s, TRUE); return -1; + } Stream_Free(s, TRUE); return 1; @@ -1667,6 +1717,7 @@ rdpNla* nla_new(freerdp* instance, rdpTransport* transport, rdpSettings* setting nla->transport = transport; nla->sendSeqNum = 0; nla->recvSeqNum = 0; + nla->version = 3; ZeroMemory(&nla->negoToken, sizeof(SecBuffer)); ZeroMemory(&nla->pubKeyAuth, sizeof(SecBuffer)); diff --git a/libfreerdp/core/nla.h b/libfreerdp/core/nla.h index b1afeba..7489fc7 100644 --- a/libfreerdp/core/nla.h +++ b/libfreerdp/core/nla.h @@ -58,6 +58,8 @@ struct rdp_nla rdpSettings* settings; rdpTransport* transport; UINT32 cbMaxToken; + UINT32 version; + UINT32 errorCode; ULONG fContextReq; ULONG pfContextAttr; BOOL haveContext; diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index 28ed134..2494777 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -464,6 +464,7 @@ rdpSettings* freerdp_settings_new(DWORD flags) settings->GfxProgressive = FALSE; settings->GfxProgressiveV2 = FALSE; settings->GfxH264 = FALSE; + settings->GfxAVC444 = FALSE; settings->ClientAutoReconnectCookie = (ARC_CS_PRIVATE_PACKET*) calloc(1, sizeof(ARC_CS_PRIVATE_PACKET)); if (!settings->ClientAutoReconnectCookie) diff --git a/libfreerdp/core/test/CMakeLists.txt b/libfreerdp/core/test/CMakeLists.txt index 989346c..01ea85d 100644 --- a/libfreerdp/core/test/CMakeLists.txt +++ b/libfreerdp/core/test/CMakeLists.txt @@ -25,7 +25,7 @@ add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) add_definitions(-DTESTING_OUTPUT_DIRECTORY="${CMAKE_BINARY_DIR}") add_definitions(-DTESTING_SRC_DIRECTORY="${CMAKE_SOURCE_DIR}") -target_link_libraries(${MODULE_NAME} freerdp-client freerdp winpr) +target_link_libraries(${MODULE_NAME} freerdp winpr freerdp-client) set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") diff --git a/libfreerdp/crypto/CMakeLists.txt b/libfreerdp/crypto/CMakeLists.txt index 37d422f..c56126f 100644 --- a/libfreerdp/crypto/CMakeLists.txt +++ b/libfreerdp/crypto/CMakeLists.txt @@ -29,7 +29,6 @@ freerdp_module_add( tls.c) freerdp_include_directory_add(${OPENSSL_INCLUDE_DIR}) -freerdp_include_directory_add(${ZLIB_INCLUDE_DIRS}) freerdp_library_add(${OPENSSL_LIBRARIES}) @@ -40,8 +39,6 @@ endif() if(WIN32) freerdp_library_add(ws2_32) -else() - freerdp_library_add(${ZLIB_LIBRARIES}) endif() if(BUILD_TESTING) diff --git a/libfreerdp/crypto/ber.c b/libfreerdp/crypto/ber.c index 9e54232..86b965f 100644 --- a/libfreerdp/crypto/ber.c +++ b/libfreerdp/crypto/ber.c @@ -451,6 +451,14 @@ int ber_write_integer(wStream* s, UINT32 value) Stream_Write_UINT32_BE(s, value); return 6; } + else + { + /* treat as signed integer i.e. NT/HRESULT error codes */ + ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE); + ber_write_length(s, 4); + Stream_Write_UINT32_BE(s, value); + return 6; + } return 0; } @@ -473,6 +481,11 @@ int ber_sizeof_integer(UINT32 value) { return 6; } + else + { + /* treat as signed integer i.e. NT/HRESULT error codes */ + return 6; + } return 0; } diff --git a/libfreerdp/crypto/test/CMakeLists.txt b/libfreerdp/crypto/test/CMakeLists.txt index acaf43e..80b9119 100644 --- a/libfreerdp/crypto/test/CMakeLists.txt +++ b/libfreerdp/crypto/test/CMakeLists.txt @@ -16,7 +16,7 @@ include_directories(${OPENSSL_INCLUDE_DIR}) add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} freerdp) +target_link_libraries(${MODULE_NAME} freerdp winpr) set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") diff --git a/libfreerdp/utils/CMakeLists.txt b/libfreerdp/utils/CMakeLists.txt index 3c4aff0..2efd0e8 100644 --- a/libfreerdp/utils/CMakeLists.txt +++ b/libfreerdp/utils/CMakeLists.txt @@ -32,7 +32,7 @@ endif() freerdp_module_add(${${MODULE_PREFIX}_SRCS}) -freerdp_library_add(${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) +freerdp_library_add(${CMAKE_THREAD_LIBS_INIT}) if(WIN32) freerdp_library_add(ws2_32) diff --git a/libfreerdp/utils/test/CMakeLists.txt b/libfreerdp/utils/test/CMakeLists.txt index a08ee11..5fbcf4d 100644 --- a/libfreerdp/utils/test/CMakeLists.txt +++ b/libfreerdp/utils/test/CMakeLists.txt @@ -13,7 +13,7 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} winpr freerdp) +target_link_libraries(${MODULE_NAME} freerdp) set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") diff --git a/rdtk/CMakeLists.txt b/rdtk/CMakeLists.txt index f7485dd..9028678 100644 --- a/rdtk/CMakeLists.txt +++ b/rdtk/CMakeLists.txt @@ -40,14 +40,6 @@ include(CheckCCompilerFlag) include(GNUInstallDirsWrapper) include(CMakePackageConfigHelpers) -# Soname versioning -set(RDTK_VERSION_MAJOR "2") -set(RDTK_VERSION_MINOR "0") -set(RDTK_VERSION_REVISION "0") -set(RDTK_API_VERSION "${RDTK_VERSION_MAJOR}") -set(RDTK_VERSION "${RDTK_VERSION_MAJOR}.${RDTK_VERSION_MINOR}.${RDTK_VERSION_REVISION}") -set(RDTK_VERSION_FULL "${RDTK_VERSION}") - # Default to release build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") @@ -63,7 +55,6 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DRDTK_EXPORTS") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) -add_subdirectory(include) add_subdirectory(librdtk) if(WITH_SAMPLE) @@ -71,26 +62,3 @@ if(WITH_SAMPLE) add_subdirectory(sample) endif() endif() - -# Exporting -set(RDTK_INCLUDE_DIR "include/rdtk${RDTK_VERSION_MAJOR}") -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rdtk.pc.in ${CMAKE_CURRENT_BINARY_DIR}/rdtk${RDTK_VERSION_MAJOR}.pc @ONLY) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rdtk${RDTK_VERSION_MAJOR}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - -if(${CMAKE_VERSION} VERSION_GREATER "2.8.10") - export(PACKAGE rdtk) - - set(RDTK_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/RdTk${RDTK_VERSION_MAJOR}") - - configure_package_config_file(RdTkConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/RdTkConfig.cmake - INSTALL_DESTINATION ${RDTK_CMAKE_INSTALL_DIR} PATH_VARS RDTK_INCLUDE_DIR) - - write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/RdTkConfigVersion.cmake - VERSION ${RDTK_VERSION} COMPATIBILITY SameMajorVersion) - - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/RdTkConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/RdTkConfigVersion.cmake - DESTINATION ${RDTK_CMAKE_INSTALL_DIR}) - - install(EXPORT RdTkTargets DESTINATION ${RDTK_CMAKE_INSTALL_DIR}) -endif() - diff --git a/rdtk/RdTkConfig.cmake.in b/rdtk/RdTkConfig.cmake.in deleted file mode 100644 index d3e9653..0000000 --- a/rdtk/RdTkConfig.cmake.in +++ /dev/null @@ -1,11 +0,0 @@ - -@PACKAGE_INIT@ - -set(RdTk_VERSION_MAJOR "@RDTK_VERSION_MAJOR@") -set(RdTk_VERSION_MINOR "@RDTK_VERSION_MINOR@") -set(RdTk_VERSION_REVISION "@RDTK_VERSION_REVISION@") - -set_and_check(RdTk_INCLUDE_DIR "@PACKAGE_RDTK_INCLUDE_DIR@") - -include("${CMAKE_CURRENT_LIST_DIR}/RdTkTargets.cmake") - diff --git a/rdtk/include/CMakeLists.txt b/rdtk/include/CMakeLists.txt deleted file mode 100644 index a363933..0000000 --- a/rdtk/include/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -# RdTk: Remote Desktop Toolkit -# rdtk cmake build script -# -# 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. - -file(GLOB RDTK_HEADERS "rdtk/*.h") -install(FILES ${RDTK_HEADERS} DESTINATION include/rdtk${RDTK_VERSION_MAJOR}/rdtk COMPONENT headers) - diff --git a/rdtk/include/rdtk/api.h b/rdtk/include/rdtk/api.h index 89b26ed..ef8b013 100644 --- a/rdtk/include/rdtk/api.h +++ b/rdtk/include/rdtk/api.h @@ -21,6 +21,8 @@ #include +/* Don't do any export */ +#if 0 #if defined _WIN32 || defined __CYGWIN__ #ifdef RDTK_EXPORTS #ifdef __GNUC__ @@ -42,5 +44,7 @@ #define RDTK_EXPORT #endif #endif +#endif +#define RDTK_EXPORT #endif /* RDTK_API_H */ diff --git a/rdtk/librdtk/CMakeLists.txt b/rdtk/librdtk/CMakeLists.txt index b6caf80..000e6d2 100644 --- a/rdtk/librdtk/CMakeLists.txt +++ b/rdtk/librdtk/CMakeLists.txt @@ -17,7 +17,6 @@ set(MODULE_NAME "rdtk") set(MODULE_PREFIX "RDTK") -include_directories(${OPENSSL_INCLUDE_DIR}) set(${MODULE_PREFIX}_SRCS rdtk_resources.c @@ -37,40 +36,19 @@ set(${MODULE_PREFIX}_SRCS rdtk_engine.c rdtk_engine.h) -# On windows create dll version information. -# Vendor, product and year are already set in top level CMakeLists.txt -if (WIN32) - set (RC_VERSION_MAJOR ${RDTK_VERSION_MAJOR}) - set (RC_VERSION_MINOR ${RDTK_VERSION_MINOR}) - set (RC_VERSION_BUILD ${RDTK_VERSION_REVISION}) - set (RC_VERSION_FILE "${CMAKE_SHARED_LIBRARY_PREFIX}${MODULE_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" ) - - configure_file( - ${CMAKE_SOURCE_DIR}/cmake/WindowsDLLVersion.rc.in - ${CMAKE_CURRENT_BINARY_DIR}/version.rc - @ONLY) - - set ( ${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc) -endif() - -add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) +add_library(${MODULE_NAME} STATIC ${${MODULE_PREFIX}_SRCS}) list(APPEND ${MODULE_PREFIX}_LIBS winpr) list(APPEND ${MODULE_PREFIX}_LIBS freerdp) -if (WITH_LIBRARY_VERSIONING) - set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${RDTK_VERSION} SOVERSION ${RDTK_API_VERSION}) -endif() - -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) - -install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT RdTkTargets) -if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) - install(FILES ${CMAKE_PDB_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) -endif() +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS}) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "RdTk") if(BUILD_TESTING) add_subdirectory(test) endif() + +if (NOT BUILD_SHARED_LIBS) + install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT FreeRDP-ShadowTargets) +endif() diff --git a/rdtk/rdtk.pc.in b/rdtk/rdtk.pc.in deleted file mode 100644 index 323916e..0000000 --- a/rdtk/rdtk.pc.in +++ /dev/null @@ -1,15 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=@CMAKE_INSTALL_PREFIX@ -libdir=@CMAKE_INSTALL_FULL_LIBDIR@ -includedir=${prefix}/@RDTK_INCLUDE_DIR@ -libs=-lrdtk - -Name: Remote Desktop Tool Kit -Description: FreeRDP RDTK: A toolkit implementation for RDP -URL: http://www.freerdp.com/ -Version: @RDTK_VERSION_FULL@ -Requires: -Requires.private: @WINPR_PKG_CONFIG_FILENAME@ freerdp@FREERDP_VERSION_MAJOR@ -Libs: -L${libdir} ${libs} -Libs.private: -ldl -lpthread -Cflags: -I${includedir} diff --git a/rdtk/sample/CMakeLists.txt b/rdtk/sample/CMakeLists.txt index 3e7a1c5..3a7f4ff 100644 --- a/rdtk/sample/CMakeLists.txt +++ b/rdtk/sample/CMakeLists.txt @@ -29,7 +29,7 @@ set(${MODULE_PREFIX}_LIBS rdtk) list(APPEND ${MODULE_PREFIX}_LIBS ${X11_LIBRARIES}) -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} winpr) set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "RdTk") diff --git a/server/shadow/CMakeLists.txt b/server/shadow/CMakeLists.txt index 3eb741d..73427d8 100644 --- a/server/shadow/CMakeLists.txt +++ b/server/shadow/CMakeLists.txt @@ -77,7 +77,7 @@ list(APPEND ${MODULE_PREFIX}_LIBS winpr) list(APPEND ${MODULE_PREFIX}_LIBS winpr-makecert-tool) list(APPEND ${MODULE_PREFIX}_LIBS rdtk) -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS}) if (WITH_LIBRARY_VERSIONING) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION}) @@ -174,10 +174,10 @@ if(WITH_SHADOW_X11) find_feature(XShm ${XSHM_FEATURE_TYPE} ${XSHM_FEATURE_PURPOSE} ${XSHM_FEATURE_DESCRIPTION}) find_feature(XTest ${XTEST_FEATURE_TYPE} ${XTEST_FEATURE_PURPOSE} ${XTEST_FEATURE_DESCRIPTION}) find_feature(Xfixes ${XFIXES_FEATURE_TYPE} ${XFIXES_FEATURE_PURPOSE} ${XFIXES_FEATURE_DESCRIPTION}) - find_feature(XRandR ${XRANDR_FEATURE_TYPE} ${XRANDR_FEATURE_PURPOSE} ${XRANDR_FEATURE_DESCRIPTION}) find_feature(Xdamage ${XDAMAGE_FEATURE_TYPE} ${XDAMAGE_FEATURE_PURPOSE} ${XDAMAGE_FEATURE_DESCRIPTION}) - find_feature(Xcursor ${XCURSOR_FEATURE_TYPE} ${XCURSOR_FEATURE_PURPOSE} ${XCURSOR_FEATURE_DESCRIPTION}) find_feature(Xinerama ${XINERAMA_FEATURE_TYPE} ${XINERAMA_FEATURE_PURPOSE} ${XINERAMA_FEATURE_DESCRIPTION}) + find_feature(XRandR ${XRANDR_FEATURE_TYPE} ${XRANDR_FEATURE_PURPOSE} ${XRANDR_FEATURE_DESCRIPTION}) + find_feature(Xcursor ${XCURSOR_FEATURE_TYPE} ${XCURSOR_FEATURE_PURPOSE} ${XCURSOR_FEATURE_DESCRIPTION}) if(WITH_X11) add_definitions(-DWITH_X11) @@ -203,12 +203,6 @@ if(WITH_SHADOW_X11) list(APPEND ${MODULE_PREFIX}_X11_LIBS ${XINERAMA_LIBRARIES}) endif() - if(WITH_XCURSOR) - add_definitions(-DWITH_XCURSOR) - include_directories(${XCURSOR_INCLUDE_DIRS}) - list(APPEND ${MODULE_PREFIX}_X11_LIBS ${XCURSOR_LIBRARIES}) - endif() - if(WITH_XDAMAGE) add_definitions(-DWITH_XDAMAGE) include_directories(${XDAMAGE_INCLUDE_DIRS}) @@ -227,18 +221,25 @@ if(WITH_SHADOW_X11) list(APPEND ${MODULE_PREFIX}_X11_LIBS ${XTEST_LIBRARIES}) endif() - if(WITH_XRANDR) - add_definitions(-DWITH_XRANDR) - include_directories(${XRANDR_INCLUDE_DIRS}) - list(APPEND ${MODULE_PREFIX}_X11_LIBS ${XRANDR_LIBRARIES}) - endif() + # XCursor and XRandr are currently not used so don't link them + #if(WITH_XCURSOR) + # add_definitions(-DWITH_XCURSOR) + # include_directories(${XCURSOR_INCLUDE_DIRS}) + # list(APPEND ${MODULE_PREFIX}_X11_LIBS ${XCURSOR_LIBRARIES}) + #endif() + + #if(WITH_XRANDR) + # add_definitions(-DWITH_XRANDR) + # include_directories(${XRANDR_INCLUDE_DIRS}) + # list(APPEND ${MODULE_PREFIX}_X11_LIBS ${XRANDR_LIBRARIES}) + #endif() elseif(WITH_SHADOW_MAC) find_library(IOKIT IOKit) find_library(IOSURFACE IOSurface) find_library(CARBON Carbon) list(APPEND ${MODULE_PREFIX}_MAC_LIBS ${IOKIT} ${IOSURFACE} ${CARBON}) elseif(WITH_SHADOW_WIN) - list(APPEND ${MODULE_PREFIX}_WIN_LIBS freerdp-client) + list(APPEND ${MODULE_PREFIX}_WIN_LIBS freerdp-client freerdp) endif() set(${MODULE_PREFIX}_WIN_SRCS @@ -277,9 +278,9 @@ list(APPEND ${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_AUTH_LIBS}) add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-shadow) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-shadow freerdp winpr) -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS}) if (WITH_LIBRARY_VERSIONING) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION}) @@ -320,9 +321,9 @@ endif() add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-shadow-subsystem) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-shadow-subsystem freerdp-shadow winpr) -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS}) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT server) if (WITH_DEBUG_SYMBOLS AND MSVC) diff --git a/uwac/libuwac/CMakeLists.txt b/uwac/libuwac/CMakeLists.txt index 4de9325..d409707 100644 --- a/uwac/libuwac/CMakeLists.txt +++ b/uwac/libuwac/CMakeLists.txt @@ -68,7 +68,7 @@ if (WITH_LIBRARY_VERSIONING) set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${UWAC_VERSION} SOVERSION ${UWAC_API_VERSION}) endif() -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} ${WAYLAND_LIBS} ${XKBCOMMON_LIBS} freerdp) +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} ${PRIVATE_KEYWORD} ${WAYLAND_LIBS} ${XKBCOMMON_LIBS} freerdp) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT uwac) diff --git a/winpr/include/winpr/nt.h b/winpr/include/winpr/nt.h index 68bccc6..5449934 100644 --- a/winpr/include/winpr/nt.h +++ b/winpr/include/winpr/nt.h @@ -1270,6 +1270,14 @@ /* Defined in winternl.h, always define since we do not include this header */ +/* defined in ntstatus.h */ +#if !defined(NTSTATUS_FROM_WIN32) && !defined(INLINE_NTSTATUS_FROM_WIN32) +static INLINE NTSTATUS NTSTATUS_FROM_WIN32(long x) +{ + return x <= 0 ? (NTSTATUS)x : (NTSTATUS) (((x) & 0x0000FFFF) | (0x7 << 16) | 0xC0000000); +} +#endif + #ifdef _WIN32 /** diff --git a/winpr/libwinpr/CMakeLists.txt b/winpr/libwinpr/CMakeLists.txt index 7c65ad3..91db017 100644 --- a/winpr/libwinpr/CMakeLists.txt +++ b/winpr/libwinpr/CMakeLists.txt @@ -123,7 +123,11 @@ if (WITH_LIBRARY_VERSIONING) endif() add_definitions(${WINPR_DEFINITIONS}) -target_link_libraries(${MODULE_NAME} ${WINPR_LIBS}) +if (WIN32) +target_link_libraries(${MODULE_NAME} ${PUBLIC_KEYWORD} ${WINPR_LIBS}) +else() +target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${WINPR_LIBS}) +endif(WIN32) install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT WinPRTargets) if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) install(FILES ${CMAKE_PDB_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) diff --git a/winpr/libwinpr/asn1/test/CMakeLists.txt b/winpr/libwinpr/asn1/test/CMakeLists.txt index 22b8eb5..a392cbe 100644 --- a/winpr/libwinpr/asn1/test/CMakeLists.txt +++ b/winpr/libwinpr/asn1/test/CMakeLists.txt @@ -24,8 +24,6 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} winpr) - set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") foreach(test ${${MODULE_PREFIX}_TESTS}) diff --git a/winpr/libwinpr/bcrypt/CMakeLists.txt b/winpr/libwinpr/bcrypt/CMakeLists.txt index 24c2206..265a69d 100644 --- a/winpr/libwinpr/bcrypt/CMakeLists.txt +++ b/winpr/libwinpr/bcrypt/CMakeLists.txt @@ -17,8 +17,4 @@ winpr_module_add(bcrypt.c) -winpr_include_directory_add( - ${OPENSSL_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIRS}) - -winpr_library_add(${ZLIB_LIBRARIES}) +winpr_include_directory_add(${OPENSSL_INCLUDE_DIR}) diff --git a/winpr/libwinpr/com/test/CMakeLists.txt b/winpr/libwinpr/com/test/CMakeLists.txt index ac6c1c0..73c30a2 100644 --- a/winpr/libwinpr/com/test/CMakeLists.txt +++ b/winpr/libwinpr/com/test/CMakeLists.txt @@ -12,7 +12,6 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} winpr) set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") foreach(test ${${MODULE_PREFIX}_TESTS}) diff --git a/winpr/libwinpr/comm/CMakeLists.txt b/winpr/libwinpr/comm/CMakeLists.txt index 0fe9f56..cc73741 100644 --- a/winpr/libwinpr/comm/CMakeLists.txt +++ b/winpr/libwinpr/comm/CMakeLists.txt @@ -34,7 +34,7 @@ if(UNIX AND NOT WIN32 AND NOT APPLE) winpr_module_add(${${MODULE_PREFIX}_SRCS}) - if(BUILD_TESTING) + if(BUILD_TESTING AND BUILD_COMM_TESTS) add_subdirectory(test) - endif() + endif() endif() diff --git a/winpr/libwinpr/file/test/TestFileGetStdHandle.c b/winpr/libwinpr/file/test/TestFileGetStdHandle.c index 225434f..e9da561 100644 --- a/winpr/libwinpr/file/test/TestFileGetStdHandle.c +++ b/winpr/libwinpr/file/test/TestFileGetStdHandle.c @@ -26,23 +26,23 @@ int TestFileGetStdHandle(int argc, char* argv[]) { - HANDLE stdout; + HANDLE so; char *buf = "happy happy"; DWORD bytesWritten; - stdout = GetStdHandle(STD_OUTPUT_HANDLE); - if (stdout == INVALID_HANDLE_VALUE) + so = GetStdHandle(STD_OUTPUT_HANDLE); + if (so == INVALID_HANDLE_VALUE) { fprintf(stderr, "GetStdHandle failed ;(\n"); return -1; } - WriteFile(stdout, buf, strlen(buf), &bytesWritten, FALSE); + WriteFile(so, buf, strlen(buf), &bytesWritten, FALSE); if (bytesWritten != strlen(buf)) { fprintf(stderr, "write failed\n"); return -1; } - CloseHandle(stdout); + CloseHandle(so); return 0; } diff --git a/winpr/libwinpr/locale/test/CMakeLists.txt b/winpr/libwinpr/locale/test/CMakeLists.txt index 47b94f5..15cc112 100644 --- a/winpr/libwinpr/locale/test/CMakeLists.txt +++ b/winpr/libwinpr/locale/test/CMakeLists.txt @@ -13,8 +13,6 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} winpr) - set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") foreach(test ${${MODULE_PREFIX}_TESTS}) diff --git a/winpr/libwinpr/memory/test/CMakeLists.txt b/winpr/libwinpr/memory/test/CMakeLists.txt index 861ef6c..d4fad51 100644 --- a/winpr/libwinpr/memory/test/CMakeLists.txt +++ b/winpr/libwinpr/memory/test/CMakeLists.txt @@ -13,8 +13,6 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} winpr) - set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") foreach(test ${${MODULE_PREFIX}_TESTS}) diff --git a/winpr/libwinpr/rpc/CMakeLists.txt b/winpr/libwinpr/rpc/CMakeLists.txt index a9c7c9a..6e1b2ac 100644 --- a/winpr/libwinpr/rpc/CMakeLists.txt +++ b/winpr/libwinpr/rpc/CMakeLists.txt @@ -38,13 +38,10 @@ winpr_module_add( ndr_union.h midl.c) -winpr_include_directory_add(${OPENSSL_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIRS}) +winpr_include_directory_add(${OPENSSL_INCLUDE_DIR}) winpr_library_add(${OPENSSL_LIBRARIES}) if(WIN32) winpr_library_add(ws2_32 rpcrt4) -else() - winpr_library_add(${ZLIB_LIBRARIES}) endif() diff --git a/winpr/libwinpr/security/test/CMakeLists.txt b/winpr/libwinpr/security/test/CMakeLists.txt index d9aacb1..80be394 100644 --- a/winpr/libwinpr/security/test/CMakeLists.txt +++ b/winpr/libwinpr/security/test/CMakeLists.txt @@ -13,8 +13,6 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -target_link_libraries(${MODULE_NAME} winpr) - set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") foreach(test ${${MODULE_PREFIX}_TESTS}) diff --git a/winpr/libwinpr/sspi/test/CMakeLists.txt b/winpr/libwinpr/sspi/test/CMakeLists.txt index fcb4274..5e0f15d 100644 --- a/winpr/libwinpr/sspi/test/CMakeLists.txt +++ b/winpr/libwinpr/sspi/test/CMakeLists.txt @@ -21,8 +21,6 @@ include_directories(${OPENSSL_INCLUDE_DIR}) add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -set(${MODULE_PREFIX}_LIBS ${OPENSSL_LIBRARIES}) - if(WIN32) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} secur32 crypt32) endif() diff --git a/winpr/libwinpr/timezone/timezone.c b/winpr/libwinpr/timezone/timezone.c index f534033..5f6aa6e 100644 --- a/winpr/libwinpr/timezone/timezone.c +++ b/winpr/libwinpr/timezone/timezone.c @@ -32,7 +32,6 @@ #include #include - struct _TIME_ZONE_RULE_ENTRY { UINT64 TicksStart; @@ -481,6 +480,17 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_59[] = }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_61[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 1, 5, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 3155378292000000000ULL, 636188436000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_62[] = { { 632716020000000000ULL, 180000000000ULL, 60, { 0, 9, 2, 4, 2, 0 }, { 0, 3, 0, 1, 2, 0 }, }, { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 9, 6, 3, 23, 59 }, { 0, 3, 4, 3, 23, 59 }, }, @@ -502,23 +512,23 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_61[] = { 3155378292000000000ULL, 638396820000000000ULL, 60, { 0, 9, 5, 3, 23, 59 }, { 0, 3, 3, 3, 23, 59 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_63[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_64[] = { { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 5, 0 }, { 0, 3, 0, 5, 4, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_65[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_66[] = { { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 1, 2, 1, 0, 0 }, { 0, 10, 0, 5, 2, 0 }, }, { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 0, 5, 2, 0 }, { 0, 1, 4, 1, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_67[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_68[] = { { 634609044000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_70[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_71[] = { { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, @@ -527,18 +537,18 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_70[] = { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_71[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_72[] = { { 633662964000000000ULL, 633347604000000000ULL, 60, { 0, 10, 5, 5, 23, 59 }, { 0, 5, 6, 5, 23, 59 }, }, { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 10, 6, 5, 23, 59 }, { 0, 4, 2, 2, 23, 59 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_76[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_77[] = { { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 12, 4, 5, 23, 59 }, { 0, 6, 5, 3, 23, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_77[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_78[] = { { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, @@ -547,13 +557,15 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_77[] = { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_80[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_79[] = { { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, { 634925268000000000ULL, 634609908000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, { 635240628000000000ULL, 634926132000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, - { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, } + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 1, 5, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 3155378292000000000ULL, 636188436000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, } }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_82[] = @@ -566,6 +578,15 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_82[] = }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_84[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_86[] = { { 633031380000000000ULL, 632716884000000000ULL, 60, { 0, 1, 0, 1, 0, 0 }, { 0, 12, 0, 1, 2, 0 }, }, { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 5, 3, 0 }, { 0, 10, 0, 5, 2, 0 }, }, @@ -573,12 +594,23 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_84[] = { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 3, 0, 5, 3, 0 }, { 0, 1, 4, 1, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_86[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_88[] = { { 3155378292000000000ULL, 635556852000000000ULL, 60, { 0, 9, 5, 5, 23, 59 }, { 0, 3, 6, 5, 2, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_90[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_89[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 1, 5, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 3155378292000000000ULL, 636188436000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_93[] = { { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, @@ -587,25 +619,25 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_90[] = { 635555988000000000ULL, 635241492000000000ULL, 60, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_91[] = -{ - { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 5, 3, 0 }, { 0, 10, 0, 5, 2, 0 }, }, - { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } -}; - static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_94[] = { { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 5, 3, 0 }, { 0, 10, 0, 5, 2, 0 }, }, { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_96[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_97[] = +{ + { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 5, 3, 0 }, { 0, 10, 0, 5, 2, 0 }, }, + { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_99[] = { { 633346740000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 5, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_97[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_100[] = { { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, @@ -614,7 +646,7 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_97[] = { 635555988000000000ULL, 635241492000000000ULL, 120, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_98[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_101[] = { { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, @@ -624,13 +656,24 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_98[] = }; static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_102[] = +{ + { 634293684000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634609044000000000ULL, 634294548000000000ULL, 60, { 0, 1, 6, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 634925268000000000ULL, 634609908000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635240628000000000ULL, 634926132000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, + { 635555988000000000ULL, 635241492000000000ULL, 120, { 0, 10, 0, 5, 2, 0 }, { 0, 1, 3, 1, 0, 0 }, }, + { 636187572000000000ULL, 635872212000000000ULL, 60, { 0, 1, 5, 1, 0, 0 }, { 0, 3, 0, 5, 2, 0 }, }, + { 3155378292000000000ULL, 636188436000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, } +}; + +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_106[] = { { 633031380000000000ULL, 180000000000ULL, 60, { 0, 3, 0, 3, 3, 0 }, { 0, 10, 0, 1, 2, 0 }, }, { 633346740000000000ULL, 633032244000000000ULL, 60, { 0, 3, 0, 3, 3, 0 }, { 0, 9, 0, 5, 2, 0 }, }, { 3155378292000000000ULL, 633347604000000000ULL, 60, { 0, 4, 0, 1, 3, 0 }, { 0, 9, 0, 5, 2, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_104[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_108[] = { { 633978324000000000ULL, 633663828000000000ULL, 60, { 0, 1, 4, 1, 0, 0 }, { 0, 11, 0, 5, 2, 0 }, }, { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 3, 0, 5, 3, 0 }, { 0, 10, 0, 4, 2, 0 }, }, @@ -641,12 +684,12 @@ static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_104[] = { 3155378292000000000ULL, 635556852000000000ULL, 60, { 0, 1, 0, 3, 3, 0 }, { 0, 11, 0, 1, 2, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_105[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_109[] = { { 3155378292000000000ULL, 180000000000ULL, 60, { 0, 10, 0, 5, 3, 0 }, { 0, 3, 0, 5, 2, 0 }, } }; -static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_107[] = +static const TIME_ZONE_RULE_ENTRY TimeZoneRuleTable_111[] = { { 633978324000000000ULL, 180000000000ULL, 0, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, }, { 634293684000000000ULL, 633979188000000000ULL, 60, { 0, 1, 5, 1, 0, 0 }, { 0, 9, 6, 5, 23, 59 }, }, @@ -927,7 +970,7 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_53, 19 }, { - "Kaliningrad Standard Time", -120, TRUE, "(UTC+02:00) Kaliningrad (RTZ 1)", + "Kaliningrad Standard Time", -120, TRUE, "(UTC+02:00) Kaliningrad", "Russia TZ 1 Standard Time", "Russia TZ 1 Daylight Time", (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_54, 5 }, @@ -952,7 +995,7 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_58, 2 }, { - "Russian Standard Time", -180, TRUE, "(UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2)", + "Russian Standard Time", -180, TRUE, "(UTC+03:00) Moscow, St. Petersburg, Volgograd", "Russia TZ 2 Standard Time", "Russia TZ 2 Daylight Time", (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_59, 5 }, @@ -961,10 +1004,15 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = "E. Africa Standard Time", "E. Africa Daylight Time", NULL, 0 }, + { + "Astrakhan Standard Time", -180, TRUE, "(UTC+04:00) Astrakhan, Ulyanovsk", + "Astrakhan Standard Time", "Astrakhan Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_61, 7 + }, { "Iran Standard Time", -210, TRUE, "(UTC+03:30) Tehran", "Iran Standard Time", "Iran Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_61, 18 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_62, 18 }, { "Arabian Standard Time", -240, FALSE, "(UTC+04:00) Abu Dhabi, Muscat", @@ -974,17 +1022,17 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "Azerbaijan Standard Time", -240, TRUE, "(UTC+04:00) Baku", "Azerbaijan Standard Time", "Azerbaijan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_63, 1 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_64, 1 }, { - "Russia Time Zone 3", -240, FALSE, "(UTC+04:00) Izhevsk, Samara (RTZ 3)", + "Russia Time Zone 3", -240, FALSE, "(UTC+04:00) Izhevsk, Samara", "Russia TZ 3 Standard Time", "Russia TZ 3 Daylight Time", NULL, 0 }, { "Mauritius Standard Time", -240, TRUE, "(UTC+04:00) Port Louis", "Mauritius Standard Time", "Mauritius Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_65, 2 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_66, 2 }, { "Georgian Standard Time", -240, FALSE, "(UTC+04:00) Tbilisi", @@ -994,7 +1042,7 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "Caucasus Standard Time", -240, TRUE, "(UTC+04:00) Yerevan", "Caucasus Standard Time", "Caucasus Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_67, 1 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_68, 1 }, { "Afghanistan Standard Time", -270, FALSE, "(UTC+04:30) Kabul", @@ -1007,14 +1055,14 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = NULL, 0 }, { - "Ekaterinburg Standard Time", -300, TRUE, "(UTC+05:00) Ekaterinburg (RTZ 4)", + "Ekaterinburg Standard Time", -300, TRUE, "(UTC+05:00) Ekaterinburg", "Russia TZ 4 Standard Time", "Russia TZ 4 Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_70, 5 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_71, 5 }, { "Pakistan Standard Time", -300, TRUE, "(UTC+05:00) Islamabad, Karachi", "Pakistan Standard Time", "Pakistan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_71, 2 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_72, 2 }, { "India Standard Time", -330, FALSE, "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi", @@ -1039,12 +1087,17 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "Bangladesh Standard Time", -360, TRUE, "(UTC+06:00) Dhaka", "Bangladesh Standard Time", "Bangladesh Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_76, 1 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_77, 1 }, { - "N. Central Asia Standard Time", -360, TRUE, "(UTC+06:00) Novosibirsk (RTZ 5)", + "N. Central Asia Standard Time", -360, TRUE, "(UTC+06:00) Novosibirsk", "Russia TZ 5 Standard Time", "Russia TZ 5 Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_77, 5 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_78, 5 + }, + { + "Altai Standard Time", -360, TRUE, "(UTC+07:00) Barnaul, Gorno-Altaysk", + "Altai Standard Time", "Altai Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_79, 7 }, { "Myanmar Standard Time", -390, FALSE, "(UTC+06:30) Yangon (Rangoon)", @@ -1057,9 +1110,9 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = NULL, 0 }, { - "North Asia Standard Time", -420, TRUE, "(UTC+07:00) Krasnoyarsk (RTZ 6)", + "North Asia Standard Time", -420, TRUE, "(UTC+07:00) Krasnoyarsk", "Russia TZ 6 Standard Time", "Russia TZ 6 Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_80, 5 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_82, 5 }, { "China Standard Time", -480, FALSE, "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", @@ -1067,9 +1120,9 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = NULL, 0 }, { - "North Asia East Standard Time", -480, TRUE, "(UTC+08:00) Irkutsk (RTZ 7)", + "North Asia East Standard Time", -480, TRUE, "(UTC+08:00) Irkutsk", "Russia TZ 7 Standard Time", "Russia TZ 7 Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_82, 5 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_84, 5 }, { "Singapore Standard Time", -480, FALSE, "(UTC+08:00) Kuala Lumpur, Singapore", @@ -1079,7 +1132,7 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "W. Australia Standard Time", -480, TRUE, "(UTC+08:00) Perth", "W. Australia Standard Time", "W. Australia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_84, 4 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_86, 4 }, { "Taipei Standard Time", -480, FALSE, "(UTC+08:00) Taipei", @@ -1089,7 +1142,12 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "Ulaanbaatar Standard Time", -480, TRUE, "(UTC+08:00) Ulaanbaatar", "Ulaanbaatar Standard Time", "Ulaanbaatar Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_86, 1 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_88, 1 + }, + { + "Transbaikal Standard Time", -480, TRUE, "(UTC+09:00) Chita", + "Transbaikal Standard Time", "Transbaikal Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_89, 7 }, { "North Korea Standard Time", -510, FALSE, "(UTC+08:30) Pyongyang", @@ -1107,14 +1165,14 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = NULL, 0 }, { - "Yakutsk Standard Time", -540, TRUE, "(UTC+09:00) Yakutsk (RTZ 8)", + "Yakutsk Standard Time", -540, TRUE, "(UTC+09:00) Yakutsk", "Russia TZ 8 Standard Time", "Russia TZ 8 Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_90, 5 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_93, 5 }, { "Cen. Australia Standard Time", -570, TRUE, "(UTC+09:30) Adelaide", "Cen. Australia Standard Time", "Cen. Australia Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_91, 2 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_94, 2 }, { "AUS Central Standard Time", -570, FALSE, "(UTC+09:30) Darwin", @@ -1129,7 +1187,7 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "AUS Eastern Standard Time", -600, TRUE, "(UTC+10:00) Canberra, Melbourne, Sydney", "AUS Eastern Standard Time", "AUS Eastern Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_94, 2 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_97, 2 }, { "West Pacific Standard Time", -600, FALSE, "(UTC+10:00) Guam, Port Moresby", @@ -1139,20 +1197,25 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "Tasmania Standard Time", -600, TRUE, "(UTC+10:00) Hobart", "Tasmania Standard Time", "Tasmania Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_96, 2 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_99, 2 }, { "Magadan Standard Time", -600, TRUE, "(UTC+10:00) Magadan", "Magadan Standard Time", "Magadan Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_97, 5 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_100, 5 }, { - "Vladivostok Standard Time", -600, TRUE, "(UTC+10:00) Vladivostok, Magadan (RTZ 9)", + "Vladivostok Standard Time", -600, TRUE, "(UTC+10:00) Vladivostok", "Russia TZ 9 Standard Time", "Russia TZ 9 Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_98, 5 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_101, 5 }, { - "Russia Time Zone 10", -660, FALSE, "(UTC+11:00) Chokurdakh (RTZ 10)", + "Sakhalin Standard Time", -600, TRUE, "(UTC+11:00) Sakhalin", + "Sakhalin Standard Time", "Sakhalin Daylight Time", + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_102, 7 + }, + { + "Russia Time Zone 10", -660, FALSE, "(UTC+11:00) Chokurdakh", "Russia TZ 10 Standard Time", "Russia TZ 10 Daylight Time", NULL, 0 }, @@ -1162,14 +1225,14 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = NULL, 0 }, { - "Russia Time Zone 11", -720, FALSE, "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky (RTZ 11)", + "Russia Time Zone 11", -720, FALSE, "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky", "Russia TZ 11 Standard Time", "Russia TZ 11 Daylight Time", NULL, 0 }, { "New Zealand Standard Time", -720, TRUE, "(UTC+12:00) Auckland, Wellington", "New Zealand Standard Time", "New Zealand Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_102, 3 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_106, 3 }, { "UTC+12", -720, FALSE, "(UTC+12:00) Coordinated Universal Time+12", @@ -1179,12 +1242,12 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "Fiji Standard Time", -720, TRUE, "(UTC+12:00) Fiji", "Fiji Standard Time", "Fiji Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_104, 7 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_108, 7 }, { "Kamchatka Standard Time", -720, TRUE, "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", "Kamchatka Standard Time", "Kamchatka Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_105, 1 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_109, 1 }, { "Tonga Standard Time", -780, FALSE, "(UTC+13:00) Nuku'alofa", @@ -1194,7 +1257,7 @@ static const TIME_ZONE_ENTRY TimeZoneTable[] = { "Samoa Standard Time", -780, TRUE, "(UTC+13:00) Samoa", "Samoa Standard Time", "Samoa Daylight Time", - (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_107, 4 + (TIME_ZONE_RULE_ENTRY*) &TimeZoneRuleTable_111, 4 }, { "Line Islands Standard Time", -840, FALSE, "(UTC+14:00) Kiritimati Island", @@ -1319,7 +1382,6 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "Eastern Standard Time", "America/Nassau" }, { "Eastern Standard Time", "America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville" }, { "Eastern Standard Time", "America/New_York" }, - { "Eastern Standard Time", "America/Port-au-Prince" }, { "Eastern Standard Time", "America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay" }, { "Eastern Standard Time", "EST5EDT" }, { "Egypt Standard Time", "Africa/Cairo" }, @@ -1400,7 +1462,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "New Zealand Standard Time", "Pacific/Auckland" }, { "Newfoundland Standard Time", "America/St_Johns" }, { "North Asia East Standard Time", "Asia/Irkutsk" }, - { "North Asia Standard Time", "Asia/Krasnoyarsk Asia/Novokuznetsk" }, + { "North Asia Standard Time", "Asia/Krasnoyarsk Asia/Barnaul Asia/Novokuznetsk" }, { "North Asia Standard Time", "Asia/Krasnoyarsk" }, { "North Korea Standard Time", "Asia/Pyongyang" }, { "Pacific SA Standard Time", "America/Santiago" }, @@ -1415,9 +1477,11 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "Romance Standard Time", "Europe/Copenhagen" }, { "Romance Standard Time", "Europe/Madrid Africa/Ceuta" }, { "Romance Standard Time", "Europe/Paris" }, + { "Russia Time Zone 10", "Asia/Srednekolymsk Asia/Sakhalin" }, { "Russia Time Zone 10", "Asia/Srednekolymsk" }, { "Russia Time Zone 11", "Asia/Kamchatka Asia/Anadyr" }, { "Russia Time Zone 11", "Asia/Kamchatka" }, + { "Russia Time Zone 3", "Europe/Samara Europe/Astrakhan Europe/Ulyanovsk" }, { "Russia Time Zone 3", "Europe/Samara" }, { "Russian Standard Time", "Europe/Moscow Europe/Simferopol Europe/Volgograd" }, { "Russian Standard Time", "Europe/Moscow" }, @@ -1434,6 +1498,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "SA Pacific Standard Time", "America/Jamaica" }, { "SA Pacific Standard Time", "America/Lima" }, { "SA Pacific Standard Time", "America/Panama" }, + { "SA Pacific Standard Time", "America/Port-au-Prince" }, { "SA Pacific Standard Time", "America/Rio_Branco America/Eirunepe" }, { "SA Pacific Standard Time", "Etc/GMT+5" }, { "SA Pacific Standard Time", "Pacific/Easter" }, @@ -1532,7 +1597,7 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "UTC-11", "Pacific/Niue" }, { "UTC-11", "Pacific/Pago_Pago" }, { "Venezuela Standard Time", "America/Caracas" }, - { "Vladivostok Standard Time", "Asia/Vladivostok Asia/Sakhalin Asia/Ust-Nera" }, + { "Vladivostok Standard Time", "Asia/Vladivostok Asia/Ust-Nera" }, { "Vladivostok Standard Time", "Asia/Vladivostok" }, { "W. Australia Standard Time", "Antarctica/Casey" }, { "W. Australia Standard Time", "Australia/Perth" }, @@ -1585,7 +1650,6 @@ const WINDOWS_TZID_ENTRY WindowsTimeZoneIdTable[] = { "Yakutsk Standard Time", "Asia/Yakutsk Asia/Chita Asia/Khandyga" }, { "Yakutsk Standard Time", "Asia/Yakutsk" }, }; - static UINT64 winpr_windows_gmtime() { time_t unix_time; diff --git a/winpr/libwinpr/utils/collections/ListDictionary.c b/winpr/libwinpr/utils/collections/ListDictionary.c index b8cf90f..40cb72b 100644 --- a/winpr/libwinpr/utils/collections/ListDictionary.c +++ b/winpr/libwinpr/utils/collections/ListDictionary.c @@ -45,6 +45,9 @@ int ListDictionary_Count(wListDictionary* listDictionary) int count = 0; wListDictionaryItem* item; + if (!listDictionary) + return -1; + if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); @@ -98,6 +101,9 @@ BOOL ListDictionary_IsSynchronized(wListDictionary* listDictionary) void ListDictionary_Lock(wListDictionary* listDictionary) { + if (!listDictionary) + return; + EnterCriticalSection(&listDictionary->lock); } @@ -107,6 +113,9 @@ void ListDictionary_Lock(wListDictionary* listDictionary) void ListDictionary_Unlock(wListDictionary* listDictionary) { + if (!listDictionary) + return; + LeaveCriticalSection(&listDictionary->lock); } @@ -187,6 +196,9 @@ BOOL ListDictionary_Add(wListDictionary* listDictionary, void* key, void* value) wListDictionaryItem* lastItem; BOOL ret = FALSE; + if (!listDictionary) + return FALSE; + if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); @@ -230,6 +242,9 @@ void ListDictionary_Clear(wListDictionary* listDictionary) wListDictionaryItem* item; wListDictionaryItem* nextItem; + if (!listDictionary) + return; + if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); @@ -267,6 +282,9 @@ BOOL ListDictionary_Contains(wListDictionary* listDictionary, void* key) wListDictionaryItem* item; OBJECT_EQUALS_FN keyEquals; + if (!listDictionary) + return FALSE; + if (listDictionary->synchronized) EnterCriticalSection(&(listDictionary->lock)); @@ -298,6 +316,9 @@ void* ListDictionary_Remove(wListDictionary* listDictionary, void* key) wListDictionaryItem* prevItem; OBJECT_EQUALS_FN keyEquals; + if (!listDictionary) + return NULL; + if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); @@ -338,6 +359,9 @@ void *ListDictionary_Remove_Head(wListDictionary* listDictionary) wListDictionaryItem* item; void *value = NULL; + if (!listDictionary) + return NULL; + if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); @@ -364,6 +388,9 @@ void* ListDictionary_GetItemValue(wListDictionary* listDictionary, void* key) wListDictionaryItem* item = NULL; OBJECT_EQUALS_FN keyEquals; + if (!listDictionary) + return NULL; + if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); @@ -400,6 +427,9 @@ BOOL ListDictionary_SetItemValue(wListDictionary* listDictionary, void* key, voi wListDictionaryItem* item; OBJECT_EQUALS_FN keyEquals; + if (!listDictionary) + return FALSE; + if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); diff --git a/winpr/tools/makecert/CMakeLists.txt b/winpr/tools/makecert/CMakeLists.txt index ce72f7d..3e021e0 100644 --- a/winpr/tools/makecert/CMakeLists.txt +++ b/winpr/tools/makecert/CMakeLists.txt @@ -33,7 +33,13 @@ add_library(${MODULE_NAME} STATIC ${${MODULE_PREFIX}_SRCS}) set(${MODULE_PREFIX}_LIBS winpr) if(OPENSSL_FOUND) - list(APPEND ${MODULE_PREFIX}_LIBS ${OPENSSL_LIBRARIES}) + if(WIN32) + list(APPEND ${MODULE_PREFIX}_LIBS ${OPENSSL_LIBRARIES}) + else() + # if ${OPENSSL_LIBRARIES} libssl and libcrypto is linked + # therefor explicitly link against libcrypto + list(APPEND ${MODULE_PREFIX}_LIBS crypto) + endif() endif() if(MBEDTLS_FOUND) diff --git a/winpr/winpr.pc.in b/winpr/winpr.pc.in index 4c30637..ac509c0 100644 --- a/winpr/winpr.pc.in +++ b/winpr/winpr.pc.in @@ -9,7 +9,7 @@ Description: WinPR: Windows Portable Runtime URL: http://www.freerdp.com/ Version: @WINPR_VERSION@ Requires: -Requires.private: zlib libssl +Requires.private: libssl Libs: -L${libdir} ${libs} Libs.private: -ldl -lrt -lm -lpthread Cflags: -I${includedir}