Skip to content

Commit f52c21c

Browse files
committed
feat: ftp服务器支持自定义被动模式下的数据端口范围
1 parent b204e5c commit f52c21c

File tree

7 files changed

+49
-9
lines changed

7 files changed

+49
-9
lines changed

app/src/main/java/me/zhanghai/android/files/ftpserver/FtpServer.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package me.zhanghai.android.files.ftpserver
77

88
import java8.nio.file.Path
99
import org.apache.ftpserver.ConnectionConfigFactory
10+
import org.apache.ftpserver.DataConnectionConfigurationFactory
1011
import org.apache.ftpserver.FtpServer
1112
import org.apache.ftpserver.FtpServerFactory
1213
import org.apache.ftpserver.ftplet.FtpException
@@ -18,6 +19,7 @@ class FtpServer(
1819
private val username: String,
1920
private val password: String?,
2021
private val port: Int,
22+
private val passiveDataPorts: String?,
2123
private val homeDirectory: Path,
2224
private val writable: Boolean
2325
) {
@@ -28,8 +30,15 @@ class FtpServer(
2830
server = FtpServerFactory()
2931
.apply {
3032
val listener = ListenerFactory()
31-
.apply { port = this@FtpServer.port }
32-
.createListener()
33+
.apply {
34+
port = this@FtpServer.port
35+
passiveDataPorts?.let {
36+
dataConnectionConfiguration = DataConnectionConfigurationFactory()
37+
.apply {
38+
passivePorts = it
39+
}.createDataConnectionConfiguration()
40+
}
41+
}.createListener()
3342
addListener("default", listener)
3443
val user = BaseUser().apply {
3544
name = username

app/src/main/java/me/zhanghai/android/files/ftpserver/FtpServerService.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,12 @@ class FtpServerService : Service() {
102102
password = Settings.FTP_SERVER_PASSWORD.valueCompat
103103
}
104104
val port = Settings.FTP_SERVER_PORT.valueCompat
105+
val passiveDataPort: String? = if (Settings.FTP_SERVER_CUSTOM_DATA_PORT.valueCompat) {
106+
Settings.FTP_SERVER_DATA_PORT.valueCompat
107+
} else null
105108
val homeDirectory = Settings.FTP_SERVER_HOME_DIRECTORY.valueCompat
106109
val writable = Settings.FTP_SERVER_WRITABLE.valueCompat
107-
val server = FtpServer(username, password, port, homeDirectory, writable)
110+
val server = FtpServer(username, password, port, passiveDataPort, homeDirectory, writable)
108111
this.server = server
109112
try {
110113
server.start()
@@ -153,9 +156,6 @@ class FtpServerService : Service() {
153156
}
154157

155158
enum class State {
156-
STARTING,
157-
RUNNING,
158-
STOPPING,
159-
STOPPED
159+
STARTING, RUNNING, STOPPING, STOPPED
160160
}
161161
}

app/src/main/java/me/zhanghai/android/files/settings/Settings.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@ object Settings {
8787
R.string.pref_key_ftp_server_port, R.integer.pref_default_value_ftp_server_port
8888
)
8989

90+
val FTP_SERVER_CUSTOM_DATA_PORT: SettingLiveData<Boolean> =
91+
BooleanSettingLiveData(
92+
R.string.pref_key_ftp_server_custom_data_port,
93+
R.bool.pref_default_value_ftp_server_custom_data_port
94+
)
95+
96+
val FTP_SERVER_DATA_PORT: SettingLiveData<String> =
97+
StringSettingLiveData(
98+
R.string.pref_key_ftp_server_data_port, R.string.pref_default_value_ftp_server_data_port
99+
)
100+
90101
val FTP_SERVER_HOME_DIRECTORY: SettingLiveData<Path> =
91102
ParcelValueSettingLiveData(
92103
R.string.pref_key_ftp_server_home_directory,

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,8 @@
542542
<string name="ftp_server_username_title">用户名</string>
543543
<string name="ftp_server_password_title">密码</string>
544544
<string name="ftp_server_port_title">端口</string>
545+
<string name="ftp_server_custom_data_port_title">自定义被动模式数据端口范围</string>
546+
<string name="ftp_server_data_port_title">数据端口范围</string>
545547
<string name="ftp_server_home_directory_title">根文件夹</string>
546548
<string name="ftp_server_writable_title">允许写入</string>
547549

app/src/main/res/values/donottranslate_prefs.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
<string name="pref_key_ftp_server_password">key_ftp_server_password</string>
3030
<string name="pref_key_ftp_server_port">key_ftp_server_port</string>
3131
<integer name="pref_default_value_ftp_server_port">2121</integer>
32+
<string name="pref_key_ftp_server_custom_data_port">key_ftp_server_custom_data_port</string>
33+
<bool name="pref_default_value_ftp_server_custom_data_port">false</bool>
34+
<string name="pref_key_ftp_server_data_port">key_ftp_server_data_port</string>
35+
<string name="pref_default_value_ftp_server_data_port">1024-65535</string>
3236
<string name="pref_key_ftp_server_home_directory">key_ftp_server_home_directory</string>
3337
<string name="pref_key_ftp_server_writable">key_ftp_server_writable</string>
3438
<bool name="pref_default_value_ftp_server_writable">true</bool>

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,8 @@
677677
<string name="ftp_server_username_title">Username</string>
678678
<string name="ftp_server_password_title">Password</string>
679679
<string name="ftp_server_port_title">Port</string>
680+
<string name="ftp_server_custom_data_port_title">Using custom passive data ports</string>
681+
<string name="ftp_server_data_port_title">Data Port Range</string>
680682
<string name="ftp_server_home_directory_title">Root folder</string>
681683
<string name="ftp_server_writable_title">Allow writing</string>
682684
<string name="ftp_server_notification_title" translatable="false">@string/ftp_server_title</string>

app/src/main/res/xml/ftp_server.xml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
~ All Rights Reserved.
66
-->
77

8-
<PreferenceScreen
8+
<androidx.preference.PreferenceScreen
99
xmlns:android="http://schemas.android.com/apk/res/android"
1010
xmlns:app="http://schemas.android.com/apk/res-auto">
1111

@@ -51,6 +51,18 @@
5151
android:defaultValue="@integer/pref_default_value_ftp_server_port"
5252
app:useSimpleSummaryProvider="true" />
5353

54+
<SwitchPreferenceCompat
55+
android:key="@string/pref_key_ftp_server_custom_data_port"
56+
android:title="@string/ftp_server_custom_data_port_title"
57+
android:defaultValue="@bool/pref_default_value_ftp_server_custom_data_port" />
58+
59+
<me.zhanghai.android.files.settings.DefaultIfEmptyEditTextPreference
60+
android:key="@string/pref_key_ftp_server_data_port"
61+
android:title="@string/ftp_server_data_port_title"
62+
android:defaultValue="@string/pref_default_value_ftp_server_data_port"
63+
android:dependency="@string/pref_key_ftp_server_custom_data_port"
64+
app:useSimpleSummaryProvider="true" />
65+
5466
<me.zhanghai.android.files.ftpserver.FtpServerHomeDirectoryPreference
5567
android:key="@string/pref_key_ftp_server_home_directory"
5668
android:title="@string/ftp_server_home_directory_title"
@@ -61,4 +73,4 @@
6173
android:title="@string/ftp_server_writable_title"
6274
android:defaultValue="@bool/pref_default_value_ftp_server_writable" />
6375
</PreferenceCategory>
64-
</PreferenceScreen>
76+
</androidx.preference.PreferenceScreen>

0 commit comments

Comments
 (0)