Merge branch 'master' of github.com:FreeRDP/FreeRDP
This commit is contained in:
commit
496ce10637
@ -66,7 +66,7 @@ set(WITH_LIBRARY_VERSIONING "ON")
|
||||
set(FREERDP_VERSION_MAJOR "1")
|
||||
set(FREERDP_VERSION_MINOR "2")
|
||||
set(FREERDP_VERSION_REVISION "0")
|
||||
set(FREERDP_VERSION_SUFFIX "beta1")
|
||||
set(FREERDP_VERSION_SUFFIX "dev")
|
||||
set(FREERDP_API_VERSION "${FREERDP_VERSION_MAJOR}.${FREERDP_VERSION_MINOR}")
|
||||
set(FREERDP_VERSION "${FREERDP_API_VERSION}.${FREERDP_VERSION_REVISION}")
|
||||
if (FREERDP_VERSION_SUFFIX)
|
||||
|
@ -175,7 +175,7 @@ static void serial_process_irp_create(SERIAL_DEVICE* serial, IRP* irp)
|
||||
|
||||
if (!serial->hComm || (serial->hComm == INVALID_HANDLE_VALUE))
|
||||
{
|
||||
WLog_Print(serial->log, WLOG_WARN, "CreateFile failure: %s last-error: Ox%lX\n", serial->device.name, GetLastError());
|
||||
WLog_Print(serial->log, WLOG_WARN, "CreateFile failure: %s last-error: 0x%lX\n", serial->device.name, GetLastError());
|
||||
|
||||
irp->IoStatus = STATUS_UNSUCCESSFUL;
|
||||
goto error_handle;
|
||||
|
@ -28,23 +28,6 @@ foreach(STATIC_MODULE ${CHANNEL_STATIC_SERVER_MODULES})
|
||||
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${STATIC_MODULE_NAME})
|
||||
endforeach()
|
||||
|
||||
# On windows create dll version information.
|
||||
# Vendor, product and year are already set in top level CMakeLists.txt
|
||||
if (WIN32)
|
||||
set (RC_VERSION_MAJOR ${FREERDP_VERSION_MAJOR})
|
||||
set (RC_VERSION_MINOR ${FREERDP_VERSION_MINOR})
|
||||
set (RC_VERSION_BUILD ${FREERDP_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} STATIC ${${MODULE_PREFIX}_SRCS})
|
||||
|
||||
if (WITH_LIBRARY_VERSIONING)
|
||||
|
@ -67,12 +67,12 @@ set(compatibilitydir "${ANDROID_SDK}/extras/android/compatibility/v7/appcompat")
|
||||
if(EXISTS "${supportdir}" AND IS_DIRECTORY "${supportdir}")
|
||||
add_custom_target(copy_appcompat ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${supportdir}" ${APPCOMPAT_DIR}
|
||||
COMMAND ${ANDROID_COMMAND} update lib-project -p ${APPCOMPAT_DIR}
|
||||
COMMAND ${ANDROID_COMMAND} update lib-project -p ${APPCOMPAT_DIR} -t android-${ANDROID_APP_TARGET_SDK}
|
||||
)
|
||||
elseif(EXISTS "${compatibilitydir}" AND IS_DIRECTORY "${compatibilitydir}")
|
||||
add_custom_target(copy_appcompat ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${compatibilitydir}" ${APPCOMPAT_DIR}
|
||||
COMMAND ${ANDROID_COMMAND} update lib-project -p ${APPCOMPAT_DIR}
|
||||
COMMAND ${ANDROID_COMMAND} update lib-project -p ${APPCOMPAT_DIR} -t android-${ANDROID_APP_TARGET_SDK}
|
||||
)
|
||||
else()
|
||||
message( FATAL_ERROR "${ANDROID_SDK}/extras/android/{support|compatibility}/v7/appcompat directory not found. Please install a recent version of Android Support Library, CMake will now exit." )
|
||||
|
@ -288,6 +288,46 @@ BOOL wl_post_connect(freerdp* instance)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL wl_verify_certificate(freerdp* instance, char* subject, char* issuer, char* fingerprint)
|
||||
{
|
||||
char answer;
|
||||
|
||||
printf("Certificate details:\n");
|
||||
printf("\tSubject: %s\n", subject);
|
||||
printf("\tIssuer: %s\n", issuer);
|
||||
printf("\tThumbprint: %s\n", fingerprint);
|
||||
printf("The above X.509 certificate could not be verified, possibly because you do not have "
|
||||
"the CA certificate in your certificate store, or the certificate has expired. "
|
||||
"Please look at the documentation on how to create local certificate store for a private CA.\n");
|
||||
|
||||
while (1)
|
||||
{
|
||||
printf("Do you trust the above certificate? (Y/N) ");
|
||||
answer = fgetc(stdin);
|
||||
|
||||
if (feof(stdin))
|
||||
{
|
||||
printf("\nError: Could not read answer from stdin.");
|
||||
if (instance->settings->CredentialsFromStdin)
|
||||
printf(" - Run without parameter \"--from-stdin\" to set trust.");
|
||||
printf("\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (answer == 'y' || answer == 'Y')
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
else if (answer == 'n' || answer == 'N')
|
||||
{
|
||||
break;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int wlfreerdp_run(freerdp* instance)
|
||||
{
|
||||
int i;
|
||||
@ -397,6 +437,7 @@ int main(int argc, char* argv[])
|
||||
instance = freerdp_new();
|
||||
instance->PreConnect = wl_pre_connect;
|
||||
instance->PostConnect = wl_post_connect;
|
||||
instance->VerifyCertificate = wl_verify_certificate;
|
||||
|
||||
instance->ContextSize = sizeof(struct wl_context);
|
||||
instance->ContextNew = wl_context_new;
|
||||
|
@ -85,10 +85,16 @@
|
||||
# "armeabi-v7a with VFPV3" - same as armeabi-v7a, but
|
||||
# sets VFPV3 as floating-point unit (has 32 registers instead of 16).
|
||||
# "armeabi-v6 with VFP" - tuned for ARMv6 processors having VFP.
|
||||
# "arm64-v8a" - matches to the NDK ABI with the same name.
|
||||
# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation.
|
||||
# "x86" - matches to the NDK ABI with the same name.
|
||||
# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation.
|
||||
# "x86_64" - matches to the NDK ABI with the same name.
|
||||
# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation.
|
||||
# "mips" - matches to the NDK ABI with the same name.
|
||||
# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation.
|
||||
# "mips64" - matches to the NDK ABI with the same name.
|
||||
# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation.
|
||||
#
|
||||
# ANDROID_NATIVE_API_LEVEL=android-8 - level of Android API compile for.
|
||||
# Option is read-only when standalone toolchain is used.
|
||||
@ -181,13 +187,13 @@
|
||||
# ANDROID and BUILD_ANDROID will be set to true, you may test any of these
|
||||
# variables to make necessary Android-specific configuration changes.
|
||||
#
|
||||
# Also ARMEABI or ARMEABI_V7A or X86 or MIPS will be set true, mutually
|
||||
# Also ARMEABI or ARMEABI_V7A or ARM64_V8A or X86 or X86_64 or MIPS or MIPS64 will be set true, mutually
|
||||
# exclusive. NEON option will be set true if VFP is set to NEON.
|
||||
#
|
||||
# LIBRARY_OUTPUT_PATH_ROOT should be set in cache to determine where Android
|
||||
# libraries will be installed.
|
||||
# Default is ${CMAKE_SOURCE_DIR}, and the android libs will always be
|
||||
# under the ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}
|
||||
# under the ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_OUTPUT_ABI_NAME}
|
||||
# (depending on the target ABI). This is convenient for Android packaging.
|
||||
#
|
||||
# Change Log:
|
||||
@ -303,6 +309,9 @@
|
||||
# [~] fix copying of shared STL
|
||||
# - April 2014
|
||||
# [+] updated for NDK r9d
|
||||
# - July 2014
|
||||
# [+] updated for NDK r10
|
||||
# [+] arm64_v8a, x86_64, mips64 toolchain support (experimental)
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
cmake_minimum_required( VERSION 2.6.3 )
|
||||
@ -335,7 +344,7 @@ endif()
|
||||
# rpath makes low sence for Android
|
||||
set( CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries." )
|
||||
|
||||
set( ANDROID_SUPPORTED_NDK_VERSIONS ${ANDROID_EXTRA_NDK_VERSIONS} -r9d -r9c -r9b -r9 -r8e -r8d -r8c -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" )
|
||||
set( ANDROID_SUPPORTED_NDK_VERSIONS ${ANDROID_EXTRA_NDK_VERSIONS} -r10 -r9d -r9c -r9b -r9 -r8e -r8d -r8c -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" )
|
||||
if(NOT DEFINED ANDROID_NDK_SEARCH_PATHS)
|
||||
if( CMAKE_HOST_WIN32 )
|
||||
file( TO_CMAKE_PATH "$ENV{PROGRAMFILES}" ANDROID_NDK_SEARCH_PATHS )
|
||||
@ -350,12 +359,18 @@ if(NOT DEFINED ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH)
|
||||
endif()
|
||||
|
||||
set( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" )
|
||||
set( ANDROID_SUPPORTED_ABIS_arm64 "arm64-v8a" )
|
||||
set( ANDROID_SUPPORTED_ABIS_x86 "x86" )
|
||||
set( ANDROID_SUPPORTED_ABIS_x86_64 "x86_64" )
|
||||
set( ANDROID_SUPPORTED_ABIS_mipsel "mips" )
|
||||
set( ANDROID_SUPPORTED_ABIS_mips64el "mips64" )
|
||||
|
||||
set( ANDROID_DEFAULT_NDK_API_LEVEL 9 )
|
||||
set( ANDROID_DEFAULT_NDK_API_LEVEL_x86 9 )
|
||||
set( ANDROID_DEFAULT_NDK_API_LEVEL_mips 9 )
|
||||
set( ANDROID_DEFAULT_NDK_API_LEVEL_arm64 "L" )
|
||||
set( ANDROID_DEFAULT_NDK_API_LEVEL_x86_64 "L" )
|
||||
set( ANDROID_DEFAULT_NDK_API_LEVEL_mips64 "L" )
|
||||
|
||||
|
||||
macro( __LIST_FILTER listvar regex )
|
||||
@ -609,6 +624,9 @@ if( BUILD_WITH_ANDROID_NDK )
|
||||
# try to detect change of NDK
|
||||
if( CMAKE_AR )
|
||||
string( LENGTH "${ANDROID_NDK_TOOLCHAINS_PATH}" __length )
|
||||
message("${CMAKE_AR}")
|
||||
message("${__length}")
|
||||
message("${ANDROID_NDK_TOOLCHAINS_PATH}")
|
||||
string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidNdkPreviousPath )
|
||||
if( NOT __androidNdkPreviousPath STREQUAL ANDROID_NDK_TOOLCHAINS_PATH )
|
||||
message( FATAL_ERROR "It is not possible to change the path to the NDK on subsequent CMake run. You must remove all generated files from your build folder first.
|
||||
@ -659,10 +677,16 @@ macro( __GLOB_NDK_TOOLCHAINS __availableToolchainsVar __availableToolchainsLst _
|
||||
string( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9x]+)?$" __version "${__gcc_toolchain}" )
|
||||
if( __machine MATCHES i686 )
|
||||
set( __arch "x86" )
|
||||
elseif( __machine MATCHES x86_64 )
|
||||
set( __arch "x86_64" )
|
||||
elseif( __machine MATCHES arm )
|
||||
set( __arch "arm" )
|
||||
elseif( __machine MATCHES aarch64 )
|
||||
set( __arch "arm64" )
|
||||
elseif( __machine MATCHES mipsel )
|
||||
set( __arch "mipsel" )
|
||||
elseif( __machine MATCHES mips64el )
|
||||
set( __arch "mips64el" )
|
||||
endif()
|
||||
list( APPEND __availableToolchainMachines "${__machine}" )
|
||||
list( APPEND __availableToolchainArchs "${__arch}" )
|
||||
@ -746,6 +770,13 @@ if( ANDROID_ABI STREQUAL "x86" )
|
||||
set( ANDROID_ARCH_FULLNAME "x86" )
|
||||
set( ANDROID_LLVM_TRIPLE "i686-none-linux-android" )
|
||||
set( CMAKE_SYSTEM_PROCESSOR "i686" )
|
||||
elseif( ANDROID_ABI STREQUAL "x86_64" )
|
||||
set( X86_64 true )
|
||||
set( ANDROID_NDK_ABI_NAME "x86_64" )
|
||||
set( ANDROID_ARCH_NAME "x86_64" )
|
||||
set( ANDROID_ARCH_FULLNAME "x86_64" )
|
||||
set( ANDROID_LLVM_TRIPLE "x86_64-none-linux-android" )
|
||||
set( CMAKE_SYSTEM_PROCESSOR "x86_64" )
|
||||
elseif( ANDROID_ABI STREQUAL "mips" )
|
||||
set( MIPS true )
|
||||
set( ANDROID_NDK_ABI_NAME "mips" )
|
||||
@ -753,6 +784,13 @@ elseif( ANDROID_ABI STREQUAL "mips" )
|
||||
set( ANDROID_ARCH_FULLNAME "mipsel" )
|
||||
set( ANDROID_LLVM_TRIPLE "mipsel-none-linux-android" )
|
||||
set( CMAKE_SYSTEM_PROCESSOR "mips" )
|
||||
elseif( ANDROID_ABI STREQUAL "mips64" )
|
||||
set( MIPS64 true )
|
||||
set( ANDROID_NDK_ABI_NAME "mips64" )
|
||||
set( ANDROID_ARCH_NAME "mips64" )
|
||||
set( ANDROID_ARCH_FULLNAME "mips64el" )
|
||||
set( ANDROID_LLVM_TRIPLE "mips64el-none-linux-android" )
|
||||
set( CMAKE_SYSTEM_PROCESSOR "mips64" )
|
||||
elseif( ANDROID_ABI STREQUAL "armeabi" )
|
||||
set( ARMEABI true )
|
||||
set( ANDROID_NDK_ABI_NAME "armeabi" )
|
||||
@ -793,10 +831,25 @@ elseif( ANDROID_ABI STREQUAL "armeabi-v7a with NEON" )
|
||||
set( CMAKE_SYSTEM_PROCESSOR "armv7-a" )
|
||||
set( VFPV3 true )
|
||||
set( NEON true )
|
||||
elseif( ANDROID_ABI STREQUAL "arm64-v8a" )
|
||||
set( ARM64_V8A true )
|
||||
set( ANDROID_NDK_ABI_NAME "arm64-v8a" )
|
||||
set( ANDROID_ARCH_NAME "arm64" )
|
||||
set( ANDROID_ARCH_FULLNAME "arm64" )
|
||||
set( ANDROID_LLVM_TRIPLE "armv8-none-linux-androideabi" )
|
||||
set( CMAKE_SYSTEM_PROCESSOR "aarch64" )
|
||||
set( VFPV3 true )
|
||||
set( NEON true )
|
||||
else()
|
||||
message( SEND_ERROR "Unknown ANDROID_ABI=\"${ANDROID_ABI}\" is specified." )
|
||||
endif()
|
||||
|
||||
if( X86_64 )
|
||||
set( ANDROID_NDK_OUTPUT_ABI_NAME "x86-64" )
|
||||
else()
|
||||
set( ANDROID_NDK_OUTPUT_ABI_NAME ${ANDROID_NDK_ABI_NAME} )
|
||||
endif()
|
||||
|
||||
if( CMAKE_BINARY_DIR AND EXISTS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" )
|
||||
# really dirty hack
|
||||
# it is not possible to change CMAKE_SYSTEM_PROCESSOR after the first run...
|
||||
@ -862,38 +915,40 @@ unset( __availableToolchainCompilerVersions )
|
||||
|
||||
# choose native API level
|
||||
__INIT_VARIABLE( ANDROID_NATIVE_API_LEVEL ENV_ANDROID_NATIVE_API_LEVEL ANDROID_API_LEVEL ENV_ANDROID_API_LEVEL ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME} ANDROID_DEFAULT_NDK_API_LEVEL )
|
||||
string( REGEX MATCH "[0-9]+" ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" )
|
||||
# adjust API level
|
||||
set( __real_api_level ${ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME}} )
|
||||
foreach( __level ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} )
|
||||
if( NOT __level GREATER ANDROID_NATIVE_API_LEVEL AND NOT __level LESS __real_api_level )
|
||||
set( __real_api_level ${__level} )
|
||||
endif()
|
||||
endforeach()
|
||||
if( __real_api_level AND NOT ANDROID_NATIVE_API_LEVEL EQUAL __real_api_level )
|
||||
message( STATUS "Adjusting Android API level 'android-${ANDROID_NATIVE_API_LEVEL}' to 'android-${__real_api_level}'")
|
||||
set( ANDROID_NATIVE_API_LEVEL ${__real_api_level} )
|
||||
endif()
|
||||
unset(__real_api_level)
|
||||
# validate
|
||||
list( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_NATIVE_API_LEVEL}" __levelIdx )
|
||||
if( __levelIdx EQUAL -1 )
|
||||
message( SEND_ERROR "Specified Android native API level 'android-${ANDROID_NATIVE_API_LEVEL}' is not supported by your NDK/toolchain." )
|
||||
else()
|
||||
if( BUILD_WITH_ANDROID_NDK )
|
||||
__DETECT_NATIVE_API_LEVEL( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" )
|
||||
if( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL )
|
||||
message( SEND_ERROR "Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken." )
|
||||
if( NOT ANDROID_NATIVE_API_LEVEL STREQUAL "L" )
|
||||
string( REGEX MATCH "[0-9]+" ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" )
|
||||
# adjust API level
|
||||
set( __real_api_level ${ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME}} )
|
||||
foreach( __level ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} )
|
||||
if( NOT __level GREATER ANDROID_NATIVE_API_LEVEL AND NOT __level LESS __real_api_level )
|
||||
set( __real_api_level ${__level} )
|
||||
endif()
|
||||
endforeach()
|
||||
if( __real_api_level AND NOT ANDROID_NATIVE_API_LEVEL EQUAL __real_api_level )
|
||||
message( STATUS "Adjusting Android API level 'android-${ANDROID_NATIVE_API_LEVEL}' to 'android-${__real_api_level}'")
|
||||
set( ANDROID_NATIVE_API_LEVEL ${__real_api_level} )
|
||||
endif()
|
||||
unset(__real_api_level)
|
||||
# validate
|
||||
list( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_NATIVE_API_LEVEL}" __levelIdx )
|
||||
if( __levelIdx EQUAL -1 )
|
||||
message( SEND_ERROR "Specified Android native API level 'android-${ANDROID_NATIVE_API_LEVEL}' is not supported by your NDK/toolchain." )
|
||||
else()
|
||||
if( BUILD_WITH_ANDROID_NDK )
|
||||
__DETECT_NATIVE_API_LEVEL( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" )
|
||||
if( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL )
|
||||
message( SEND_ERROR "Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken." )
|
||||
endif()
|
||||
unset( __realApiLevel )
|
||||
endif()
|
||||
set( ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android API level for native code" FORCE )
|
||||
if( CMAKE_VERSION VERSION_GREATER "2.8" )
|
||||
list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS )
|
||||
set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} )
|
||||
endif()
|
||||
endif()
|
||||
unset( __realApiLevel )
|
||||
endif()
|
||||
set( ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android API level for native code" FORCE )
|
||||
if( CMAKE_VERSION VERSION_GREATER "2.8" )
|
||||
list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS )
|
||||
set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} )
|
||||
endif()
|
||||
unset( __levelIdx )
|
||||
endif()
|
||||
unset( __levelIdx )
|
||||
|
||||
|
||||
# remember target ABI
|
||||
@ -1214,7 +1269,11 @@ if( ANDROID_COMPILER_IS_CLANG )
|
||||
set( CMAKE_C_COMPILER_ID Clang)
|
||||
endif()
|
||||
set( CMAKE_C_PLATFORM_ID Linux )
|
||||
set( CMAKE_C_SIZEOF_DATA_PTR 4 )
|
||||
if( ARM64_V8A OR X86_64 OR MIPS64 )
|
||||
set( CMAKE_C_SIZEOF_DATA_PTR 8 )
|
||||
else()
|
||||
set( CMAKE_C_SIZEOF_DATA_PTR 4 )
|
||||
endif()
|
||||
set( CMAKE_C_HAS_ISYSROOT 1 )
|
||||
set( CMAKE_C_COMPILER_ABI ELF )
|
||||
CMAKE_FORCE_CXX_COMPILER( "${CMAKE_CXX_COMPILER}" GNU )
|
||||
@ -1222,7 +1281,11 @@ if( ANDROID_COMPILER_IS_CLANG )
|
||||
set( CMAKE_CXX_COMPILER_ID Clang)
|
||||
endif()
|
||||
set( CMAKE_CXX_PLATFORM_ID Linux )
|
||||
set( CMAKE_CXX_SIZEOF_DATA_PTR 4 )
|
||||
if( ARM64_V8A OR X86_64 OR MIPS64 )
|
||||
set( CMAKE_CXX_SIZEOF_DATA_PTR 8 )
|
||||
else()
|
||||
set( CMAKE_CXX_SIZEOF_DATA_PTR 4 )
|
||||
endif()
|
||||
set( CMAKE_CXX_HAS_ISYSROOT 1 )
|
||||
set( CMAKE_CXX_COMPILER_ABI ELF )
|
||||
set( CMAKE_CXX_SOURCE_FILE_EXTENSIONS cc cp cxx cpp CPP c++ C )
|
||||
@ -1279,7 +1342,7 @@ if( ARMEABI OR ARMEABI_V7A )
|
||||
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300" )
|
||||
endif()
|
||||
endif()
|
||||
elseif( X86 )
|
||||
elseif( X86 OR X86_64 )
|
||||
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" )
|
||||
if( NOT ANDROID_COMPILER_IS_CLANG )
|
||||
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300" )
|
||||
@ -1288,7 +1351,7 @@ elseif( X86 )
|
||||
endif()
|
||||
set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer -fstrict-aliasing" )
|
||||
set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer -fno-strict-aliasing" )
|
||||
elseif( MIPS )
|
||||
elseif( MIPS OR MIPS64 )
|
||||
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fpic -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0" )
|
||||
set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer" )
|
||||
set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer" )
|
||||
@ -1325,6 +1388,8 @@ elseif( ARMEABI_V6 )
|
||||
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp" ) # vfp == vfpv2
|
||||
elseif( ARMEABI )
|
||||
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv5te -mtune=xscale -msoft-float" )
|
||||
elseif( ARM64_V8A )
|
||||
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv8-a" )
|
||||
endif()
|
||||
|
||||
if( ANDROID_STL MATCHES "gnustl" AND (EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}") )
|
||||
@ -1558,11 +1623,11 @@ set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path fo
|
||||
|
||||
if(NOT _CMAKE_IN_TRY_COMPILE)
|
||||
if( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" )
|
||||
set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" )
|
||||
set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_OUTPUT_ABI_NAME}" CACHE PATH "Output directory for applications" )
|
||||
else()
|
||||
set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" )
|
||||
endif()
|
||||
set( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" )
|
||||
set( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_OUTPUT_ABI_NAME}" CACHE PATH "path for android libs" )
|
||||
endif()
|
||||
|
||||
# copy shaed stl library to build directory
|
||||
@ -1639,10 +1704,16 @@ macro( ANDROID_GET_ABI_RAWNAME TOOLCHAIN_FLAG VAR )
|
||||
set( ${VAR} "armeabi" )
|
||||
elseif( "${TOOLCHAIN_FLAG}" STREQUAL "ARMEABI_V7A" )
|
||||
set( ${VAR} "armeabi-v7a" )
|
||||
elseif( "${TOOLCHAIN_FLAG}" STREQUAL "ARM64_V8A" )
|
||||
set( ${VAR} "arm64-v8a" )
|
||||
elseif( "${TOOLCHAIN_FLAG}" STREQUAL "X86" )
|
||||
set( ${VAR} "x86" )
|
||||
elseif( "${TOOLCHAIN_FLAG}" STREQUAL "X86_64" )
|
||||
set( ${VAR} "x86_64" )
|
||||
elseif( "${TOOLCHAIN_FLAG}" STREQUAL "MIPS" )
|
||||
set( ${VAR} "mips" )
|
||||
elseif( "${TOOLCHAIN_FLAG}" STREQUAL "MIPS64" )
|
||||
set( ${VAR} "mips64" )
|
||||
else()
|
||||
set( ${VAR} "unknown" )
|
||||
endif()
|
||||
@ -1709,7 +1780,7 @@ endif()
|
||||
|
||||
|
||||
# Variables controlling behavior or set by cmake toolchain:
|
||||
# ANDROID_ABI : "armeabi-v7a" (default), "armeabi", "armeabi-v7a with NEON", "armeabi-v7a with VFPV3", "armeabi-v6 with VFP", "x86", "mips"
|
||||
# ANDROID_ABI : "armeabi-v7a" (default), "armeabi", "armeabi-v7a with NEON", "armeabi-v7a with VFPV3", "armeabi-v6 with VFP", "arm64-v8a", "x86", "x86_64", "mips", "mips64"
|
||||
# ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14 (depends on NDK version)
|
||||
# ANDROID_STL : gnustl_static/gnustl_shared/stlport_static/stlport_shared/gabi++_static/gabi++_shared/system_re/system/none
|
||||
# ANDROID_FORBID_SYGWIN : ON/OFF
|
||||
@ -1743,16 +1814,19 @@ endif()
|
||||
# ARMEABI : TRUE for arm v6 and older devices
|
||||
# ARMEABI_V6 : TRUE for arm v6
|
||||
# ARMEABI_V7A : TRUE for arm v7a
|
||||
# ARM64_V8A : TRUE for arm64 v8a
|
||||
# NEON : TRUE if NEON unit is enabled
|
||||
# VFPV3 : TRUE if VFP version 3 is enabled
|
||||
# X86 : TRUE if configured for x86
|
||||
# X86_64 : TRUE if configured for x86_64
|
||||
# MIPS : TRUE if configured for mips
|
||||
# MIPS64 : TRUE if configured for mips64
|
||||
# BUILD_ANDROID : always TRUE
|
||||
# BUILD_WITH_ANDROID_NDK : TRUE if NDK is used
|
||||
# BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used
|
||||
# ANDROID_NDK_HOST_SYSTEM_NAME : "windows", "linux-x86" or "darwin-x86" depending on host platform
|
||||
# ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "x86" or "mips" depending on ANDROID_ABI
|
||||
# ANDROID_NDK_RELEASE : one of r5, r5b, r5c, r6, r6b, r7, r7b, r7c, r8, r8b, r8c, r8d, r8e, r9, r9b, r9c, r9d; set only for NDK
|
||||
# ANDROID_NDK_RELEASE : one of r5, r5b, r5c, r6, r6b, r7, r7b, r7c, r8, r8b, r8c, r8d, r8e, r9, r9b, r9c, r9d, r10; set only for NDK
|
||||
# ANDROID_ARCH_NAME : "arm" or "x86" or "mips" depending on ANDROID_ABI
|
||||
# ANDROID_SYSROOT : path to the compiler sysroot
|
||||
# TOOL_OS_SUFFIX : "" or ".exe" depending on host platform
|
||||
|
@ -27,7 +27,7 @@ option(ANDROID_BUILD_JAVA "Automatically android java code - build type depends
|
||||
option(ANDROID_BUILD_JAVA_DEBUG "Create a android debug package" ${JAVA_DEBUG_DEFAULT})
|
||||
|
||||
set(ANDROID_APP_VERSION 3 CACHE STRING "Application version")
|
||||
set(ANDROID_APP_TARGET_SDK 14 CACHE STRING "Application target android SDK")
|
||||
set(ANDROID_APP_TARGET_SDK 21 CACHE STRING "Application target android SDK")
|
||||
set(ANDROID_APP_MIN_SDK 9 CACHE STRING "Application minimum android SDK requirement")
|
||||
set(ANDROID_APP_GOOGLE_TARGET_SDK "16" CACHE STRING "Application target google SDK")
|
||||
|
||||
|
@ -23,7 +23,9 @@ For the Android port some additional dependencies need to be fulfilled:
|
||||
|
||||
* for the Java GUI (if build with ant)
|
||||
- ant
|
||||
- Android SDK - version >= 21
|
||||
- Android SDK Tools - version >= 21
|
||||
- Android Support Library (note: make sure ANDROID_APP_TARGET_SDK is set to be at
|
||||
least the API level required by the support library)
|
||||
|
||||
FreeRDP requires openssl libraries for building but they are not part of the
|
||||
Android NDK and therefore they need to be prebuild manually.
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <winpr/stream.h>
|
||||
#include <winpr/bitstream.h>
|
||||
|
||||
#include <freerdp/log.h>
|
||||
#include <freerdp/codec/mppc.h>
|
||||
|
||||
#define TAG FREERDP_TAG("codec.mppc")
|
||||
@ -125,6 +126,12 @@ int mppc_decompress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE** p
|
||||
* Literal Encoding
|
||||
*/
|
||||
|
||||
if (HistoryPtr > HistoryBufferEnd)
|
||||
{
|
||||
WLog_ERR(TAG, "history buffer index out of range");
|
||||
return -1004;
|
||||
}
|
||||
|
||||
if ((accumulator & 0x80000000) == 0x00000000)
|
||||
{
|
||||
/**
|
||||
@ -418,39 +425,17 @@ int mppc_decompress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE** p
|
||||
WLog_DBG(TAG, "<%d,%d>", (int) CopyOffset, (int) LengthOfMatch);
|
||||
#endif
|
||||
|
||||
SrcPtr = HistoryPtr - CopyOffset;
|
||||
|
||||
if (SrcPtr >= HistoryBuffer)
|
||||
if ((HistoryPtr + LengthOfMatch - 1) > HistoryBufferEnd)
|
||||
{
|
||||
while (LengthOfMatch > 0)
|
||||
{
|
||||
*(HistoryPtr) = *SrcPtr;
|
||||
|
||||
HistoryPtr++;
|
||||
SrcPtr++;
|
||||
|
||||
LengthOfMatch--;
|
||||
}
|
||||
WLog_ERR(TAG, "history buffer overflow");
|
||||
return -1005;
|
||||
}
|
||||
else
|
||||
{
|
||||
SrcPtr = HistoryBufferEnd - (CopyOffset - (HistoryPtr - HistoryBuffer));
|
||||
SrcPtr++;
|
||||
|
||||
while (LengthOfMatch && (SrcPtr <= HistoryBufferEnd))
|
||||
{
|
||||
*HistoryPtr++ = *SrcPtr++;
|
||||
LengthOfMatch--;
|
||||
}
|
||||
SrcPtr = &HistoryBuffer[(HistoryPtr - HistoryBuffer - CopyOffset) & (CompressionLevel ? 0xFFFF : 0x1FFF)];
|
||||
|
||||
SrcPtr = HistoryBuffer;
|
||||
|
||||
while (LengthOfMatch > 0)
|
||||
{
|
||||
*HistoryPtr++ = *SrcPtr++;
|
||||
LengthOfMatch--;
|
||||
}
|
||||
}
|
||||
do {
|
||||
*HistoryPtr++ = *SrcPtr++;
|
||||
} while (--LengthOfMatch);
|
||||
}
|
||||
|
||||
*pDstSize = (UINT32) (HistoryPtr - mppc->HistoryPtr);
|
||||
|
@ -829,7 +829,8 @@ static void update_send_refresh_rect(rdpContext* context, BYTE count, RECTANGLE_
|
||||
static void update_write_suppress_output(wStream* s, BYTE allow, RECTANGLE_16* area)
|
||||
{
|
||||
Stream_Write_UINT8(s, allow); /* allowDisplayUpdates (1 byte) */
|
||||
Stream_Seek(s, 3); /* pad3Octets (3 bytes) */
|
||||
/* Use zeros for padding (like mstsc) for compatibility with legacy servers */
|
||||
Stream_Zero(s, 3); /* pad3Octets (3 bytes) */
|
||||
|
||||
if (allow > 0)
|
||||
{
|
||||
|
@ -25,6 +25,11 @@ if(MSVC)
|
||||
set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} module.def)
|
||||
endif()
|
||||
|
||||
foreach(FREERDP_CHANNELS_SERVER_SRC ${FREERDP_CHANNELS_SERVER_SRCS})
|
||||
set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS}
|
||||
"${FREERDP_CHANNELS_SERVER_SRC}")
|
||||
endforeach()
|
||||
|
||||
# On windows create dll version information.
|
||||
# Vendor, product and year are already set in top level CMakeLists.txt
|
||||
if (WIN32)
|
||||
|
@ -25,6 +25,9 @@
|
||||
#ifdef _WIN32
|
||||
|
||||
#include <specstrings.h>
|
||||
#ifndef _COM_Outptr_
|
||||
#define _COM_Outptr_
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
|
@ -1373,9 +1373,17 @@ HANDLE CommCreateFileA(LPCSTR lpDeviceName, DWORD dwDesiredAccess, DWORD dwShare
|
||||
|
||||
if (ioctl(pComm->fd, TIOCGICOUNT, &(pComm->counters)) < 0)
|
||||
{
|
||||
CommLog_Print(WLOG_WARN, "TIOCGICOUNT ioctl failed, errno=[%d] %s", errno, strerror(errno));
|
||||
SetLastError(ERROR_IO_DEVICE);
|
||||
goto error_handle;
|
||||
CommLog_Print(WLOG_WARN, "TIOCGICOUNT ioctl failed, errno=[%d] %s.", errno, strerror(errno));
|
||||
CommLog_Print(WLOG_WARN, "could not read counters.");
|
||||
|
||||
/* could not initialize counters but keep on.
|
||||
*
|
||||
* Not all drivers, especially for USB to serial
|
||||
* adapters (e.g. those based on pl2303), does support
|
||||
* this call.
|
||||
*/
|
||||
|
||||
ZeroMemory(&(pComm->counters), sizeof(struct serial_icounter_struct));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1042,11 +1042,19 @@ static BOOL _set_wait_mask(WINPR_COMM *pComm, const ULONG *pWaitMask)
|
||||
|
||||
if (ioctl(pComm->fd, TIOCGICOUNT, &(pComm->counters)) < 0)
|
||||
{
|
||||
CommLog_Print(WLOG_WARN, "TIOCGICOUNT ioctl failed, errno=[%d] %s", errno, strerror(errno));
|
||||
SetLastError(ERROR_IO_DEVICE);
|
||||
CommLog_Print(WLOG_WARN, "TIOCGICOUNT ioctl failed, errno=[%d] %s.", errno, strerror(errno));
|
||||
|
||||
LeaveCriticalSection(&pComm->EventsLock);
|
||||
return FALSE;
|
||||
if (pComm->permissive)
|
||||
{
|
||||
/* counters could not be reset but keep on */
|
||||
ZeroMemory(&(pComm->counters), sizeof(struct serial_icounter_struct));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_IO_DEVICE);
|
||||
LeaveCriticalSection(&pComm->EventsLock);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
pComm->PendingEvents = 0;
|
||||
@ -1188,11 +1196,22 @@ static BOOL _get_commstatus(WINPR_COMM *pComm, SERIAL_STATUS *pCommstatus)
|
||||
ZeroMemory(¤tCounters, sizeof(struct serial_icounter_struct));
|
||||
if (ioctl(pComm->fd, TIOCGICOUNT, ¤tCounters) < 0)
|
||||
{
|
||||
CommLog_Print(WLOG_WARN, "TIOCGICOUNT ioctl failed, errno=[%d] %s", errno, strerror(errno));
|
||||
SetLastError(ERROR_IO_DEVICE);
|
||||
CommLog_Print(WLOG_WARN, "TIOCGICOUNT ioctl failed, errno=[%d] %s.", errno, strerror(errno));
|
||||
CommLog_Print(WLOG_WARN, " coult not read counters.");
|
||||
|
||||
LeaveCriticalSection(&pComm->EventsLock);
|
||||
return FALSE;
|
||||
if (pComm->permissive)
|
||||
{
|
||||
/* Errors and events based on counters could not be
|
||||
* detected but keep on.
|
||||
*/
|
||||
ZeroMemory(¤tCounters, sizeof(struct serial_icounter_struct));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_IO_DEVICE);
|
||||
LeaveCriticalSection(&pComm->EventsLock);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* NB: preferred below (currentCounters.* != pComm->counters.*) over (currentCounters.* > pComm->counters.*) thinking the counters can loop */
|
||||
|
@ -48,8 +48,8 @@ struct winpr_thread
|
||||
LPTHREAD_START_ROUTINE lpStartAddress;
|
||||
LPSECURITY_ATTRIBUTES lpThreadAttributes;
|
||||
#if defined(WITH_DEBUG_THREADS)
|
||||
void *create_stack[20];
|
||||
void *exit_stack[20];
|
||||
void *create_stack;
|
||||
void *exit_stack;
|
||||
#endif
|
||||
};
|
||||
typedef struct winpr_thread WINPR_THREAD;
|
||||
|
Loading…
Reference in New Issue
Block a user