Compare commits

...

3 Commits

Author SHA1 Message Date
Mr. Lin
c4ce52197c
Merge f52c21c35f into e053b4173e 2024-06-27 07:23:42 +05:30
Hai Zhang
e053b4173e Build: Update dependency 2024-06-26 11:11:36 -07:00
Mr. Lin
f52c21c35f feat: ftp服务器支持自定义被动模式下的数据端口范围 2024-02-25 20:59:06 +08:00
8 changed files with 50 additions and 10 deletions

View File

@ -130,7 +130,7 @@ dependencies {
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'androidx.drawerlayout:drawerlayout:1.2.0'
implementation 'androidx.exifinterface:exifinterface:1.3.7'
implementation 'androidx.fragment:fragment-ktx:1.8.0'
implementation 'androidx.fragment:fragment-ktx:1.8.1'
def androidx_lifecycle_version = '2.8.2'
implementation "androidx.lifecycle:lifecycle-common-java8:$androidx_lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$androidx_lifecycle_version"

View File

@ -7,6 +7,7 @@ package me.zhanghai.android.files.ftpserver
import java8.nio.file.Path
import org.apache.ftpserver.ConnectionConfigFactory
import org.apache.ftpserver.DataConnectionConfigurationFactory
import org.apache.ftpserver.FtpServer
import org.apache.ftpserver.FtpServerFactory
import org.apache.ftpserver.ftplet.FtpException
@ -18,6 +19,7 @@ class FtpServer(
private val username: String,
private val password: String?,
private val port: Int,
private val passiveDataPorts: String?,
private val homeDirectory: Path,
private val writable: Boolean
) {
@ -28,8 +30,15 @@ class FtpServer(
server = FtpServerFactory()
.apply {
val listener = ListenerFactory()
.apply { port = this@FtpServer.port }
.createListener()
.apply {
port = this@FtpServer.port
passiveDataPorts?.let {
dataConnectionConfiguration = DataConnectionConfigurationFactory()
.apply {
passivePorts = it
}.createDataConnectionConfiguration()
}
}.createListener()
addListener("default", listener)
val user = BaseUser().apply {
name = username

View File

@ -102,9 +102,12 @@ class FtpServerService : Service() {
password = Settings.FTP_SERVER_PASSWORD.valueCompat
}
val port = Settings.FTP_SERVER_PORT.valueCompat
val passiveDataPort: String? = if (Settings.FTP_SERVER_CUSTOM_DATA_PORT.valueCompat) {
Settings.FTP_SERVER_DATA_PORT.valueCompat
} else null
val homeDirectory = Settings.FTP_SERVER_HOME_DIRECTORY.valueCompat
val writable = Settings.FTP_SERVER_WRITABLE.valueCompat
val server = FtpServer(username, password, port, homeDirectory, writable)
val server = FtpServer(username, password, port, passiveDataPort, homeDirectory, writable)
this.server = server
try {
server.start()
@ -153,9 +156,6 @@ class FtpServerService : Service() {
}
enum class State {
STARTING,
RUNNING,
STOPPING,
STOPPED
STARTING, RUNNING, STOPPING, STOPPED
}
}

View File

@ -87,6 +87,17 @@ object Settings {
R.string.pref_key_ftp_server_port, R.integer.pref_default_value_ftp_server_port
)
val FTP_SERVER_CUSTOM_DATA_PORT: SettingLiveData<Boolean> =
BooleanSettingLiveData(
R.string.pref_key_ftp_server_custom_data_port,
R.bool.pref_default_value_ftp_server_custom_data_port
)
val FTP_SERVER_DATA_PORT: SettingLiveData<String> =
StringSettingLiveData(
R.string.pref_key_ftp_server_data_port, R.string.pref_default_value_ftp_server_data_port
)
val FTP_SERVER_HOME_DIRECTORY: SettingLiveData<Path> =
ParcelValueSettingLiveData(
R.string.pref_key_ftp_server_home_directory,

View File

@ -581,6 +581,8 @@
<string name="ftp_server_username_title">用户名</string>
<string name="ftp_server_password_title">密码</string>
<string name="ftp_server_port_title">端口</string>
<string name="ftp_server_custom_data_port_title">自定义被动模式数据端口范围</string>
<string name="ftp_server_data_port_title">数据端口范围</string>
<string name="ftp_server_home_directory_title">根文件夹</string>
<string name="ftp_server_writable_title">允许写入</string>

View File

@ -29,6 +29,10 @@
<string name="pref_key_ftp_server_password">key_ftp_server_password</string>
<string name="pref_key_ftp_server_port">key_ftp_server_port</string>
<integer name="pref_default_value_ftp_server_port">2121</integer>
<string name="pref_key_ftp_server_custom_data_port">key_ftp_server_custom_data_port</string>
<bool name="pref_default_value_ftp_server_custom_data_port">false</bool>
<string name="pref_key_ftp_server_data_port">key_ftp_server_data_port</string>
<string name="pref_default_value_ftp_server_data_port">1024-65535</string>
<string name="pref_key_ftp_server_home_directory">key_ftp_server_home_directory</string>
<string name="pref_key_ftp_server_writable">key_ftp_server_writable</string>
<bool name="pref_default_value_ftp_server_writable">true</bool>

View File

@ -727,6 +727,8 @@
<string name="ftp_server_username_title">Username</string>
<string name="ftp_server_password_title">Password</string>
<string name="ftp_server_port_title">Port</string>
<string name="ftp_server_custom_data_port_title">Using custom passive data ports</string>
<string name="ftp_server_data_port_title">Data Port Range</string>
<string name="ftp_server_home_directory_title">Root folder</string>
<string name="ftp_server_writable_title">Allow writing</string>
<string name="ftp_server_notification_title" translatable="false">@string/ftp_server_title</string>

View File

@ -5,7 +5,7 @@
~ All Rights Reserved.
-->
<PreferenceScreen
<androidx.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
@ -51,6 +51,18 @@
android:defaultValue="@integer/pref_default_value_ftp_server_port"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
android:key="@string/pref_key_ftp_server_custom_data_port"
android:title="@string/ftp_server_custom_data_port_title"
android:defaultValue="@bool/pref_default_value_ftp_server_custom_data_port" />
<me.zhanghai.android.files.settings.DefaultIfEmptyEditTextPreference
android:key="@string/pref_key_ftp_server_data_port"
android:title="@string/ftp_server_data_port_title"
android:defaultValue="@string/pref_default_value_ftp_server_data_port"
android:dependency="@string/pref_key_ftp_server_custom_data_port"
app:useSimpleSummaryProvider="true" />
<me.zhanghai.android.files.ftpserver.FtpServerHomeDirectoryPreference
android:key="@string/pref_key_ftp_server_home_directory"
android:title="@string/ftp_server_home_directory_title"
@ -61,4 +73,4 @@
android:title="@string/ftp_server_writable_title"
android:defaultValue="@bool/pref_default_value_ftp_server_writable" />
</PreferenceCategory>
</PreferenceScreen>
</androidx.preference.PreferenceScreen>