From 7a9860ac29d5a12250642242d3001f574126c380 Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Tue, 31 Jan 2023 17:12:52 +0300 Subject: [PATCH 01/10] OpenSSL for android build --- client/cmake/3rdparty.cmake | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/client/cmake/3rdparty.cmake b/client/cmake/3rdparty.cmake index 8d4cf20f..97429d22 100644 --- a/client/cmake/3rdparty.cmake +++ b/client/cmake/3rdparty.cmake @@ -47,6 +47,15 @@ if(NOT LINUX) set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/libssl.a") set(OPENSSL_LIB_SSL_PATH "${OPENSSL_PATH}/lib/ios/iphone/libssl.a") set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_PATH}/lib/ios/iphone/libcrypto.a") + elseif(ANDROID) + foreach(abi IN ITEMS ${QT_ANDROID_ABIS}) + if(CMAKE_ANDROID_ARCH_ABI STREQUAL ${abi}) + set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libcrypto.a") + set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libssl.a") + set(OPENSSL_LIB_SSL_PATH "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libssl.a") + set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libcrypto.a") + endif() + endforeach() endif() file(COPY ${OPENSSL_LIB_SSL_PATH} ${OPENSSL_LIB_CRYPTO_PATH} From 475de5250e40e10565d4328c67f6ca284a039765 Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Tue, 31 Jan 2023 18:02:04 +0300 Subject: [PATCH 02/10] New HEAD of qtkeychain (qt6 support) --- client/3rd/qtkeychain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/3rd/qtkeychain b/client/3rd/qtkeychain index f197cdb9..c6f0b663 160000 --- a/client/3rd/qtkeychain +++ b/client/3rd/qtkeychain @@ -1 +1 @@ -Subproject commit f197cdb935b0cfd9881fdc6860874cb8379d1238 +Subproject commit c6f0b66318f8da6917fb4681103f7303b1836194 From ca30b8b62a24b7de71aca9929a298df406e1f458 Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Wed, 1 Feb 2023 17:16:45 +0300 Subject: [PATCH 03/10] Correct path for openssl static lib --- client/cmake/3rdparty.cmake | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/client/cmake/3rdparty.cmake b/client/cmake/3rdparty.cmake index 97429d22..61ca360e 100644 --- a/client/cmake/3rdparty.cmake +++ b/client/cmake/3rdparty.cmake @@ -47,15 +47,6 @@ if(NOT LINUX) set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/libssl.a") set(OPENSSL_LIB_SSL_PATH "${OPENSSL_PATH}/lib/ios/iphone/libssl.a") set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_PATH}/lib/ios/iphone/libcrypto.a") - elseif(ANDROID) - foreach(abi IN ITEMS ${QT_ANDROID_ABIS}) - if(CMAKE_ANDROID_ARCH_ABI STREQUAL ${abi}) - set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libcrypto.a") - set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libssl.a") - set(OPENSSL_LIB_SSL_PATH "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libssl.a") - set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libcrypto.a") - endif() - endforeach() endif() file(COPY ${OPENSSL_LIB_SSL_PATH} ${OPENSSL_LIB_CRYPTO_PATH} @@ -64,6 +55,21 @@ if(NOT LINUX) DESTINATION ${OPENSSL_ROOT_DIR}) endif() +if(ANDROID) + set(abi ${CMAKE_ANDROID_ARCH_ABI}) + + set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libcrypto.a") + set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libssl.a") + set(OPENSSL_LIB_SSL_PATH "${OPENSSL_PATH}/lib/android/${abi}/libssl.a") + set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_PATH}/lib/android/${abi}/libcrypto.a") + + file(COPY ${OPENSSL_LIB_SSL_PATH} ${OPENSSL_LIB_CRYPTO_PATH} + DESTINATION "${OPENSSL_LIBRARIES_DIR}/android/${abi}") + file(COPY "${OPENSSL_PATH}/include" + DESTINATION ${OPENSSL_ROOT_DIR}) + +endif() + set(OPENSSL_USE_STATIC_LIBS TRUE) find_package(OpenSSL REQUIRED) set(LIBS ${LIBS} From 39433141424714f4bb9397ca6613fb514f415efe Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Fri, 3 Feb 2023 19:07:09 +0300 Subject: [PATCH 04/10] Fix of android build --- client/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 15aba327..ee29d54c 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -10,6 +10,10 @@ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.17) cmake_policy(SET CMP0099 OLD) endif() +if(ANDROID) + add_definitions(-D_BSD_SOURCE) +endif() + set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) From 115be88e5dcc9e8ededc324f8b565ab6d35ebc9d Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Wed, 1 Feb 2023 09:56:55 +0300 Subject: [PATCH 05/10] added check for nullptr in sshclient --- client/core/sshclient.cpp | 5 ++++- client/core/sshclient.h | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/client/core/sshclient.cpp b/client/core/sshclient.cpp index a1a55538..89d6ddcb 100644 --- a/client/core/sshclient.cpp +++ b/client/core/sshclient.cpp @@ -26,7 +26,7 @@ namespace libssh { // qDebug() << "Failed to initialize ssh"; // return ErrorCode::InternalError; // } - if (m_session != NULL) { + if (m_session == nullptr) { m_session = ssh_new(); if (m_session == NULL) { @@ -80,6 +80,7 @@ namespace libssh { ssh_disconnect(m_session); } ssh_free(m_session); + m_session = nullptr; } } @@ -186,6 +187,7 @@ namespace libssh { ssh_channel_close(m_channel); } ssh_channel_free(m_channel); + m_channel = nullptr; } qDebug() << ssh_get_error(m_session); return fromLibsshErrorCode(ssh_get_error_code(m_session)); @@ -285,6 +287,7 @@ namespace libssh { auto errorCode = fromLibsshSftpErrorCode(sftp_get_error(m_sftpSession)); if (m_sftpSession != NULL) { sftp_free(m_sftpSession); + m_sftpSession = nullptr; } qDebug() << ssh_get_error(m_session); return errorCode; diff --git a/client/core/sshclient.h b/client/core/sshclient.h index 06f7a261..912748f0 100644 --- a/client/core/sshclient.h +++ b/client/core/sshclient.h @@ -42,9 +42,9 @@ namespace libssh { ErrorCode fromLibsshErrorCode(int errorCode); ErrorCode fromLibsshSftpErrorCode(int errorCode); - ssh_session m_session {}; - ssh_channel m_channel {}; - sftp_session m_sftpSession {}; + ssh_session m_session = nullptr; + ssh_channel m_channel = nullptr; + sftp_session m_sftpSession = nullptr; signals: void writeToChannelFinished(); void sftpFileCopyFinished(); From 4b0a4aa5d296a1dca31cf0e91a1a8755b4ec9832 Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Thu, 2 Feb 2023 08:36:50 +0300 Subject: [PATCH 06/10] removed unused code --- client/core/sshclient.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/core/sshclient.cpp b/client/core/sshclient.cpp index 89d6ddcb..8c5a9ebc 100644 --- a/client/core/sshclient.cpp +++ b/client/core/sshclient.cpp @@ -29,7 +29,7 @@ namespace libssh { if (m_session == nullptr) { m_session = ssh_new(); - if (m_session == NULL) { + if (m_session == nullptr) { qDebug() << "Failed to create ssh session"; return ErrorCode::InternalError; } @@ -75,7 +75,7 @@ namespace libssh { void Client::disconnectFromHost() { - if (m_session != NULL) { + if (m_session != nullptr) { if (ssh_is_connected(m_session)) { ssh_disconnect(m_session); } @@ -90,7 +90,7 @@ namespace libssh { { m_channel = ssh_channel_new(m_session); - if (m_channel == NULL) { + if (m_channel == nullptr) { return closeChannel(); } @@ -164,7 +164,7 @@ namespace libssh { ErrorCode Client::writeResponse(const QString &data) { - if (m_channel == NULL) { + if (m_channel == nullptr) { qDebug() << "ssh channel not initialized"; return fromLibsshErrorCode(ssh_get_error_code(m_session)); } @@ -179,7 +179,7 @@ namespace libssh { ErrorCode Client::closeChannel() { - if (m_channel != NULL) { + if (m_channel != nullptr) { if (ssh_channel_is_eof(m_channel)) { ssh_channel_send_eof(m_channel); } @@ -197,7 +197,7 @@ namespace libssh { { m_sftpSession = sftp_new(m_session); - if (m_sftpSession == NULL) { + if (m_sftpSession == nullptr) { return closeSftpSession(); } @@ -218,7 +218,7 @@ namespace libssh { file = sftp_open(m_sftpSession, remotePath.c_str(), accessType, S_IRWXU); - if (file == NULL) { + if (file == nullptr) { return closeSftpSession(); } @@ -285,7 +285,7 @@ namespace libssh { ErrorCode Client::closeSftpSession() { auto errorCode = fromLibsshSftpErrorCode(sftp_get_error(m_sftpSession)); - if (m_sftpSession != NULL) { + if (m_sftpSession != nullptr) { sftp_free(m_sftpSession); m_sftpSession = nullptr; } From c1bf0f87998ca95c6590f68805c79f298027bf21 Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Wed, 8 Feb 2023 16:05:15 +0300 Subject: [PATCH 07/10] [WIP] dynamic linking --- client/cmake/3rdparty.cmake | 2 +- client/core/sshclient.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/cmake/3rdparty.cmake b/client/cmake/3rdparty.cmake index 61ca360e..d9351257 100644 --- a/client/cmake/3rdparty.cmake +++ b/client/cmake/3rdparty.cmake @@ -13,7 +13,7 @@ set(LIBS ${LIBS} SortFilterProxyModel) include(${CLIENT_ROOT_DIR}/3rd/qrcodegen/qrcodegen.cmake) include(${CLIENT_ROOT_DIR}/3rd/QSimpleCrypto/QSimpleCrypto.cmake) -set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE) add_subdirectory(${CLIENT_ROOT_DIR}/3rd/zlib) if(WIN32) set(ZLIB_LIBRARY $,zlibd,zlib>) diff --git a/client/core/sshclient.cpp b/client/core/sshclient.cpp index 8c5a9ebc..b72c7715 100644 --- a/client/core/sshclient.cpp +++ b/client/core/sshclient.cpp @@ -12,12 +12,12 @@ namespace libssh { Client::Client(QObject *parent) : QObject(parent) { - ssh_init(); +// ssh_init(); } Client::~Client() { - ssh_finalize(); +// ssh_finalize(); } ErrorCode Client::connectToHost(const ServerCredentials &credentials) From 7c4030aaefc84623fdaa1f5a4a40c27e7b3dc7c0 Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Wed, 8 Feb 2023 19:09:24 +0300 Subject: [PATCH 08/10] fix macos build --- client/cmake/3rdparty.cmake | 2 ++ client/core/sshclient.cpp | 8 ++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/client/cmake/3rdparty.cmake b/client/cmake/3rdparty.cmake index d9351257..7a69581a 100644 --- a/client/cmake/3rdparty.cmake +++ b/client/cmake/3rdparty.cmake @@ -82,6 +82,8 @@ add_subdirectory(${CLIENT_ROOT_DIR}/3rd/libssh) add_compile_definitions(_WINSOCKAPI_) set(LIBS ${LIBS} ssh) +set(WITH_GSSAPI OFF CACHE BOOL "" FORCE) + set(BUILD_WITH_QT6 ON) add_subdirectory(${CLIENT_ROOT_DIR}/3rd/qtkeychain) set(LIBS ${LIBS} qt6keychain) diff --git a/client/core/sshclient.cpp b/client/core/sshclient.cpp index b72c7715..bdb396c3 100644 --- a/client/core/sshclient.cpp +++ b/client/core/sshclient.cpp @@ -11,14 +11,10 @@ namespace libssh { Client::Client(QObject *parent) : QObject(parent) - { -// ssh_init(); - } + { } Client::~Client() - { -// ssh_finalize(); - } + { } ErrorCode Client::connectToHost(const ServerCredentials &credentials) { From cdd527f3acbfe085d36889f155891d13549c1e08 Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Fri, 10 Feb 2023 13:57:15 +0300 Subject: [PATCH 09/10] little fix --- client/cmake/3rdparty.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/cmake/3rdparty.cmake b/client/cmake/3rdparty.cmake index 7a69581a..b35570e6 100644 --- a/client/cmake/3rdparty.cmake +++ b/client/cmake/3rdparty.cmake @@ -77,13 +77,12 @@ set(LIBS ${LIBS} OpenSSL::SSL ) +set(WITH_GSSAPI OFF CACHE BOOL "" FORCE) set(WITH_EXAMPLES OFF CACHE BOOL "" FORCE) add_subdirectory(${CLIENT_ROOT_DIR}/3rd/libssh) add_compile_definitions(_WINSOCKAPI_) set(LIBS ${LIBS} ssh) -set(WITH_GSSAPI OFF CACHE BOOL "" FORCE) - set(BUILD_WITH_QT6 ON) add_subdirectory(${CLIENT_ROOT_DIR}/3rd/qtkeychain) set(LIBS ${LIBS} qt6keychain) From b68c6b680762a77c3621b931a352d6d83ae6bb65 Mon Sep 17 00:00:00 2001 From: Dmitriy Karpushin Date: Mon, 13 Feb 2023 10:42:47 +0300 Subject: [PATCH 10/10] Little refactoring --- client/CMakeLists.txt | 2 ++ client/cmake/3rdparty.cmake | 24 +++++++++--------------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index ee29d54c..e913c370 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -11,6 +11,8 @@ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.17) endif() if(ANDROID) + # For a some reason cmake do not applying GNU_SOURCE/BSD_SOURCE flags on Android platform. + # We have to do this manually for building of libssh. add_definitions(-D_BSD_SOURCE) endif() diff --git a/client/cmake/3rdparty.cmake b/client/cmake/3rdparty.cmake index b35570e6..6549e6e8 100644 --- a/client/cmake/3rdparty.cmake +++ b/client/cmake/3rdparty.cmake @@ -47,6 +47,15 @@ if(NOT LINUX) set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/libssl.a") set(OPENSSL_LIB_SSL_PATH "${OPENSSL_PATH}/lib/ios/iphone/libssl.a") set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_PATH}/lib/ios/iphone/libcrypto.a") + elseif(ANDROID) + set(abi ${CMAKE_ANDROID_ARCH_ABI}) + + set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libcrypto.a") + set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libssl.a") + set(OPENSSL_LIB_SSL_PATH "${OPENSSL_PATH}/lib/android/${abi}/libssl.a") + set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_PATH}/lib/android/${abi}/libcrypto.a") + + set(OPENSSL_LIBRARIES_DIR "${OPENSSL_LIBRARIES_DIR}/android/${abi}") endif() file(COPY ${OPENSSL_LIB_SSL_PATH} ${OPENSSL_LIB_CRYPTO_PATH} @@ -55,21 +64,6 @@ if(NOT LINUX) DESTINATION ${OPENSSL_ROOT_DIR}) endif() -if(ANDROID) - set(abi ${CMAKE_ANDROID_ARCH_ABI}) - - set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libcrypto.a") - set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIBRARIES_DIR}/android/${abi}/libssl.a") - set(OPENSSL_LIB_SSL_PATH "${OPENSSL_PATH}/lib/android/${abi}/libssl.a") - set(OPENSSL_LIB_CRYPTO_PATH "${OPENSSL_PATH}/lib/android/${abi}/libcrypto.a") - - file(COPY ${OPENSSL_LIB_SSL_PATH} ${OPENSSL_LIB_CRYPTO_PATH} - DESTINATION "${OPENSSL_LIBRARIES_DIR}/android/${abi}") - file(COPY "${OPENSSL_PATH}/include" - DESTINATION ${OPENSSL_ROOT_DIR}) - -endif() - set(OPENSSL_USE_STATIC_LIBS TRUE) find_package(OpenSSL REQUIRED) set(LIBS ${LIBS}