Imported Upstream version 2.0.0~git20160502.1.a7ca42e+dfsg1
This commit is contained in:
parent
88dec5ba62
commit
76621c1efa
@ -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()
|
||||
|
||||
172
ChangeLog
172
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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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})
|
||||
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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})
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -138,6 +138,4 @@ struct drdynvc_plugin
|
||||
IWTSVirtualChannelManager* channel_mgr;
|
||||
};
|
||||
|
||||
UINT drdynvc_write_data(drdynvcPlugin* plugin, UINT32 ChannelId, BYTE* data, UINT32 data_size);
|
||||
|
||||
#endif
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -66,6 +66,7 @@ struct _RDPGFX_PLUGIN
|
||||
BOOL Progressive;
|
||||
BOOL ProgressiveV2;
|
||||
BOOL H264;
|
||||
BOOL AVC444;
|
||||
|
||||
ZGFX_CONTEXT* zgfx;
|
||||
UINT32 UnacknowledgedFrames;
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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})
|
||||
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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})
|
||||
|
||||
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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})
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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, "<sw|hw>", 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, "<RFX|AVC420|AVC444>", 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, "<AVC420|AVC444>", 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, "<image|video>", NULL, NULL, -1, NULL, "RemoteFX mode" },
|
||||
{ "frame-ack", COMMAND_LINE_VALUE_REQUIRED, "<number>", 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")
|
||||
{
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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}")
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
* Copyright 2010-2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||||
* Copyright 2015 Thincast Technologies GmbH
|
||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
||||
* Copyright 2016 Martin Fleisz <martin.fleisz@thincast.com>
|
||||
*
|
||||
* 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));
|
||||
|
||||
@ -58,6 +58,8 @@ struct rdp_nla
|
||||
rdpSettings* settings;
|
||||
rdpTransport* transport;
|
||||
UINT32 cbMaxToken;
|
||||
UINT32 version;
|
||||
UINT32 errorCode;
|
||||
ULONG fContextReq;
|
||||
ULONG pfContextAttr;
|
||||
BOOL haveContext;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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}")
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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}")
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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}")
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
# RdTk: Remote Desktop Toolkit
|
||||
# rdtk cmake build script
|
||||
#
|
||||
# Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||||
#
|
||||
# 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)
|
||||
|
||||
@ -21,6 +21,8 @@
|
||||
|
||||
#include <winpr/spec.h>
|
||||
|
||||
/* 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 */
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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}
|
||||
@ -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")
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
/**
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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})
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user