From cd8237d773eeb083d89af6ec34baf7aa1dd4751b Mon Sep 17 00:00:00 2001 From: ShellWen Chen Date: Sat, 15 Jun 2024 02:41:36 +0800 Subject: [PATCH] fix: use Apache MINA as IO Service of SSHD Core to fix issues when Android SDK < 26 (Android 8.0) NIO2 is the default IO Service of SSHD Core. But when Android SDK < 26, NIO2 doesn't exists. So we have to use Apache MINA as IO Service to fix this issue. --- build.gradle.kts | 1 + gradle/libs.versions.toml | 1 + src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.kt | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index ad09e054..fc2d5465 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -295,6 +295,7 @@ dependencies { implementation(libs.apache.sshd.core) implementation(libs.apache.sshd.sftp) implementation(libs.apache.sshd.scp) + implementation(libs.apache.sshd.mina) implementation(libs.apache.mina.core) //For some reason, makes sshd-core:0.14.0 work without NIO, which isn't available until Android 8 (api 26) //implementation("com.github.bright:slf4android:0.1.6") { transitive = true } // For org.apache.sshd debugging diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b4f3cfcc..7ec59b17 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -76,6 +76,7 @@ apache-mina-core = { module = "org.apache.mina:mina-core", version.ref = "minaCo apache-sshd-core = { module = "org.apache.sshd:sshd-core", version.ref = "sshdCore" } apache-sshd-sftp = { module = "org.apache.sshd:sshd-sftp", version.ref = "sshdCore" } apache-sshd-scp = { module = "org.apache.sshd:sshd-scp", version.ref = "sshdCore" } +apache-sshd-mina = { module = "org.apache.sshd:sshd-mina", version.ref = "sshdCore" } mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockitoCore" } reactive-streams = { module = "org.reactivestreams:reactive-streams", version.ref = "reactiveStreams" } rxjava = { module = "io.reactivex.rxjava2:rxjava", version.ref = "rxjava" } diff --git a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.kt b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.kt index 9f922962..0a19acc4 100644 --- a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.kt +++ b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.kt @@ -189,6 +189,10 @@ internal class SimpleSftpServer { init { System.setProperty(SECURITY_PROVIDER_REGISTRARS, "") // disable BouncyCastle + System.setProperty( + "org.apache.sshd.common.io.IoServiceFactoryFactory", + "org.apache.sshd.mina.MinaServiceFactoryFactory" + ) // Use MINA instead NIO2 due to compatibility issues PathUtils.setUserHomeFolderResolver { Path.of("/") } // TODO: Remove it when SSHD Core is fixed } }