Skip to content

Commit fd63c83

Browse files
2dustAnGgIt886
authored andcommitted
Add obfs for Hysteria2
1 parent cfb654a commit fd63c83

File tree

16 files changed

+68
-4
lines changed

16 files changed

+68
-4
lines changed

app/src/main/kotlin/com/neko/v2ray/dto/Hysteria2Bean.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,19 @@ data class Hysteria2Bean(
44
val server: String?,
55
val auth: String?,
66
val lazy: Boolean? = true,
7-
val socks5: Socks5Bean?,
8-
val tls: TlsBean?
7+
val obfs: ObfsBean? = null,
8+
val socks5: Socks5Bean? = null,
9+
val tls: TlsBean? = null,
910
) {
11+
data class ObfsBean(
12+
val type: String?,
13+
val salamander: SalamanderBean?
14+
) {
15+
data class SalamanderBean(
16+
val password: String?,
17+
)
18+
}
19+
1020
data class Socks5Bean(
1121
val listen: String?,
1222
)
@@ -15,4 +25,4 @@ data class Hysteria2Bean(
1525
val sni: String?,
1626
val insecure: Boolean?,
1727
)
18-
}
28+
}

app/src/main/kotlin/com/neko/v2ray/dto/V2rayConfig.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ data class V2rayConfig(
104104
var secretKey: String? = null,
105105
val peers: List<WireGuardBean>? = null,
106106
var reserved: List<Int>? = null,
107-
var mtu: Int? = null
107+
var mtu: Int? = null,
108+
var obfsPassword: String? = null,
108109
) {
109110

110111
data class VnextBean(

app/src/main/kotlin/com/neko/v2ray/ui/ServerActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class ServerActivity : BaseActivity() {
133133
private val et_reserved3: EditText? by lazy { findViewById(R.id.et_reserved3) }
134134
private val et_local_address: EditText? by lazy { findViewById(R.id.et_local_address) }
135135
private val et_local_mtu: EditText? by lazy { findViewById(R.id.et_local_mtu) }
136+
private val et_obfs_password: EditText? by lazy { findViewById(R.id.et_obfs_password) }
136137

137138

138139
override fun onCreate(savedInstanceState: Bundle?) {
@@ -348,7 +349,10 @@ class ServerActivity : BaseActivity() {
348349
} else {
349350
et_local_mtu?.text = Utils.getEditable(outbound.settings?.mtu.toString())
350351
}
352+
} else if (config.configType == EConfigType.HYSTERIA2) {
353+
et_obfs_password?.text = Utils.getEditable(outbound.settings?.obfsPassword)
351354
}
355+
352356
val securityEncryptions =
353357
if (config.configType == EConfigType.SHADOWSOCKS) shadowsocksSecuritys else securitys
354358
val security =
@@ -511,6 +515,9 @@ class ServerActivity : BaseActivity() {
511515
if (config.subscriptionId.isEmpty() && !subscriptionId.isNullOrEmpty()) {
512516
config.subscriptionId = subscriptionId.orEmpty()
513517
}
518+
if (config.configType == EConfigType.HYSTERIA2) {
519+
config.outboundBean?.settings?.obfsPassword = et_obfs_password?.text?.toString()
520+
}
514521

515522
MmkvManager.encodeServerConfig(editGuid, config)
516523
toast(R.string.toast_success)

app/src/main/kotlin/com/neko/v2ray/util/fmt/Hysteria2Fmt.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ object Hysteria2Fmt {
4040
server.port = uri.port
4141
server.password = uri.userInfo
4242
}
43+
if (!queryParam["obfs-password"].isNullOrEmpty()) {
44+
config.outboundBean?.settings?.obfsPassword = queryParam["obfs-password"]
45+
}
46+
4347
return config
4448
}
4549

@@ -59,6 +63,10 @@ object Hysteria2Fmt {
5963
dicQuery["alpn"] = Utils.removeWhiteSpace(tlsSetting.alpn.joinToString(",")).orEmpty()
6064
}
6165
}
66+
if (!outbound.settings?.obfsPassword.isNullOrEmpty()) {
67+
dicQuery["obfs"] = "salamander"
68+
dicQuery["obfs-password"] = outbound.settings?.obfsPassword ?: ""
69+
}
6270

6371
val query = "?" + dicQuery.toList().joinToString(
6472
separator = "&",
@@ -76,9 +84,18 @@ object Hysteria2Fmt {
7684
fun toNativeConfig(config: ServerConfig, socksPort: Int): Hysteria2Bean? {
7785
val outbound = config.getProxyOutbound() ?: return null
7886
val tls = outbound.streamSettings?.tlsSettings
87+
val obfs = if (outbound.settings?.obfsPassword.isNullOrEmpty()) null else
88+
Hysteria2Bean.ObfsBean(
89+
type = "salamander",
90+
salamander = Hysteria2Bean.ObfsBean.SalamanderBean(
91+
password = outbound.settings?.obfsPassword
92+
)
93+
)
94+
7995
val bean = Hysteria2Bean(
8096
server = outbound.getServerAddressAndPort(),
8197
auth = outbound.getPassword(),
98+
obfs = obfs,
8299
socks5 = Hysteria2Bean.Socks5Bean(
83100
listen = "$LOOPBACK:${socksPort}",
84101
),

app/src/main/res/layout/activity_server_hysteria2.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,24 @@
276276
android:layout_marginStart="16.0dip"
277277
android:layout_marginEnd="16.0dip">
278278
<include layout="@layout/layout_address_port" />
279+
<LinearLayout
280+
android:orientation="vertical"
281+
android:layout_width="match_parent"
282+
android:layout_height="wrap_content"
283+
android:layout_marginTop="8.0dip"
284+
android:layout_marginBottom="8.0dip">
285+
<com.google.android.material.textfield.TextInputLayout
286+
android:layout_width="match_parent"
287+
android:layout_height="wrap_content"
288+
android:hint="@string/server_obfs_password"
289+
style="@style/Outline_TextInputLayout">
290+
<com.google.android.material.textfield.TextInputEditText
291+
android:id="@+id/et_obfs_password"
292+
android:layout_width="match_parent"
293+
android:layout_height="wrap_content"
294+
android:inputType="text" />
295+
</com.google.android.material.textfield.TextInputLayout>
296+
</LinearLayout>
279297
<LinearLayout
280298
android:orientation="vertical"
281299
android:layout_width="match_parent"

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">لم يتم العثور على الملف</string>
104104
<string name="msg_remark_is_duplicate">الملاحظات موجودة بالفعل</string>
105105
<string name="toast_action_not_allowed">الإجراء غير مسموح به</string>
106+
<string name="server_obfs_password">كلمة مرور Obfs</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">تحميل</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">فایل پیدا نشد</string>
104104
<string name="msg_remark_is_duplicate">اظهارات قبلاً وجود دارد</string>
105105
<string name="toast_action_not_allowed">اقدام مجاز نیست</string>
106+
<string name="server_obfs_password">رمز عبور Obfs</string>
106107

107108

108109
<!-- PerAppProxyActivity -->

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">File tidak ditemukan</string>
104104
<string name="msg_remark_is_duplicate">Keterangan sudah ada</string>
105105
<string name="toast_action_not_allowed">Tindakan tidak diizinkan</string>
106+
<string name="server_obfs_password">Kata sandi obfs</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">Memuat</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">ファイルが見つかりません</string>
104104
<string name="msg_remark_is_duplicate">コメントはすでに存在します</string>
105105
<string name="toast_action_not_allowed">許可されていないアクション</string>
106+
<string name="server_obfs_password">Obfsパスワード</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">読み込み中</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">File ora ditemokake</string>
104104
<string name="msg_remark_is_duplicate">Deskripsi wis ana</string>
105105
<string name="toast_action_not_allowed">Tindakan ora diidini</string>
106+
<string name="server_obfs_password">Obfs sandi</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">Loading</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">Файл не найден</string>
104104
<string name="msg_remark_is_duplicate">Замечания уже есть</string>
105105
<string name="toast_action_not_allowed">Действие не разрешено</string>
106+
<string name="server_obfs_password">пароль obfs</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">Загрузка</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">File henteu kapendak</string>
104104
<string name="msg_remark_is_duplicate">Inpormasi parantos aya</string>
105105
<string name="toast_action_not_allowed">Aksi teu diwenangkeun</string>
106+
<string name="server_obfs_password">sandi Obfs</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">ngamuat</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">Không tìm thấy tập tin</string>
104104
<string name="msg_remark_is_duplicate">Nhận xét đã tồn tại</string>
105105
<string name="toast_action_not_allowed">Hành động không được phép</string>
106+
<string name="server_obfs_password">Mật khẩu Obfs</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">Đang tải</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">文件未找到</string>
104104
<string name="msg_remark_is_duplicate">备注已经存在</string>
105105
<string name="toast_action_not_allowed">不允许的操作</string>
106+
<string name="server_obfs_password">Obfs 密码</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">加载中</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">文件未找到</string>
104104
<string name="msg_remark_is_duplicate">備註已經存在</string>
105105
<string name="toast_action_not_allowed">不允許執行的操作</string>
106+
<string name="server_obfs_password">OBFS密碼</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">載入中</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
<string name="msg_file_not_found">File not found</string>
104104
<string name="msg_remark_is_duplicate">The remarks already exists</string>
105105
<string name="toast_action_not_allowed">Action not allowed</string>
106+
<string name="server_obfs_password">Obfs password</string>
106107

107108
<!-- PerAppProxyActivity -->
108109
<string name="msg_dialog_progress">Loading</string>

0 commit comments

Comments
 (0)