From a097966eeee97da0ba819561d9b376ffb0759a33 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Fri, 8 May 2026 00:38:17 +0800 Subject: [PATCH 01/32] remove already applied patch file for go1.26.3 --- ...remove_64bits_syscall_on_32bit_linux.patch | 56 ------------------- 1 file changed, 56 deletions(-) delete mode 100644 .github/patch/remove_64bits_syscall_on_32bit_linux.patch diff --git a/.github/patch/remove_64bits_syscall_on_32bit_linux.patch b/.github/patch/remove_64bits_syscall_on_32bit_linux.patch deleted file mode 100644 index bc0b9a0275..0000000000 --- a/.github/patch/remove_64bits_syscall_on_32bit_linux.patch +++ /dev/null @@ -1,56 +0,0 @@ -Subject: [PATCH] remove 64bits syscall on 32bit linux ---- -Index: src/runtime/os_linux32.go -IDEA additional info: -Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP -<+>UTF-8 -=================================================================== -diff --git a/src/runtime/os_linux32.go b/src/runtime/os_linux32.go ---- a/src/runtime/os_linux32.go (revision 030384681641464bf71ed16500075c458363510f) -+++ b/src/runtime/os_linux32.go (date 1771666707318) -@@ -21,14 +21,14 @@ - - //go:nosplit - func futex(addr unsafe.Pointer, op int32, val uint32, ts *timespec, addr2 unsafe.Pointer, val3 uint32) int32 { -- if !isFutexTime32bitOnly.Load() { -- ret := futex_time64(addr, op, val, ts, addr2, val3) -- // futex_time64 is only supported on Linux 5.0+ -- if ret != -_ENOSYS { -- return ret -- } -- isFutexTime32bitOnly.Store(true) -- } -+ //if !isFutexTime32bitOnly.Load() { -+ // ret := futex_time64(addr, op, val, ts, addr2, val3) -+ // // futex_time64 is only supported on Linux 5.0+ -+ // if ret != -_ENOSYS { -+ // return ret -+ // } -+ // isFutexTime32bitOnly.Store(true) -+ //} - // Downgrade ts. - var ts32 timespec32 - var pts32 *timespec32 -@@ -49,14 +49,14 @@ - - //go:nosplit - func timer_settime(timerid int32, flags int32, new, old *itimerspec) int32 { -- if !isSetTime32bitOnly.Load() { -- ret := timer_settime64(timerid, flags, new, old) -- // timer_settime64 is only supported on Linux 5.0+ -- if ret != -_ENOSYS { -- return ret -- } -- isSetTime32bitOnly.Store(true) -- } -+ //if !isSetTime32bitOnly.Load() { -+ // ret := timer_settime64(timerid, flags, new, old) -+ // // timer_settime64 is only supported on Linux 5.0+ -+ // if ret != -_ENOSYS { -+ // return ret -+ // } -+ // isSetTime32bitOnly.Store(true) -+ //} - - var newts, oldts itimerspec32 - var new32, old32 *itimerspec32 From 1d42dfa477dde49842f2f58f8ce305e860a4cc61 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Sat, 9 May 2026 00:07:33 +0800 Subject: [PATCH 02/32] disable futex_time64 again --- ...remove_64bits_syscall_on_32bit_linux.patch | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/patch/remove_64bits_syscall_on_32bit_linux.patch diff --git a/.github/patch/remove_64bits_syscall_on_32bit_linux.patch b/.github/patch/remove_64bits_syscall_on_32bit_linux.patch new file mode 100644 index 0000000000..7c9c7c84b9 --- /dev/null +++ b/.github/patch/remove_64bits_syscall_on_32bit_linux.patch @@ -0,0 +1,33 @@ +From bef1938b64a444911de119db613e60b9078ddd81 Mon Sep 17 00:00:00 2001 +From: wwqgtxx +Date: Sat, 9 May 2026 00:05:48 +0800 +Subject: [PATCH] Disable futex_time64 again + +--- + src/runtime/os_linux32.go | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/src/runtime/os_linux32.go b/src/runtime/os_linux32.go +index 1ee1cdcaf90051..4aa42132d73739 100644 +--- a/src/runtime/os_linux32.go ++++ b/src/runtime/os_linux32.go +@@ -24,9 +24,6 @@ var use64bitsTimeOn32bits bool + + //go:nosplit + func futex(addr unsafe.Pointer, op int32, val uint32, ts *timespec, addr2 unsafe.Pointer, val3 uint32) int32 { +- if use64bitsTimeOn32bits { +- return futex_time64(addr, op, val, ts, addr2, val3) +- } + // Downgrade ts. + var ts32 timespec32 + var pts32 *timespec32 +@@ -45,9 +42,6 @@ func timer_settime64(timerid int32, flags int32, new, old *itimerspec) int32 + + //go:nosplit + func timer_settime(timerid int32, flags int32, new, old *itimerspec) int32 { +- if use64bitsTimeOn32bits { +- return timer_settime64(timerid, flags, new, old) +- } + + var newts, oldts itimerspec32 + var new32, old32 *itimerspec32 \ No newline at end of file From 63a68d43f2372f82fb8fc86390116882a5dc3356 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Sat, 9 May 2026 16:13:13 +0800 Subject: [PATCH 03/32] Defer shortcut setup to MainActivity (#215) (#728) --- .../github/kr328/clash/AppSettingsActivity.kt | 5 -- .../com/github/kr328/clash/MainActivity.kt | 62 +++++++++++++++++-- .../com/github/kr328/clash/MainApplication.kt | 61 ------------------ 3 files changed, 58 insertions(+), 70 deletions(-) diff --git a/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt b/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt index 7348642d7b..2b4ed2cde1 100644 --- a/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt @@ -2,7 +2,6 @@ package com.github.kr328.clash import android.content.ComponentName import android.content.pm.PackageManager -import androidx.core.content.pm.ShortcutManagerCompat import com.github.kr328.clash.common.util.componentName import com.github.kr328.clash.design.AppSettingsDesign import com.github.kr328.clash.design.model.Behavior @@ -75,9 +74,5 @@ class AppSettingsActivity : BaseActivity(), Behavior { newState, PackageManager.DONT_KILL_APP ) - if (hide) { - // Prevent launcher activity not found. - ShortcutManagerCompat.removeAllDynamicShortcuts(this) - } } } diff --git a/app/src/main/java/com/github/kr328/clash/MainActivity.kt b/app/src/main/java/com/github/kr328/clash/MainActivity.kt index 62f2a1aa7c..5c616528f6 100644 --- a/app/src/main/java/com/github/kr328/clash/MainActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/MainActivity.kt @@ -1,5 +1,6 @@ package com.github.kr328.clash +import android.content.Intent import android.content.pm.PackageManager import android.os.Build import android.os.Bundle @@ -8,6 +9,10 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts.RequestPermission import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import androidx.core.content.pm.ShortcutInfoCompat +import androidx.core.content.pm.ShortcutManagerCompat +import androidx.core.graphics.drawable.IconCompat +import com.github.kr328.clash.common.constants.Intents import com.github.kr328.clash.common.util.intent import com.github.kr328.clash.common.util.ticker import com.github.kr328.clash.design.MainDesign @@ -22,7 +27,7 @@ import kotlinx.coroutines.isActive import kotlinx.coroutines.selects.select import kotlinx.coroutines.withContext import java.util.concurrent.TimeUnit -import com.github.kr328.clash.design.R +import com.github.kr328.clash.design.R as DesignR class MainActivity : BaseActivity() { override suspend fun main() { @@ -111,8 +116,8 @@ class MainActivity : BaseActivity() { val active = withProfile { queryActive() } if (active == null || !active.imported) { - showToast(R.string.no_profile_selected, ToastDuration.Long) { - setAction(R.string.profiles) { + showToast(DesignR.string.no_profile_selected, ToastDuration.Long) { + setAction(DesignR.string.profiles) { startActivity(ProfilesActivity::class.intent) } } @@ -133,7 +138,7 @@ class MainActivity : BaseActivity() { startClashService() } } catch (e: Exception) { - design?.showToast(R.string.unable_to_start_vpn, ToastDuration.Long) + design?.showToast(DesignR.string.unable_to_start_vpn, ToastDuration.Long) } } @@ -157,5 +162,54 @@ class MainActivity : BaseActivity() { requestPermissionLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS) } } + setupShortcuts() + } + + private fun setupShortcuts() { + // Skip dynamic shortcut setup when the app icon is hidden. + if (uiStore.hideAppIcon) return + + val icon = IconCompat.createWithResource(this, R.mipmap.ic_launcher) + val flags = Intent.FLAG_ACTIVITY_NEW_TASK or + Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or + Intent.FLAG_ACTIVITY_NO_ANIMATION + + val toggle = ShortcutInfoCompat.Builder(this, "toggle_clash") + .setShortLabel(getString(DesignR.string.shortcut_toggle_short)) + .setLongLabel(getString(DesignR.string.shortcut_toggle_long)) + .setIcon(icon) + .setIntent( + Intent(Intents.ACTION_TOGGLE_CLASH) + .setClassName(this, ExternalControlActivity::class.java.name) + .addFlags(flags) + ) + .setRank(0) + .build() + + val start = ShortcutInfoCompat.Builder(this, "start_clash") + .setShortLabel(getString(DesignR.string.shortcut_start_short)) + .setLongLabel(getString(DesignR.string.shortcut_start_long)) + .setIcon(icon) + .setIntent( + Intent(Intents.ACTION_START_CLASH) + .setClassName(this, ExternalControlActivity::class.java.name) + .addFlags(flags) + ) + .setRank(1) + .build() + + val stop = ShortcutInfoCompat.Builder(this, "stop_clash") + .setShortLabel(getString(DesignR.string.shortcut_stop_short)) + .setLongLabel(getString(DesignR.string.shortcut_stop_long)) + .setIcon(icon) + .setIntent( + Intent(Intents.ACTION_STOP_CLASH) + .setClassName(this, ExternalControlActivity::class.java.name) + .addFlags(flags) + ) + .setRank(2) + .build() + + ShortcutManagerCompat.setDynamicShortcuts(this, listOf(toggle, start, stop)) } } diff --git a/app/src/main/java/com/github/kr328/clash/MainApplication.kt b/app/src/main/java/com/github/kr328/clash/MainApplication.kt index 60c890efa4..93f9b74b8b 100644 --- a/app/src/main/java/com/github/kr328/clash/MainApplication.kt +++ b/app/src/main/java/com/github/kr328/clash/MainApplication.kt @@ -2,26 +2,17 @@ package com.github.kr328.clash import android.app.Application import android.content.Context -import android.content.Intent -import androidx.core.content.pm.ShortcutInfoCompat -import androidx.core.content.pm.ShortcutManagerCompat -import androidx.core.graphics.drawable.IconCompat import com.github.kr328.clash.common.Global import com.github.kr328.clash.common.compat.currentProcessName -import com.github.kr328.clash.common.constants.Intents import com.github.kr328.clash.common.log.Log -import com.github.kr328.clash.design.store.UiStore import com.github.kr328.clash.remote.Remote import com.github.kr328.clash.service.util.sendServiceRecreated import com.github.kr328.clash.util.clashDir import java.io.File import java.io.FileOutputStream -import com.github.kr328.clash.design.R as DesignR - @Suppress("unused") class MainApplication : Application() { - private val uiStore by lazy(LazyThreadSafetyMode.NONE) { UiStore(this) } override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) @@ -39,63 +30,11 @@ class MainApplication : Application() { if (processName == packageName) { Remote.launch() - setupShortcuts() } else { sendServiceRecreated() } } - private fun setupShortcuts() { - if (uiStore.hideAppIcon) { - // Prevent launcher activity not found. - ShortcutManagerCompat.removeAllDynamicShortcuts(this) - return - } - - val icon = IconCompat.createWithResource(this, R.mipmap.ic_launcher) - val flags = Intent.FLAG_ACTIVITY_NEW_TASK or - Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or - Intent.FLAG_ACTIVITY_NO_ANIMATION - - val toggle = ShortcutInfoCompat.Builder(this, "toggle_clash") - .setShortLabel(getString(DesignR.string.shortcut_toggle_short)) - .setLongLabel(getString(DesignR.string.shortcut_toggle_long)) - .setIcon(icon) - .setIntent( - Intent(Intents.ACTION_TOGGLE_CLASH) - .setClassName(this, ExternalControlActivity::class.java.name) - .addFlags(flags) - ) - .setRank(0) - .build() - - val start = ShortcutInfoCompat.Builder(this, "start_clash") - .setShortLabel(getString(DesignR.string.shortcut_start_short)) - .setLongLabel(getString(DesignR.string.shortcut_start_long)) - .setIcon(icon) - .setIntent( - Intent(Intents.ACTION_START_CLASH) - .setClassName(this, ExternalControlActivity::class.java.name) - .addFlags(flags) - ) - .setRank(1) - .build() - - val stop = ShortcutInfoCompat.Builder(this, "stop_clash") - .setShortLabel(getString(DesignR.string.shortcut_stop_short)) - .setLongLabel(getString(DesignR.string.shortcut_stop_long)) - .setIcon(icon) - .setIntent( - Intent(Intents.ACTION_STOP_CLASH) - .setClassName(this, ExternalControlActivity::class.java.name) - .addFlags(flags) - ) - .setRank(2) - .build() - - ShortcutManagerCompat.setDynamicShortcuts(this, listOf(toggle, start, stop)) - } - private fun extractGeoFiles() { clashDir.mkdirs() From d7c16ecd428105d2edcd84b216511ae722c007bb Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Sat, 9 May 2026 16:54:26 +0800 Subject: [PATCH 04/32] Replace shortcut icons (#729) --- .../main/java/com/github/kr328/clash/MainActivity.kt | 7 +++---- app/src/main/res/drawable/ic_toggle_all.xml | 9 +++++++++ app/src/main/res/drawable/ic_toggle_off.xml | 11 +++++++++++ app/src/main/res/drawable/ic_toggle_on.xml | 11 +++++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/drawable/ic_toggle_all.xml create mode 100644 app/src/main/res/drawable/ic_toggle_off.xml create mode 100644 app/src/main/res/drawable/ic_toggle_on.xml diff --git a/app/src/main/java/com/github/kr328/clash/MainActivity.kt b/app/src/main/java/com/github/kr328/clash/MainActivity.kt index 5c616528f6..ea8254cb40 100644 --- a/app/src/main/java/com/github/kr328/clash/MainActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/MainActivity.kt @@ -169,7 +169,6 @@ class MainActivity : BaseActivity() { // Skip dynamic shortcut setup when the app icon is hidden. if (uiStore.hideAppIcon) return - val icon = IconCompat.createWithResource(this, R.mipmap.ic_launcher) val flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or Intent.FLAG_ACTIVITY_NO_ANIMATION @@ -177,7 +176,7 @@ class MainActivity : BaseActivity() { val toggle = ShortcutInfoCompat.Builder(this, "toggle_clash") .setShortLabel(getString(DesignR.string.shortcut_toggle_short)) .setLongLabel(getString(DesignR.string.shortcut_toggle_long)) - .setIcon(icon) + .setIcon(IconCompat.createWithResource(this, R.drawable.ic_toggle_all)) .setIntent( Intent(Intents.ACTION_TOGGLE_CLASH) .setClassName(this, ExternalControlActivity::class.java.name) @@ -189,7 +188,7 @@ class MainActivity : BaseActivity() { val start = ShortcutInfoCompat.Builder(this, "start_clash") .setShortLabel(getString(DesignR.string.shortcut_start_short)) .setLongLabel(getString(DesignR.string.shortcut_start_long)) - .setIcon(icon) + .setIcon(IconCompat.createWithResource(this, R.drawable.ic_toggle_on)) .setIntent( Intent(Intents.ACTION_START_CLASH) .setClassName(this, ExternalControlActivity::class.java.name) @@ -201,7 +200,7 @@ class MainActivity : BaseActivity() { val stop = ShortcutInfoCompat.Builder(this, "stop_clash") .setShortLabel(getString(DesignR.string.shortcut_stop_short)) .setLongLabel(getString(DesignR.string.shortcut_stop_long)) - .setIcon(icon) + .setIcon(IconCompat.createWithResource(this, R.drawable.ic_toggle_off)) .setIntent( Intent(Intents.ACTION_STOP_CLASH) .setClassName(this, ExternalControlActivity::class.java.name) diff --git a/app/src/main/res/drawable/ic_toggle_all.xml b/app/src/main/res/drawable/ic_toggle_all.xml new file mode 100644 index 0000000000..29ce98e9c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_toggle_all.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_toggle_off.xml b/app/src/main/res/drawable/ic_toggle_off.xml new file mode 100644 index 0000000000..6bbc6d155c --- /dev/null +++ b/app/src/main/res/drawable/ic_toggle_off.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_toggle_on.xml b/app/src/main/res/drawable/ic_toggle_on.xml new file mode 100644 index 0000000000..1162f274a5 --- /dev/null +++ b/app/src/main/res/drawable/ic_toggle_on.xml @@ -0,0 +1,11 @@ + + + + + From a616468c1196ed90103bbf14b0f119b1b99e61d9 Mon Sep 17 00:00:00 2001 From: Alexander <46811887+AlexFozor@users.noreply.github.com> Date: Tue, 12 May 2026 03:17:26 +0200 Subject: [PATCH 05/32] Fix parse profile-update-interval http header (#732) Co-authored-by: AlexFozor --- .../kr328/clash/ExternalControlActivity.kt | 6 +++++- .../kr328/clash/service/ProfileProcessor.kt | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt b/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt index 6efa5060e6..fc501c0db9 100644 --- a/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt @@ -42,8 +42,12 @@ class ExternalControlActivity : Activity(), CoroutineScope by MainScope() { } val name = uri.getQueryParameter("name") ?: getString(R.string.new_profile) + val parsedInterval = uri.getQueryParameter("update-interval")?.toLongOrNull() ?: 0L + val updateInterval = if (parsedInterval > 0) parsedInterval.coerceAtLeast(15L) else 0L + val intervalMs = java.util.concurrent.TimeUnit.MINUTES.toMillis(updateInterval) + create(type, name).also { - patch(it, name, url, 0) + patch(it, name, url, intervalMs) } } startActivity(PropertiesActivity::class.intent.setUUID(uuid)) diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt index a3261a26cb..e3dd0d5a13 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt @@ -73,6 +73,7 @@ object ProfileProcessor { var download: Long = 0 var total: Long = 0 var expire: Long = 0 + var updateInterval: Long = snapshot.interval if (snapshot?.type == Profile.Type.Url) { if (snapshot.source.startsWith("https://", true)) { val client = OkHttpClient() @@ -103,6 +104,19 @@ object ProfileProcessor { } } } + + val updateIntervalHeader = response.headers["profile-update-interval"] + if (response.isSuccessful && updateIntervalHeader != null) { + val intervalHours = updateIntervalHeader.toLongOrNull() + if (intervalHours != null) { + updateInterval = if (intervalHours > 0) { + java.util.concurrent.TimeUnit.HOURS.toMillis(intervalHours) + .coerceAtLeast(java.util.concurrent.TimeUnit.MINUTES.toMillis(15)) + } else { + 0L + } + } + } } } val new = Imported( @@ -110,7 +124,7 @@ object ProfileProcessor { snapshot.name, snapshot.type, snapshot.source, - snapshot.interval, + updateInterval, upload, download, total, From d1ac459e66fb950df2aa9f931f1a9291652781cc Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Tue, 12 May 2026 16:10:51 +0800 Subject: [PATCH 06/32] Add supported languages to system settings (#733) https://developer.android.com/guide/topics/resources/app-languages#use-localeconfig --- app/src/main/AndroidManifest.xml | 3 ++- app/src/main/res/xml/locales_config.xml | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/xml/locales_config.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 691af6a039..c29133e50c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,6 +24,7 @@ android:fullBackupContent="@xml/full_backup_content" android:icon="@mipmap/ic_launcher" android:label="@string/application_name" + android:localeConfig="@xml/locales_config" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" @@ -218,4 +219,4 @@ - + \ No newline at end of file diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml new file mode 100644 index 0000000000..dbe540c637 --- /dev/null +++ b/app/src/main/res/xml/locales_config.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file From 6332a9b52962411cdb314b54e89a51598fc31381 Mon Sep 17 00:00:00 2001 From: Xiwangly <59991942+xiwangly2@users.noreply.github.com> Date: Tue, 12 May 2026 21:02:04 +0800 Subject: [PATCH 07/32] Fix clash:// deep link not opening app due to premature Activity finish (#718) --- .../main/java/com/github/kr328/clash/ExternalControlActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt b/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt index fc501c0db9..ba80d03835 100644 --- a/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt @@ -53,6 +53,7 @@ class ExternalControlActivity : Activity(), CoroutineScope by MainScope() { startActivity(PropertiesActivity::class.intent.setUUID(uuid)) finish() } + return } Intents.ACTION_TOGGLE_CLASH -> if(Remote.broadcasts.clashRunning) { From 930d04fed5d17e2d85f4a9129059dac2450df5d7 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Wed, 13 May 2026 17:29:50 +0800 Subject: [PATCH 08/32] Update Proxy.kt --- core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt index 012d89eb5b..29e644a2aa 100644 --- a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt +++ b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt @@ -40,6 +40,7 @@ data class Proxy( Sudoku(false), Masque(false), TrustTunnel(false), + OpenVPN(false), Relay(true), From cb9aa9edb00c05a96d8ef1aa5e9f8a2114cb0cb2 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Thu, 14 May 2026 10:37:31 +0800 Subject: [PATCH 09/32] Update Proxy.kt --- core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt index 29e644a2aa..b300923a46 100644 --- a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt +++ b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt @@ -41,6 +41,7 @@ data class Proxy( Masque(false), TrustTunnel(false), OpenVPN(false), + Tailscale(false), Relay(true), From 8f7814b2fcca0e0f3683af9dc9bd86b3b231979d Mon Sep 17 00:00:00 2001 From: "clash-meta-maintainer[bot]" <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 13:38:08 +0800 Subject: [PATCH 10/32] Update Dependencies (#710) Co-authored-by: clash-meta-maintainer[bot] <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> --- core/src/foss/golang/clash | 2 +- core/src/foss/golang/go.mod | 37 ++++++++++++++---- core/src/foss/golang/go.sum | 78 ++++++++++++++++++++++++++++++------- core/src/main/golang/go.mod | 37 ++++++++++++++---- core/src/main/golang/go.sum | 78 ++++++++++++++++++++++++++++++------- 5 files changed, 189 insertions(+), 43 deletions(-) diff --git a/core/src/foss/golang/clash b/core/src/foss/golang/clash index a84724665e..571925d2d2 160000 --- a/core/src/foss/golang/clash +++ b/core/src/foss/golang/clash @@ -1 +1 @@ -Subproject commit a84724665eb7f989809abe463c05f5723bd24975 +Subproject commit 571925d2d2d3948d2bce58df72ff93c1f02bcb8c diff --git a/core/src/foss/golang/go.mod b/core/src/foss/golang/go.mod index bb575ddb63..f7ea61cecf 100644 --- a/core/src/foss/golang/go.mod +++ b/core/src/foss/golang/go.mod @@ -8,8 +8,11 @@ require ( github.com/RyuaNerin/go-krypto v1.3.0 // indirect github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344 // indirect github.com/ajg/form v1.5.1 // indirect + github.com/akutz/memconn v0.1.0 // indirect + github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect github.com/andybalholm/brotli v1.0.6 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect + github.com/coder/websocket v1.8.12 // indirect github.com/coreos/go-iptables v0.8.0 // indirect github.com/dlclark/regexp2 v1.12.0 // indirect github.com/dunglas/httpsfv v1.0.2 // indirect @@ -19,23 +22,28 @@ require ( github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect github.com/ericlagergren/subtle v0.0.0-20220507045147-890d697da010 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/gaukas/godicttls v0.0.4 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gobwas/httphead v0.1.0 // indirect github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.4.0 // indirect + github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 // indirect github.com/gofrs/uuid/v5 v5.4.0 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/huin/goupnp v1.3.0 // indirect github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 // indirect github.com/josharian/native v1.1.0 // indirect + github.com/jsimonetti/rtnetlink v1.4.0 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/klauspost/reedsolomon v1.12.3 // indirect github.com/mdlayher/netlink v1.7.2 // indirect - github.com/mdlayher/socket v0.4.1 // indirect + github.com/mdlayher/socket v0.5.1 // indirect github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d // indirect github.com/metacubex/ascon v0.1.0 // indirect github.com/metacubex/bart v0.26.0 // indirect @@ -51,57 +59,72 @@ require ( github.com/metacubex/gvisor v0.0.0-20251227095601-261ec1326fe8 // indirect github.com/metacubex/hkdf v0.1.0 // indirect github.com/metacubex/hpke v0.1.0 // indirect - github.com/metacubex/http v0.1.2 // indirect + github.com/metacubex/http v0.1.6 // indirect + github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c // indirect github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 // indirect github.com/metacubex/mhurl v0.1.0 // indirect github.com/metacubex/mihomo v1.7.0 // indirect github.com/metacubex/mlkem v0.1.0 // indirect - github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793 // indirect + github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb // indirect github.com/metacubex/qpack v0.6.0 // indirect github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306 // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/restls-client-go v0.1.7 // indirect github.com/metacubex/sing v0.5.7 // indirect github.com/metacubex/sing-mux v0.3.9 // indirect - github.com/metacubex/sing-quic v0.0.0-20260414034501-3ea3410d197a // indirect + github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 // indirect github.com/metacubex/sing-shadowsocks v0.2.12 // indirect github.com/metacubex/sing-shadowsocks2 v0.2.7 // indirect github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 // indirect - github.com/metacubex/sing-tun v0.4.17 // indirect + github.com/metacubex/sing-tun v0.4.18 // indirect github.com/metacubex/sing-vmess v0.2.5 // indirect - github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f // indirect + github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect + github.com/metacubex/ssh v0.1.0 // indirect + github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f // indirect + github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect github.com/metacubex/tls v0.1.5 // indirect github.com/metacubex/utls v1.8.4 // indirect github.com/metacubex/wireguard-go v0.0.0-20250820062549-a6cecdd7f57f // indirect github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49 // indirect github.com/miekg/dns v1.1.63 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mroth/weightedrand/v2 v2.1.0 // indirect github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect github.com/openacid/low v0.1.21 // indirect github.com/oschwald/maxminddb-golang v1.12.0 // indirect github.com/pierrec/lz4/v4 v4.1.14 // indirect + github.com/pires/go-proxyproto v0.8.0 // indirect + github.com/safchain/ethtool v0.3.0 // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/samber/lo v1.53.0 // indirect github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b // indirect github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect github.com/sirupsen/logrus v1.9.4 // indirect + github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d // indirect + github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect + github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a // indirect + github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect - github.com/vishvananda/netns v0.0.4 // indirect + github.com/vishvananda/netns v0.0.5 // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7 // indirect gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect + go4.org/mem v0.0.0-20240501181205-ae6ca9944745 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect golang.org/x/crypto v0.33.0 // indirect golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.35.0 // indirect + golang.org/x/oauth2 v0.24.0 // indirect golang.org/x/sync v0.11.0 // indirect golang.org/x/sys v0.30.0 // indirect + golang.org/x/term v0.29.0 // indirect golang.org/x/text v0.22.0 // indirect golang.org/x/time v0.10.0 // indirect golang.org/x/tools v0.24.0 // indirect diff --git a/core/src/foss/golang/go.sum b/core/src/foss/golang/go.sum index 958a7cd975..cef99bd238 100644 --- a/core/src/foss/golang/go.sum +++ b/core/src/foss/golang/go.sum @@ -5,11 +5,18 @@ github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344 h1:cDVUiFo+npB0ZASqnw4 github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344/go.mod h1:9pIqrY6SXNL8vjRQE5Hd/OL5GyK/9MrGUWs87z/eFfk= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/akutz/memconn v0.1.0 h1:NawI0TORU4hcOMsMr11g7vwlCdkYeLKXBcxWu2W/P8A= +github.com/akutz/memconn v0.1.0/go.mod h1:Jo8rI7m0NieZyLI5e2CDlRdRqRRB4S7Xp77ukDjH+Fw= +github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= +github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4= +github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= +github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/coreos/go-iptables v0.8.0 h1:MPc2P89IhuVpLI7ETL/2tx3XZ61VeICZjYqDEgNsPRc= github.com/coreos/go-iptables v0.8.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -31,8 +38,11 @@ github.com/ericlagergren/subtle v0.0.0-20220507045147-890d697da010 h1:fuGucgPk5d github.com/ericlagergren/subtle v0.0.0-20220507045147-890d697da010/go.mod h1:JtBcj7sBuTTRupn7c2bFspMDIObMJsVK8TeUvpShPok= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= +github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/gaukas/godicttls v0.0.4 h1:NlRaXb3J6hAnTmWdsEKb9bcSBD6BvcIjdGdeb0zfXbk= github.com/gaukas/godicttls v0.0.4/go.mod h1:l6EenT4TLWgTdwslVb4sEMOCf7Bv0JAK67deKr9/NCI= +github.com/github/fakeca v0.1.0 h1:Km/MVOFvclqxPM9dZBC4+QE564nU4gz4iZ0D9pMw28I= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= @@ -41,8 +51,12 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.4.0 h1:CTaoG1tojrh4ucGPcoJFiAQUAsEWekEWvLy7GsVNqGs= github.com/gobwas/ws v1.4.0/go.mod h1:G3gNqMNtPppf5XUz7O4shetPpcZ1VJ7zt18dlUeakrc= +github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 h1:sQspH8M4niEijh3PFscJRLDnkL547IeP7kpPe3uUhEg= +github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466/go.mod h1:ZiQxhyQ+bbbfxUKVvjfO498oPYvtYhZzycal3G/NHmU= github.com/gofrs/uuid/v5 v5.4.0 h1:EfbpCTjqMuGyq5ZJwxqzn3Cbr2d0rUZU7v5ycAk/e/0= github.com/gofrs/uuid/v5 v5.4.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -53,11 +67,15 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 h1:q3OEI9RaN/wwcx+qgGo6ZaoJkCiDYe/gjDLfq7lQQF4= github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905/go.mod h1:VvGYjkZoJyKqlmT1yzakUs4mfKMNB0XdODP0+rdml6k= github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= +github.com/jsimonetti/rtnetlink v1.4.0 h1:Z1BF0fRgcETPEa0Kt0MRk3yV5+kF1FWTni6KUFKrq2I= +github.com/jsimonetti/rtnetlink v1.4.0/go.mod h1:5W1jDvWdnthFJ7fxYX1GMK07BUpI4oskfOqvPteYS6E= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= @@ -66,8 +84,8 @@ github.com/klauspost/reedsolomon v1.12.3 h1:tzUznbfc3OFwJaTebv/QdhnFf2Xvb7gZ24Xa github.com/klauspost/reedsolomon v1.12.3/go.mod h1:3K5rXwABAvzGeR01r6pWZieUALXO/Tq7bFKGIb4m4WI= github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= -github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= -github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= +github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d h1:vAJ0ZT4aO803F1uw2roIA9yH7Sxzox34tVVyye1bz6c= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d/go.mod h1:MsM/5czONyXMJ3PRr5DbQ4O/BxzAnJWOIcJdLzW6qHY= github.com/metacubex/ascon v0.1.0 h1:6ZWxmXYszT1XXtwkf6nxfFhc/OTtQ9R3Vyj1jN32lGM= @@ -98,16 +116,18 @@ github.com/metacubex/hkdf v0.1.0 h1:fPA6VzXK8cU1foc/TOmGCDmSa7pZbxlnqhl3RNsthaA= github.com/metacubex/hkdf v0.1.0/go.mod h1:3seEfds3smgTAXqUGn+tgEJH3uXdsUjOiduG/2EtvZ4= github.com/metacubex/hpke v0.1.0 h1:gu2jUNhraehWi0P/z5HX2md3d7L1FhPQE6/Q0E9r9xQ= github.com/metacubex/hpke v0.1.0/go.mod h1:vfDm6gfgrwlXUxKDkWbcE44hXtmc1uxLDm2BcR11b3U= -github.com/metacubex/http v0.1.2 h1:XxW+pMaGAvVveRqREbyWJJDDl9dRZQGJoyKBiPPPKs8= -github.com/metacubex/http v0.1.2/go.mod h1:Nxx0zZAo2AhRfanyL+fmmK6ACMtVsfpwIl1aFAik2Eg= +github.com/metacubex/http v0.1.6 h1:xvXuvXMCMxCWMF5nEJF4yiKvXL+p2atWMzs37e80m1I= +github.com/metacubex/http v0.1.6/go.mod h1:Nxx0zZAo2AhRfanyL+fmmK6ACMtVsfpwIl1aFAik2Eg= +github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c h1:KGhBHDe6FveU0ury+9RyX329nclM1CHODa0Fi+uOAYM= +github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c/go.mod h1:F4sVXat6QjPXkNsKRDyyG3BhSkxPFFnRPEIwmmyCgbg= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 h1:hJwCVlE3ojViC35MGHB+FBr8TuIf3BUFn2EQ1VIamsI= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604/go.mod h1:lpmN3m269b3V5jFCWtffqBLS4U3QQoIid9ugtO+OhVc= github.com/metacubex/mhurl v0.1.0 h1:ZdW4Zxe3j3uJ89gNytOazHu6kbHn5owutN/VfXOI8GE= github.com/metacubex/mhurl v0.1.0/go.mod h1:2qpQImCbXoUs6GwJrjuEXKelPyoimsIXr07eNKZdS00= github.com/metacubex/mlkem v0.1.0 h1:wFClitonSFcmipzzQvax75beLQU+D7JuC+VK1RzSL8I= github.com/metacubex/mlkem v0.1.0/go.mod h1:amhaXZVeYNShuy9BILcR7P0gbeo/QLZsnqCdL8U2PDQ= -github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793 h1:1Qpuy+sU3DmyX9HwI+CrBT/oLNJngvBorR2RbajJcqo= -github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793/go.mod h1:RjRNb4G52yAgfR+Oe/kp9G4PJJ97Fnj89eY1BFO3YyA= +github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb h1:wk6mHYPURSUvWcUv72gNP79oiylFsscBSDPJ6ieV6Iw= +github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb/go.mod h1:73ZrCfhdkW4F2E2GAlta3km/S2RHhFNogCMtWZV2anQ= github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686 h1:PIXmYT2anQt9V8vdmwixtbIJxOpoPXJfIACHPjXEgnE= github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686/go.mod h1:eQV7juxFZIdRgjMxtVqP+6BssKoTZQ1RM0fc58BsCZY= github.com/metacubex/qpack v0.6.0 h1:YqClGIMOpiRYLjV1qOs483Od08MdPgRnHjt90FuaAKw= @@ -122,22 +142,28 @@ github.com/metacubex/sing v0.5.7 h1:8OC+fhKFSv/l9ehEhJRaZZAOuthfZo68SteBVLe8QqM= github.com/metacubex/sing v0.5.7/go.mod h1:ypf0mjwlZm0sKdQSY+yQvmsbWa0hNPtkeqyRMGgoN+w= github.com/metacubex/sing-mux v0.3.9 h1:/aoBD2+sK2qsXDlNDe3hkR0GZuFDtwIZhOeGUx9W0Yk= github.com/metacubex/sing-mux v0.3.9/go.mod h1:8bT7ZKT3clRrJjYc/x5CRYibC1TX/bK73a3r3+2E+Fc= -github.com/metacubex/sing-quic v0.0.0-20260414034501-3ea3410d197a h1:977o0ZYYbiQAGuOxql7Q6UN3rEy59OyAE0tELq4gZfI= -github.com/metacubex/sing-quic v0.0.0-20260414034501-3ea3410d197a/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= +github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 h1:nZ5WNU6kjj6kBu4+2eMySFkUVGCop64rZnLMm+HPh8w= +github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= github.com/metacubex/sing-shadowsocks v0.2.12 h1:Wqzo8bYXrK5aWqxu/TjlTnYZzAKtKsaFQBdr6IHFaBE= github.com/metacubex/sing-shadowsocks v0.2.12/go.mod h1:2e5EIaw0rxKrm1YTRmiMnDulwbGxH9hAFlrwQLQMQkU= github.com/metacubex/sing-shadowsocks2 v0.2.7 h1:hSuuc0YpsfiqYqt1o+fP4m34BQz4e6wVj3PPBVhor3A= github.com/metacubex/sing-shadowsocks2 v0.2.7/go.mod h1:vOEbfKC60txi0ca+yUlqEwOGc3Obl6cnSgx9Gf45KjE= github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 h1:gXU+MYPm7Wme3/OAY2FFzVq9d9GxPHOqu5AQfg/ddhI= github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E= -github.com/metacubex/sing-tun v0.4.17 h1:ehzvPLyxG1vmjaKVeB0aEK1eqhR3reEzdbqQfM3+5XA= -github.com/metacubex/sing-tun v0.4.17/go.mod h1:L/TjQY5JEGy8nvsuYmy/XgMFMCPiF0+AWSFCYfS6r9w= +github.com/metacubex/sing-tun v0.4.18 h1:WRzAosG0YkT3aZq5RJWtF+RdCgeJ8EpooS5ZM1lkXo0= +github.com/metacubex/sing-tun v0.4.18/go.mod h1:g4I/JNplDBhXLF+aQWgFbhNeJPSXQOWS9HvLeNvkgeA= github.com/metacubex/sing-vmess v0.2.5 h1:m9Zt5I27lB9fmLMZfism9sH2LcnAfShZfwSkf6/KJoE= github.com/metacubex/sing-vmess v0.2.5/go.mod h1:AwtlzUgf8COe9tRYAKqWZ+leDH7p5U98a0ZUpYehl8Q= -github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f h1:Sr/DYKYofKHKc4GF3qkRGNuj6XA6c0eqPgEDN+VAsYU= -github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80= +github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 h1:IB03BvRQtvjWScyOK5jSQVJYY8osmZXHL+4VCEFMWcM= +github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2BhiAPgbJygiWhesPlfGmF+9Vw6ARdk= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= +github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= +github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= +github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f h1:nJvp3tZr4Leqh92u8mgj/aT9wUXPrGXhUQ2iXd8KxPI= +github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443/go.mod h1:l9oLnLoEXyGZ5RVLsh7QCC5XsouTUyKk4F2nLm2DHLw= github.com/metacubex/tls v0.1.5 h1:ECcB83dj+zadnhlKcLnUUf1Sq6+vU0f/zoyU0+9oPTc= @@ -150,6 +176,8 @@ github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49 h1:lhlqpYHopuTLx9x github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49/go.mod h1:MBeEa9IVBphH7vc3LNtW6ZujVXFizotPo3OEiHQ+TNU= github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY= github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mroth/weightedrand/v2 v2.1.0 h1:o1ascnB1CIVzsqlfArQQjeMy1U0NcIbBO5rfd5E/OeU= github.com/mroth/weightedrand/v2 v2.1.0/go.mod h1:f2faGsfOGOwc1p94wzHKKZyTpcJUW7OJ/9U4yfiNAOU= github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 h1:1102pQc2SEPp5+xrS26wEaeb26sZy6k9/ZXlZN+eXE4= @@ -163,9 +191,13 @@ github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq5 github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY= github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE= github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0= +github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0= +github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZNjr6sGeT00J8uU7JF4cNUdb44/Duis= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM= github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= @@ -183,17 +215,27 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d h1:JcGKBZAL7ePLwOhUdN8qGQZlP5GueEiIZwY7R62pejE= +github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d/go.mod h1:XrBNfAFN+pwoWuksbFS9Ccxnopa15zJGgXRFN90l3K4= +github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 h1:Gzfnfk2TWrk8Jj4P4c1a3CtQyMaTVCznlkLZI++hok4= +github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55/go.mod h1:4k4QO+dQ3R5FofL+SanAUZe+/QfeK0+OIuwDIRu2vSg= +github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a h1:SJy1Pu0eH1C29XwJucQo73FrleVK6t4kYz4NVhp34Yw= +github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a/go.mod h1:DFSS3NAGHthKo1gTlmEcSBiZrRJXi28rLNd/1udP1c8= +github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+yfntqhI3oAu9i27nEojcQ4NuBQOo5ZFA= +github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= -github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= +github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY= +github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= @@ -202,6 +244,8 @@ gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7/go.mod h1:E+r gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec h1:FpfFs4EhNehiVfzQttTuxanPIT43FtkkCFypIod8LHo= gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec/go.mod h1:BZ1RAoRPbCxum9Grlv5aeksu2H8BiKehBYooU2LFiOQ= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go4.org/mem v0.0.0-20240501181205-ae6ca9944745 h1:Tl++JLUCe4sxGu8cTpDzRLd3tN7US4hOxG5YpKCzkek= +go4.org/mem v0.0.0-20240501181205-ae6ca9944745/go.mod h1:reUoABIJ9ikfM5sgtSF3Wushcza7+WeD01VB9Lirh3g= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -218,7 +262,10 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -227,12 +274,14 @@ golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= @@ -247,3 +296,4 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +software.sslmate.com/src/go-pkcs12 v0.2.1 h1:tbT1jjaeFOF230tzOIRJ6U5S1jNqpsSyNjzDd58H3J8= diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod index dc0f062eea..1dde4277e4 100644 --- a/core/src/main/golang/go.mod +++ b/core/src/main/golang/go.mod @@ -14,8 +14,11 @@ require ( github.com/RyuaNerin/go-krypto v1.3.0 // indirect github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344 // indirect github.com/ajg/form v1.5.1 // indirect + github.com/akutz/memconn v0.1.0 // indirect + github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect github.com/andybalholm/brotli v1.0.6 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect + github.com/coder/websocket v1.8.12 // indirect github.com/coreos/go-iptables v0.8.0 // indirect github.com/dunglas/httpsfv v1.0.2 // indirect github.com/enfein/mieru/v3 v3.31.0 // indirect @@ -24,23 +27,28 @@ require ( github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect github.com/ericlagergren/subtle v0.0.0-20220507045147-890d697da010 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/gaukas/godicttls v0.0.4 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gobwas/httphead v0.1.0 // indirect github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.4.0 // indirect + github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 // indirect github.com/gofrs/uuid/v5 v5.4.0 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/huin/goupnp v1.3.0 // indirect github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 // indirect github.com/josharian/native v1.1.0 // indirect + github.com/jsimonetti/rtnetlink v1.4.0 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/klauspost/reedsolomon v1.12.3 // indirect github.com/mdlayher/netlink v1.7.2 // indirect - github.com/mdlayher/socket v0.4.1 // indirect + github.com/mdlayher/socket v0.5.1 // indirect github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d // indirect github.com/metacubex/ascon v0.1.0 // indirect github.com/metacubex/bart v0.26.0 // indirect @@ -56,55 +64,70 @@ require ( github.com/metacubex/gvisor v0.0.0-20251227095601-261ec1326fe8 // indirect github.com/metacubex/hkdf v0.1.0 // indirect github.com/metacubex/hpke v0.1.0 // indirect - github.com/metacubex/http v0.1.2 // indirect + github.com/metacubex/http v0.1.6 // indirect + github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c // indirect github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 // indirect github.com/metacubex/mhurl v0.1.0 // indirect github.com/metacubex/mlkem v0.1.0 // indirect - github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793 // indirect + github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb // indirect github.com/metacubex/qpack v0.6.0 // indirect github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306 // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/restls-client-go v0.1.7 // indirect github.com/metacubex/sing v0.5.7 // indirect github.com/metacubex/sing-mux v0.3.9 // indirect - github.com/metacubex/sing-quic v0.0.0-20260414034501-3ea3410d197a // indirect + github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 // indirect github.com/metacubex/sing-shadowsocks v0.2.12 // indirect github.com/metacubex/sing-shadowsocks2 v0.2.7 // indirect github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 // indirect - github.com/metacubex/sing-tun v0.4.17 // indirect + github.com/metacubex/sing-tun v0.4.18 // indirect github.com/metacubex/sing-vmess v0.2.5 // indirect - github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f // indirect + github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect + github.com/metacubex/ssh v0.1.0 // indirect + github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f // indirect + github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect github.com/metacubex/tls v0.1.5 // indirect github.com/metacubex/utls v1.8.4 // indirect github.com/metacubex/wireguard-go v0.0.0-20250820062549-a6cecdd7f57f // indirect github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49 // indirect github.com/miekg/dns v1.1.63 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mroth/weightedrand/v2 v2.1.0 // indirect github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect github.com/openacid/low v0.1.21 // indirect github.com/oschwald/maxminddb-golang v1.12.0 // indirect github.com/pierrec/lz4/v4 v4.1.14 // indirect + github.com/pires/go-proxyproto v0.8.0 // indirect + github.com/safchain/ethtool v0.3.0 // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/samber/lo v1.53.0 // indirect github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b // indirect github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect github.com/sirupsen/logrus v1.9.4 // indirect + github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d // indirect + github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect + github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a // indirect + github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect - github.com/vishvananda/netns v0.0.4 // indirect + github.com/vishvananda/netns v0.0.5 // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7 // indirect gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect + go4.org/mem v0.0.0-20240501181205-ae6ca9944745 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect golang.org/x/crypto v0.33.0 // indirect golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.35.0 // indirect + golang.org/x/oauth2 v0.24.0 // indirect golang.org/x/sys v0.30.0 // indirect + golang.org/x/term v0.29.0 // indirect golang.org/x/text v0.22.0 // indirect golang.org/x/time v0.10.0 // indirect golang.org/x/tools v0.24.0 // indirect diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum index 958a7cd975..cef99bd238 100644 --- a/core/src/main/golang/go.sum +++ b/core/src/main/golang/go.sum @@ -5,11 +5,18 @@ github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344 h1:cDVUiFo+npB0ZASqnw4 github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344/go.mod h1:9pIqrY6SXNL8vjRQE5Hd/OL5GyK/9MrGUWs87z/eFfk= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/akutz/memconn v0.1.0 h1:NawI0TORU4hcOMsMr11g7vwlCdkYeLKXBcxWu2W/P8A= +github.com/akutz/memconn v0.1.0/go.mod h1:Jo8rI7m0NieZyLI5e2CDlRdRqRRB4S7Xp77ukDjH+Fw= +github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= +github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4= +github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= +github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/coreos/go-iptables v0.8.0 h1:MPc2P89IhuVpLI7ETL/2tx3XZ61VeICZjYqDEgNsPRc= github.com/coreos/go-iptables v0.8.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -31,8 +38,11 @@ github.com/ericlagergren/subtle v0.0.0-20220507045147-890d697da010 h1:fuGucgPk5d github.com/ericlagergren/subtle v0.0.0-20220507045147-890d697da010/go.mod h1:JtBcj7sBuTTRupn7c2bFspMDIObMJsVK8TeUvpShPok= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= +github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/gaukas/godicttls v0.0.4 h1:NlRaXb3J6hAnTmWdsEKb9bcSBD6BvcIjdGdeb0zfXbk= github.com/gaukas/godicttls v0.0.4/go.mod h1:l6EenT4TLWgTdwslVb4sEMOCf7Bv0JAK67deKr9/NCI= +github.com/github/fakeca v0.1.0 h1:Km/MVOFvclqxPM9dZBC4+QE564nU4gz4iZ0D9pMw28I= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= @@ -41,8 +51,12 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.4.0 h1:CTaoG1tojrh4ucGPcoJFiAQUAsEWekEWvLy7GsVNqGs= github.com/gobwas/ws v1.4.0/go.mod h1:G3gNqMNtPppf5XUz7O4shetPpcZ1VJ7zt18dlUeakrc= +github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 h1:sQspH8M4niEijh3PFscJRLDnkL547IeP7kpPe3uUhEg= +github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466/go.mod h1:ZiQxhyQ+bbbfxUKVvjfO498oPYvtYhZzycal3G/NHmU= github.com/gofrs/uuid/v5 v5.4.0 h1:EfbpCTjqMuGyq5ZJwxqzn3Cbr2d0rUZU7v5ycAk/e/0= github.com/gofrs/uuid/v5 v5.4.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -53,11 +67,15 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 h1:q3OEI9RaN/wwcx+qgGo6ZaoJkCiDYe/gjDLfq7lQQF4= github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905/go.mod h1:VvGYjkZoJyKqlmT1yzakUs4mfKMNB0XdODP0+rdml6k= github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= +github.com/jsimonetti/rtnetlink v1.4.0 h1:Z1BF0fRgcETPEa0Kt0MRk3yV5+kF1FWTni6KUFKrq2I= +github.com/jsimonetti/rtnetlink v1.4.0/go.mod h1:5W1jDvWdnthFJ7fxYX1GMK07BUpI4oskfOqvPteYS6E= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= @@ -66,8 +84,8 @@ github.com/klauspost/reedsolomon v1.12.3 h1:tzUznbfc3OFwJaTebv/QdhnFf2Xvb7gZ24Xa github.com/klauspost/reedsolomon v1.12.3/go.mod h1:3K5rXwABAvzGeR01r6pWZieUALXO/Tq7bFKGIb4m4WI= github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= -github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= -github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= +github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d h1:vAJ0ZT4aO803F1uw2roIA9yH7Sxzox34tVVyye1bz6c= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d/go.mod h1:MsM/5czONyXMJ3PRr5DbQ4O/BxzAnJWOIcJdLzW6qHY= github.com/metacubex/ascon v0.1.0 h1:6ZWxmXYszT1XXtwkf6nxfFhc/OTtQ9R3Vyj1jN32lGM= @@ -98,16 +116,18 @@ github.com/metacubex/hkdf v0.1.0 h1:fPA6VzXK8cU1foc/TOmGCDmSa7pZbxlnqhl3RNsthaA= github.com/metacubex/hkdf v0.1.0/go.mod h1:3seEfds3smgTAXqUGn+tgEJH3uXdsUjOiduG/2EtvZ4= github.com/metacubex/hpke v0.1.0 h1:gu2jUNhraehWi0P/z5HX2md3d7L1FhPQE6/Q0E9r9xQ= github.com/metacubex/hpke v0.1.0/go.mod h1:vfDm6gfgrwlXUxKDkWbcE44hXtmc1uxLDm2BcR11b3U= -github.com/metacubex/http v0.1.2 h1:XxW+pMaGAvVveRqREbyWJJDDl9dRZQGJoyKBiPPPKs8= -github.com/metacubex/http v0.1.2/go.mod h1:Nxx0zZAo2AhRfanyL+fmmK6ACMtVsfpwIl1aFAik2Eg= +github.com/metacubex/http v0.1.6 h1:xvXuvXMCMxCWMF5nEJF4yiKvXL+p2atWMzs37e80m1I= +github.com/metacubex/http v0.1.6/go.mod h1:Nxx0zZAo2AhRfanyL+fmmK6ACMtVsfpwIl1aFAik2Eg= +github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c h1:KGhBHDe6FveU0ury+9RyX329nclM1CHODa0Fi+uOAYM= +github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c/go.mod h1:F4sVXat6QjPXkNsKRDyyG3BhSkxPFFnRPEIwmmyCgbg= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 h1:hJwCVlE3ojViC35MGHB+FBr8TuIf3BUFn2EQ1VIamsI= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604/go.mod h1:lpmN3m269b3V5jFCWtffqBLS4U3QQoIid9ugtO+OhVc= github.com/metacubex/mhurl v0.1.0 h1:ZdW4Zxe3j3uJ89gNytOazHu6kbHn5owutN/VfXOI8GE= github.com/metacubex/mhurl v0.1.0/go.mod h1:2qpQImCbXoUs6GwJrjuEXKelPyoimsIXr07eNKZdS00= github.com/metacubex/mlkem v0.1.0 h1:wFClitonSFcmipzzQvax75beLQU+D7JuC+VK1RzSL8I= github.com/metacubex/mlkem v0.1.0/go.mod h1:amhaXZVeYNShuy9BILcR7P0gbeo/QLZsnqCdL8U2PDQ= -github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793 h1:1Qpuy+sU3DmyX9HwI+CrBT/oLNJngvBorR2RbajJcqo= -github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793/go.mod h1:RjRNb4G52yAgfR+Oe/kp9G4PJJ97Fnj89eY1BFO3YyA= +github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb h1:wk6mHYPURSUvWcUv72gNP79oiylFsscBSDPJ6ieV6Iw= +github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb/go.mod h1:73ZrCfhdkW4F2E2GAlta3km/S2RHhFNogCMtWZV2anQ= github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686 h1:PIXmYT2anQt9V8vdmwixtbIJxOpoPXJfIACHPjXEgnE= github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686/go.mod h1:eQV7juxFZIdRgjMxtVqP+6BssKoTZQ1RM0fc58BsCZY= github.com/metacubex/qpack v0.6.0 h1:YqClGIMOpiRYLjV1qOs483Od08MdPgRnHjt90FuaAKw= @@ -122,22 +142,28 @@ github.com/metacubex/sing v0.5.7 h1:8OC+fhKFSv/l9ehEhJRaZZAOuthfZo68SteBVLe8QqM= github.com/metacubex/sing v0.5.7/go.mod h1:ypf0mjwlZm0sKdQSY+yQvmsbWa0hNPtkeqyRMGgoN+w= github.com/metacubex/sing-mux v0.3.9 h1:/aoBD2+sK2qsXDlNDe3hkR0GZuFDtwIZhOeGUx9W0Yk= github.com/metacubex/sing-mux v0.3.9/go.mod h1:8bT7ZKT3clRrJjYc/x5CRYibC1TX/bK73a3r3+2E+Fc= -github.com/metacubex/sing-quic v0.0.0-20260414034501-3ea3410d197a h1:977o0ZYYbiQAGuOxql7Q6UN3rEy59OyAE0tELq4gZfI= -github.com/metacubex/sing-quic v0.0.0-20260414034501-3ea3410d197a/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= +github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 h1:nZ5WNU6kjj6kBu4+2eMySFkUVGCop64rZnLMm+HPh8w= +github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= github.com/metacubex/sing-shadowsocks v0.2.12 h1:Wqzo8bYXrK5aWqxu/TjlTnYZzAKtKsaFQBdr6IHFaBE= github.com/metacubex/sing-shadowsocks v0.2.12/go.mod h1:2e5EIaw0rxKrm1YTRmiMnDulwbGxH9hAFlrwQLQMQkU= github.com/metacubex/sing-shadowsocks2 v0.2.7 h1:hSuuc0YpsfiqYqt1o+fP4m34BQz4e6wVj3PPBVhor3A= github.com/metacubex/sing-shadowsocks2 v0.2.7/go.mod h1:vOEbfKC60txi0ca+yUlqEwOGc3Obl6cnSgx9Gf45KjE= github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 h1:gXU+MYPm7Wme3/OAY2FFzVq9d9GxPHOqu5AQfg/ddhI= github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E= -github.com/metacubex/sing-tun v0.4.17 h1:ehzvPLyxG1vmjaKVeB0aEK1eqhR3reEzdbqQfM3+5XA= -github.com/metacubex/sing-tun v0.4.17/go.mod h1:L/TjQY5JEGy8nvsuYmy/XgMFMCPiF0+AWSFCYfS6r9w= +github.com/metacubex/sing-tun v0.4.18 h1:WRzAosG0YkT3aZq5RJWtF+RdCgeJ8EpooS5ZM1lkXo0= +github.com/metacubex/sing-tun v0.4.18/go.mod h1:g4I/JNplDBhXLF+aQWgFbhNeJPSXQOWS9HvLeNvkgeA= github.com/metacubex/sing-vmess v0.2.5 h1:m9Zt5I27lB9fmLMZfism9sH2LcnAfShZfwSkf6/KJoE= github.com/metacubex/sing-vmess v0.2.5/go.mod h1:AwtlzUgf8COe9tRYAKqWZ+leDH7p5U98a0ZUpYehl8Q= -github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f h1:Sr/DYKYofKHKc4GF3qkRGNuj6XA6c0eqPgEDN+VAsYU= -github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80= +github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 h1:IB03BvRQtvjWScyOK5jSQVJYY8osmZXHL+4VCEFMWcM= +github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2BhiAPgbJygiWhesPlfGmF+9Vw6ARdk= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= +github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= +github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= +github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f h1:nJvp3tZr4Leqh92u8mgj/aT9wUXPrGXhUQ2iXd8KxPI= +github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443/go.mod h1:l9oLnLoEXyGZ5RVLsh7QCC5XsouTUyKk4F2nLm2DHLw= github.com/metacubex/tls v0.1.5 h1:ECcB83dj+zadnhlKcLnUUf1Sq6+vU0f/zoyU0+9oPTc= @@ -150,6 +176,8 @@ github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49 h1:lhlqpYHopuTLx9x github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49/go.mod h1:MBeEa9IVBphH7vc3LNtW6ZujVXFizotPo3OEiHQ+TNU= github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY= github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mroth/weightedrand/v2 v2.1.0 h1:o1ascnB1CIVzsqlfArQQjeMy1U0NcIbBO5rfd5E/OeU= github.com/mroth/weightedrand/v2 v2.1.0/go.mod h1:f2faGsfOGOwc1p94wzHKKZyTpcJUW7OJ/9U4yfiNAOU= github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 h1:1102pQc2SEPp5+xrS26wEaeb26sZy6k9/ZXlZN+eXE4= @@ -163,9 +191,13 @@ github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq5 github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY= github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE= github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0= +github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0= +github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZNjr6sGeT00J8uU7JF4cNUdb44/Duis= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM= github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= @@ -183,17 +215,27 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d h1:JcGKBZAL7ePLwOhUdN8qGQZlP5GueEiIZwY7R62pejE= +github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d/go.mod h1:XrBNfAFN+pwoWuksbFS9Ccxnopa15zJGgXRFN90l3K4= +github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 h1:Gzfnfk2TWrk8Jj4P4c1a3CtQyMaTVCznlkLZI++hok4= +github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55/go.mod h1:4k4QO+dQ3R5FofL+SanAUZe+/QfeK0+OIuwDIRu2vSg= +github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a h1:SJy1Pu0eH1C29XwJucQo73FrleVK6t4kYz4NVhp34Yw= +github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a/go.mod h1:DFSS3NAGHthKo1gTlmEcSBiZrRJXi28rLNd/1udP1c8= +github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+yfntqhI3oAu9i27nEojcQ4NuBQOo5ZFA= +github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= -github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= +github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY= +github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= @@ -202,6 +244,8 @@ gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7/go.mod h1:E+r gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec h1:FpfFs4EhNehiVfzQttTuxanPIT43FtkkCFypIod8LHo= gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec/go.mod h1:BZ1RAoRPbCxum9Grlv5aeksu2H8BiKehBYooU2LFiOQ= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go4.org/mem v0.0.0-20240501181205-ae6ca9944745 h1:Tl++JLUCe4sxGu8cTpDzRLd3tN7US4hOxG5YpKCzkek= +go4.org/mem v0.0.0-20240501181205-ae6ca9944745/go.mod h1:reUoABIJ9ikfM5sgtSF3Wushcza7+WeD01VB9Lirh3g= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -218,7 +262,10 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -227,12 +274,14 @@ golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= @@ -247,3 +296,4 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +software.sslmate.com/src/go-pkcs12 v0.2.1 h1:tbT1jjaeFOF230tzOIRJ6U5S1jNqpsSyNjzDd58H3J8= From 92a3aaf85af58547a84d89cefe3feb172d24ea61 Mon Sep 17 00:00:00 2001 From: "clash-meta-maintainer[bot]" <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 18:31:08 +0800 Subject: [PATCH 11/32] Update Dependencies (#737) Co-authored-by: clash-meta-maintainer[bot] <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> --- core/src/foss/golang/clash | 2 +- core/src/foss/golang/go.mod | 2 +- core/src/foss/golang/go.sum | 4 ++-- core/src/main/golang/go.mod | 2 +- core/src/main/golang/go.sum | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/src/foss/golang/clash b/core/src/foss/golang/clash index 571925d2d2..17bed79b41 160000 --- a/core/src/foss/golang/clash +++ b/core/src/foss/golang/clash @@ -1 +1 @@ -Subproject commit 571925d2d2d3948d2bce58df72ff93c1f02bcb8c +Subproject commit 17bed79b4154cad5045be1a92ad0b76f8a0d4f99 diff --git a/core/src/foss/golang/go.mod b/core/src/foss/golang/go.mod index f7ea61cecf..3e9ec1f29e 100644 --- a/core/src/foss/golang/go.mod +++ b/core/src/foss/golang/go.mod @@ -81,7 +81,7 @@ require ( github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect github.com/metacubex/ssh v0.1.0 // indirect - github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f // indirect + github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 // indirect github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect github.com/metacubex/tls v0.1.5 // indirect diff --git a/core/src/foss/golang/go.sum b/core/src/foss/golang/go.sum index cef99bd238..efdb0b3456 100644 --- a/core/src/foss/golang/go.sum +++ b/core/src/foss/golang/go.sum @@ -160,8 +160,8 @@ github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2Bhi github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= -github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f h1:nJvp3tZr4Leqh92u8mgj/aT9wUXPrGXhUQ2iXd8KxPI= -github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= +github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 h1:ZMCj8Cj7nALYwzdmK950nuuFShEPts1vDgZXEqqgyuM= +github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod index 1dde4277e4..ff1cb6517c 100644 --- a/core/src/main/golang/go.mod +++ b/core/src/main/golang/go.mod @@ -85,7 +85,7 @@ require ( github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect github.com/metacubex/ssh v0.1.0 // indirect - github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f // indirect + github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 // indirect github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect github.com/metacubex/tls v0.1.5 // indirect diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum index cef99bd238..efdb0b3456 100644 --- a/core/src/main/golang/go.sum +++ b/core/src/main/golang/go.sum @@ -160,8 +160,8 @@ github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2Bhi github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= -github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f h1:nJvp3tZr4Leqh92u8mgj/aT9wUXPrGXhUQ2iXd8KxPI= -github.com/metacubex/tailscale v0.0.0-20260514010142-10fd27a2338f/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= +github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 h1:ZMCj8Cj7nALYwzdmK950nuuFShEPts1vDgZXEqqgyuM= +github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= From c20a942d62dd68e8715a537117512ac718e83332 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Sat, 16 May 2026 22:34:59 +0800 Subject: [PATCH 12/32] Update Proxy.kt --- core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt index b300923a46..72f36706ab 100644 --- a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt +++ b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt @@ -42,6 +42,7 @@ data class Proxy( TrustTunnel(false), OpenVPN(false), Tailscale(false), + GostRelay(false), Relay(true), From bcf67a24aa970d282f9c15e63119b6539e25a27d Mon Sep 17 00:00:00 2001 From: "clash-meta-maintainer[bot]" <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> Date: Sat, 16 May 2026 23:06:38 +0800 Subject: [PATCH 13/32] Update Dependencies (#738) Co-authored-by: clash-meta-maintainer[bot] <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> --- core/src/foss/golang/clash | 2 +- core/src/foss/golang/go.mod | 2 +- core/src/foss/golang/go.sum | 4 ++-- core/src/main/golang/go.mod | 2 +- core/src/main/golang/go.sum | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/src/foss/golang/clash b/core/src/foss/golang/clash index 17bed79b41..5e22035118 160000 --- a/core/src/foss/golang/clash +++ b/core/src/foss/golang/clash @@ -1 +1 @@ -Subproject commit 17bed79b4154cad5045be1a92ad0b76f8a0d4f99 +Subproject commit 5e22035118d13fa609164670111cc674906bb2a4 diff --git a/core/src/foss/golang/go.mod b/core/src/foss/golang/go.mod index 3e9ec1f29e..d42109dd59 100644 --- a/core/src/foss/golang/go.mod +++ b/core/src/foss/golang/go.mod @@ -81,7 +81,7 @@ require ( github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect github.com/metacubex/ssh v0.1.0 // indirect - github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 // indirect + github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe // indirect github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect github.com/metacubex/tls v0.1.5 // indirect diff --git a/core/src/foss/golang/go.sum b/core/src/foss/golang/go.sum index efdb0b3456..6212e95859 100644 --- a/core/src/foss/golang/go.sum +++ b/core/src/foss/golang/go.sum @@ -160,8 +160,8 @@ github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2Bhi github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= -github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 h1:ZMCj8Cj7nALYwzdmK950nuuFShEPts1vDgZXEqqgyuM= -github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= +github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe h1:ZdAKshacNruZGuKTE8WMTuxyGgpv/LySLoE/EEmgF9c= +github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod index ff1cb6517c..b237c6ed0d 100644 --- a/core/src/main/golang/go.mod +++ b/core/src/main/golang/go.mod @@ -85,7 +85,7 @@ require ( github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect github.com/metacubex/ssh v0.1.0 // indirect - github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 // indirect + github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe // indirect github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect github.com/metacubex/tls v0.1.5 // indirect diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum index efdb0b3456..6212e95859 100644 --- a/core/src/main/golang/go.sum +++ b/core/src/main/golang/go.sum @@ -160,8 +160,8 @@ github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2Bhi github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= -github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728 h1:ZMCj8Cj7nALYwzdmK950nuuFShEPts1vDgZXEqqgyuM= -github.com/metacubex/tailscale v0.0.0-20260515095554-5026f03ad728/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= +github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe h1:ZdAKshacNruZGuKTE8WMTuxyGgpv/LySLoE/EEmgF9c= +github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= From 686ded246901dfbf22b3e9bc1feb0fc338903207 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sat, 16 May 2026 15:16:18 +0000 Subject: [PATCH 14/32] Bump version to 2.11.28 (211028) --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 44f6996059..a85575129a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -58,8 +58,8 @@ subprojects { minSdk = 21 targetSdk = 35 - versionName = "2.11.27" - versionCode = 211027 + versionName = "2.11.28" + versionCode = 211028 resValue("string", "release_name", "v$versionName") resValue("integer", "release_code", "$versionCode") From b37570c1b757e0619eee7adcbaf8a2d2f7ef34cd Mon Sep 17 00:00:00 2001 From: scola Date: Fri, 22 May 2026 17:56:17 +0800 Subject: [PATCH 15/32] fix profile can not be selected by remote controller on android tv (#744) --- design/src/main/res/layout/adapter_profile.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/design/src/main/res/layout/adapter_profile.xml b/design/src/main/res/layout/adapter_profile.xml index 421d00ded6..53f5218b6b 100644 --- a/design/src/main/res/layout/adapter_profile.xml +++ b/design/src/main/res/layout/adapter_profile.xml @@ -26,6 +26,7 @@ android:layout_marginVertical="5dp" android:layout_marginHorizontal="@dimen/item_header_margin" android:background="@drawable/bg_b" + android:foreground="?attr/selectableItemBackground" android:clickable="true" android:focusable="true" android:minHeight="@dimen/item_min_height" From 74cbae23d22418268e40252874331456f5bda50a Mon Sep 17 00:00:00 2001 From: "clash-meta-maintainer[bot]" <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 00:38:20 +0800 Subject: [PATCH 16/32] Update Dependencies (#739) Co-authored-by: clash-meta-maintainer[bot] <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> --- core/src/foss/golang/clash | 2 +- core/src/foss/golang/go.mod | 21 ++++++++++--------- core/src/foss/golang/go.sum | 42 +++++++++++++++++++------------------ core/src/main/golang/go.mod | 21 ++++++++++--------- core/src/main/golang/go.sum | 42 +++++++++++++++++++------------------ 5 files changed, 67 insertions(+), 61 deletions(-) diff --git a/core/src/foss/golang/clash b/core/src/foss/golang/clash index 5e22035118..fc8c5a24b1 160000 --- a/core/src/foss/golang/clash +++ b/core/src/foss/golang/clash @@ -1 +1 @@ -Subproject commit 5e22035118d13fa609164670111cc674906bb2a4 +Subproject commit fc8c5a24b16991f98cd736950c17d1aa306a5041 diff --git a/core/src/foss/golang/go.mod b/core/src/foss/golang/go.mod index d42109dd59..4f3b5eedad 100644 --- a/core/src/foss/golang/go.mod +++ b/core/src/foss/golang/go.mod @@ -16,7 +16,7 @@ require ( github.com/coreos/go-iptables v0.8.0 // indirect github.com/dlclark/regexp2 v1.12.0 // indirect github.com/dunglas/httpsfv v1.0.2 // indirect - github.com/enfein/mieru/v3 v3.31.0 // indirect + github.com/enfein/mieru/v3 v3.33.0 // indirect github.com/ericlagergren/aegis v0.0.0-20250325060835-cd0defd64358 // indirect github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 // indirect github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect @@ -60,31 +60,31 @@ require ( github.com/metacubex/hkdf v0.1.0 // indirect github.com/metacubex/hpke v0.1.0 // indirect github.com/metacubex/http v0.1.6 // indirect - github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c // indirect + github.com/metacubex/jsonv2 v0.0.0-20260518173308-f4597c22f1df // indirect github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 // indirect github.com/metacubex/mhurl v0.1.0 // indirect github.com/metacubex/mihomo v1.7.0 // indirect github.com/metacubex/mlkem v0.1.0 // indirect github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb // indirect github.com/metacubex/qpack v0.6.0 // indirect - github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306 // indirect + github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/restls-client-go v0.1.7 // indirect github.com/metacubex/sing v0.5.7 // indirect github.com/metacubex/sing-mux v0.3.9 // indirect - github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 // indirect + github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3 // indirect github.com/metacubex/sing-shadowsocks v0.2.12 // indirect github.com/metacubex/sing-shadowsocks2 v0.2.7 // indirect - github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 // indirect - github.com/metacubex/sing-tun v0.4.18 // indirect + github.com/metacubex/sing-shadowtls v0.0.0-20260517015314-c11c36474edc // indirect + github.com/metacubex/sing-tun v0.4.20 // indirect github.com/metacubex/sing-vmess v0.2.5 // indirect - github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect + github.com/metacubex/sing-wireguard v0.0.0-20260520151737-7e7c7c1b854c // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect github.com/metacubex/ssh v0.1.0 // indirect - github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe // indirect - github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect + github.com/metacubex/tailscale v0.0.0-20260520011538-f23132fac4b7 // indirect + github.com/metacubex/tailscale-wireguard-go v0.0.0-20260521124654-e1bf77ef79af // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect - github.com/metacubex/tls v0.1.5 // indirect + github.com/metacubex/tls v0.1.6 // indirect github.com/metacubex/utls v1.8.4 // indirect github.com/metacubex/wireguard-go v0.0.0-20250820062549-a6cecdd7f57f // indirect github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49 // indirect @@ -96,6 +96,7 @@ require ( github.com/oschwald/maxminddb-golang v1.12.0 // indirect github.com/pierrec/lz4/v4 v4.1.14 // indirect github.com/pires/go-proxyproto v0.8.0 // indirect + github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e // indirect github.com/safchain/ethtool v0.3.0 // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/samber/lo v1.53.0 // indirect diff --git a/core/src/foss/golang/go.sum b/core/src/foss/golang/go.sum index 6212e95859..10f27a2e59 100644 --- a/core/src/foss/golang/go.sum +++ b/core/src/foss/golang/go.sum @@ -25,8 +25,8 @@ github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dunglas/httpsfv v1.0.2 h1:iERDp/YAfnojSDJ7PW3dj1AReJz4MrwbECSSE59JWL0= github.com/dunglas/httpsfv v1.0.2/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg= -github.com/enfein/mieru/v3 v3.31.0 h1:Fl2ocRCRXJzMygzdRjBHgqI996ZuIDHUmyQyovSf9sA= -github.com/enfein/mieru/v3 v3.31.0/go.mod h1:zJBUCsi5rxyvHM8fjFf+GLaEl4OEjjBXr1s5F6Qd3hM= +github.com/enfein/mieru/v3 v3.33.0 h1:hv2jK8nqYHwpSG86U2rpZR2I8Aff1/J3ifRmd9NBbFc= +github.com/enfein/mieru/v3 v3.33.0/go.mod h1:zJBUCsi5rxyvHM8fjFf+GLaEl4OEjjBXr1s5F6Qd3hM= github.com/ericlagergren/aegis v0.0.0-20250325060835-cd0defd64358 h1:kXYqH/sL8dS/FdoFjr12ePjnLPorPo2FsnrHNuXSDyo= github.com/ericlagergren/aegis v0.0.0-20250325060835-cd0defd64358/go.mod h1:hkIFzoiIPZYxdFOOLyDho59b7SrDfo+w3h+yWdlg45I= github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 h1:8j2RH289RJplhA6WfdaPqzg1MjH2K8wX5e0uhAxrw2g= @@ -118,8 +118,8 @@ github.com/metacubex/hpke v0.1.0 h1:gu2jUNhraehWi0P/z5HX2md3d7L1FhPQE6/Q0E9r9xQ= github.com/metacubex/hpke v0.1.0/go.mod h1:vfDm6gfgrwlXUxKDkWbcE44hXtmc1uxLDm2BcR11b3U= github.com/metacubex/http v0.1.6 h1:xvXuvXMCMxCWMF5nEJF4yiKvXL+p2atWMzs37e80m1I= github.com/metacubex/http v0.1.6/go.mod h1:Nxx0zZAo2AhRfanyL+fmmK6ACMtVsfpwIl1aFAik2Eg= -github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c h1:KGhBHDe6FveU0ury+9RyX329nclM1CHODa0Fi+uOAYM= -github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c/go.mod h1:F4sVXat6QjPXkNsKRDyyG3BhSkxPFFnRPEIwmmyCgbg= +github.com/metacubex/jsonv2 v0.0.0-20260518173308-f4597c22f1df h1:S0vBzqjXok24VopstOgPd1JdgglW9tXehrqvwpQWbQ8= +github.com/metacubex/jsonv2 v0.0.0-20260518173308-f4597c22f1df/go.mod h1:F4sVXat6QjPXkNsKRDyyG3BhSkxPFFnRPEIwmmyCgbg= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 h1:hJwCVlE3ojViC35MGHB+FBr8TuIf3BUFn2EQ1VIamsI= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604/go.mod h1:lpmN3m269b3V5jFCWtffqBLS4U3QQoIid9ugtO+OhVc= github.com/metacubex/mhurl v0.1.0 h1:ZdW4Zxe3j3uJ89gNytOazHu6kbHn5owutN/VfXOI8GE= @@ -132,8 +132,8 @@ github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686 h1:PIXmYT2an github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686/go.mod h1:eQV7juxFZIdRgjMxtVqP+6BssKoTZQ1RM0fc58BsCZY= github.com/metacubex/qpack v0.6.0 h1:YqClGIMOpiRYLjV1qOs483Od08MdPgRnHjt90FuaAKw= github.com/metacubex/qpack v0.6.0/go.mod h1:lKGSi7Xk94IMvHGOmxS9eIei3bvIqpOAImEBsaOwTkA= -github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306 h1:HlGLmLsWJMLSu0CMI9z/BmEnithB4oXM5Rom6/0Qxtg= -github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306/go.mod h1:oNzMrmylS897M3zSMuapIdwSwfq6F2qW01Z3NhVRJhk= +github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace h1:KXacx7dp1GYVMgxezwXRt5BMsEbvAYuA6rPFUmdAvcQ= +github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace/go.mod h1:2YEQEvFrZ5V76oynMBDTlN+4fdnSHCa2uNJxv3cm1HU= github.com/metacubex/randv2 v0.2.0 h1:uP38uBvV2SxYfLj53kuvAjbND4RUDfFJjwr4UigMiLs= github.com/metacubex/randv2 v0.2.0/go.mod h1:kFi2SzrQ5WuneuoLLCMkABtiBu6VRrMrWFqSPyj2cxY= github.com/metacubex/restls-client-go v0.1.7 h1:eCwiXCTQb5WJu9IlgYvDBA1OgrINv58dEe7hcN5H15k= @@ -142,32 +142,32 @@ github.com/metacubex/sing v0.5.7 h1:8OC+fhKFSv/l9ehEhJRaZZAOuthfZo68SteBVLe8QqM= github.com/metacubex/sing v0.5.7/go.mod h1:ypf0mjwlZm0sKdQSY+yQvmsbWa0hNPtkeqyRMGgoN+w= github.com/metacubex/sing-mux v0.3.9 h1:/aoBD2+sK2qsXDlNDe3hkR0GZuFDtwIZhOeGUx9W0Yk= github.com/metacubex/sing-mux v0.3.9/go.mod h1:8bT7ZKT3clRrJjYc/x5CRYibC1TX/bK73a3r3+2E+Fc= -github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 h1:nZ5WNU6kjj6kBu4+2eMySFkUVGCop64rZnLMm+HPh8w= -github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= +github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3 h1:PnMby5+kZXTl/CFDHfxMbMTaSRD+uMKMsrDYVQyAmX8= +github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= github.com/metacubex/sing-shadowsocks v0.2.12 h1:Wqzo8bYXrK5aWqxu/TjlTnYZzAKtKsaFQBdr6IHFaBE= github.com/metacubex/sing-shadowsocks v0.2.12/go.mod h1:2e5EIaw0rxKrm1YTRmiMnDulwbGxH9hAFlrwQLQMQkU= github.com/metacubex/sing-shadowsocks2 v0.2.7 h1:hSuuc0YpsfiqYqt1o+fP4m34BQz4e6wVj3PPBVhor3A= github.com/metacubex/sing-shadowsocks2 v0.2.7/go.mod h1:vOEbfKC60txi0ca+yUlqEwOGc3Obl6cnSgx9Gf45KjE= -github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 h1:gXU+MYPm7Wme3/OAY2FFzVq9d9GxPHOqu5AQfg/ddhI= -github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E= -github.com/metacubex/sing-tun v0.4.18 h1:WRzAosG0YkT3aZq5RJWtF+RdCgeJ8EpooS5ZM1lkXo0= -github.com/metacubex/sing-tun v0.4.18/go.mod h1:g4I/JNplDBhXLF+aQWgFbhNeJPSXQOWS9HvLeNvkgeA= +github.com/metacubex/sing-shadowtls v0.0.0-20260517015314-c11c36474edc h1:8wLoFfYQ88iGPL+krQ5tJsI8IAmkFjKpQL2q+y3pvss= +github.com/metacubex/sing-shadowtls v0.0.0-20260517015314-c11c36474edc/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E= +github.com/metacubex/sing-tun v0.4.20 h1:xdupzizRoZKyDzP0l68WAx5Sk4ooiuT1GiWsiJyOGPw= +github.com/metacubex/sing-tun v0.4.20/go.mod h1:g4I/JNplDBhXLF+aQWgFbhNeJPSXQOWS9HvLeNvkgeA= github.com/metacubex/sing-vmess v0.2.5 h1:m9Zt5I27lB9fmLMZfism9sH2LcnAfShZfwSkf6/KJoE= github.com/metacubex/sing-vmess v0.2.5/go.mod h1:AwtlzUgf8COe9tRYAKqWZ+leDH7p5U98a0ZUpYehl8Q= -github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 h1:IB03BvRQtvjWScyOK5jSQVJYY8osmZXHL+4VCEFMWcM= -github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80= +github.com/metacubex/sing-wireguard v0.0.0-20260520151737-7e7c7c1b854c h1:tH9FuQW357zp2xAGzkoZTGpNGMVmEFZov0iV5M2S5ew= +github.com/metacubex/sing-wireguard v0.0.0-20260520151737-7e7c7c1b854c/go.mod h1:eQZDJTx+IH3k4mXqaOJ3VJ9h9ZqOl60F7TLi5wAU51Q= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2BhiAPgbJygiWhesPlfGmF+9Vw6ARdk= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= -github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe h1:ZdAKshacNruZGuKTE8WMTuxyGgpv/LySLoE/EEmgF9c= -github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= -github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= -github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= +github.com/metacubex/tailscale v0.0.0-20260520011538-f23132fac4b7 h1:LoJR4NMyNKHeEJoeGDtcsao7sV0NRkzMeV5H/0J0MIE= +github.com/metacubex/tailscale v0.0.0-20260520011538-f23132fac4b7/go.mod h1:MAo3HhE7968rIwmDvYTYE8xCsV4x+hLnkChdXeP3X4c= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260521124654-e1bf77ef79af h1:c60IbBMUq2h1M2m7+grMJJmBmrObxL8SwvNtm6Ozbwk= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260521124654-e1bf77ef79af/go.mod h1:i3zLKytWkOnyT1i9OmiLevWvrN5J5HE1+yjE7UYNfcQ= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443/go.mod h1:l9oLnLoEXyGZ5RVLsh7QCC5XsouTUyKk4F2nLm2DHLw= -github.com/metacubex/tls v0.1.5 h1:ECcB83dj+zadnhlKcLnUUf1Sq6+vU0f/zoyU0+9oPTc= -github.com/metacubex/tls v0.1.5/go.mod h1:0XeVdL0cBw+8i5Hqy3lVeP9IyD/LFTq02ExvHM6rzEM= +github.com/metacubex/tls v0.1.6 h1:t2ubLneYa4ceyIC++54a57BLqZFA/QYUrhdjLk2GPwo= +github.com/metacubex/tls v0.1.6/go.mod h1:0XeVdL0cBw+8i5Hqy3lVeP9IyD/LFTq02ExvHM6rzEM= github.com/metacubex/utls v1.8.4 h1:HmL9nUApDdWSkgUyodfwF6hSjtiwCGGdyhaSpEejKpg= github.com/metacubex/utls v1.8.4/go.mod h1:kncGGVhFaoGn5M3pFe3SXhZCzsbCJayNOH4UEqTKTko= github.com/metacubex/wireguard-go v0.0.0-20250820062549-a6cecdd7f57f h1:FGBPRb1zUabhPhDrlKEjQ9lgIwQ6cHL4x8M9lrERhbk= @@ -196,6 +196,8 @@ github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e h1:dCWirM5F3wMY+cmRda/B1BiPsFtmzXqV9b0hLWtVBMs= +github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e/go.mod h1:9leZcVcItj6m9/CfHY5Em/iBrCz7js8LcRQGTKEEv2M= github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0= github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZNjr6sGeT00J8uU7JF4cNUdb44/Duis= diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod index b237c6ed0d..dbfb52c455 100644 --- a/core/src/main/golang/go.mod +++ b/core/src/main/golang/go.mod @@ -21,7 +21,7 @@ require ( github.com/coder/websocket v1.8.12 // indirect github.com/coreos/go-iptables v0.8.0 // indirect github.com/dunglas/httpsfv v1.0.2 // indirect - github.com/enfein/mieru/v3 v3.31.0 // indirect + github.com/enfein/mieru/v3 v3.33.0 // indirect github.com/ericlagergren/aegis v0.0.0-20250325060835-cd0defd64358 // indirect github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 // indirect github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect @@ -65,30 +65,30 @@ require ( github.com/metacubex/hkdf v0.1.0 // indirect github.com/metacubex/hpke v0.1.0 // indirect github.com/metacubex/http v0.1.6 // indirect - github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c // indirect + github.com/metacubex/jsonv2 v0.0.0-20260518173308-f4597c22f1df // indirect github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 // indirect github.com/metacubex/mhurl v0.1.0 // indirect github.com/metacubex/mlkem v0.1.0 // indirect github.com/metacubex/nftables v0.0.0-20260426003805-208c2c1ba2cb // indirect github.com/metacubex/qpack v0.6.0 // indirect - github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306 // indirect + github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/restls-client-go v0.1.7 // indirect github.com/metacubex/sing v0.5.7 // indirect github.com/metacubex/sing-mux v0.3.9 // indirect - github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 // indirect + github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3 // indirect github.com/metacubex/sing-shadowsocks v0.2.12 // indirect github.com/metacubex/sing-shadowsocks2 v0.2.7 // indirect - github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 // indirect - github.com/metacubex/sing-tun v0.4.18 // indirect + github.com/metacubex/sing-shadowtls v0.0.0-20260517015314-c11c36474edc // indirect + github.com/metacubex/sing-tun v0.4.20 // indirect github.com/metacubex/sing-vmess v0.2.5 // indirect - github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 // indirect + github.com/metacubex/sing-wireguard v0.0.0-20260520151737-7e7c7c1b854c // indirect github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 // indirect github.com/metacubex/ssh v0.1.0 // indirect - github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe // indirect - github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 // indirect + github.com/metacubex/tailscale v0.0.0-20260520011538-f23132fac4b7 // indirect + github.com/metacubex/tailscale-wireguard-go v0.0.0-20260521124654-e1bf77ef79af // indirect github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 // indirect - github.com/metacubex/tls v0.1.5 // indirect + github.com/metacubex/tls v0.1.6 // indirect github.com/metacubex/utls v1.8.4 // indirect github.com/metacubex/wireguard-go v0.0.0-20250820062549-a6cecdd7f57f // indirect github.com/metacubex/yamux v0.0.0-20250918083631-dd5f17c0be49 // indirect @@ -100,6 +100,7 @@ require ( github.com/oschwald/maxminddb-golang v1.12.0 // indirect github.com/pierrec/lz4/v4 v4.1.14 // indirect github.com/pires/go-proxyproto v0.8.0 // indirect + github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e // indirect github.com/safchain/ethtool v0.3.0 // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/samber/lo v1.53.0 // indirect diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum index 6212e95859..10f27a2e59 100644 --- a/core/src/main/golang/go.sum +++ b/core/src/main/golang/go.sum @@ -25,8 +25,8 @@ github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dunglas/httpsfv v1.0.2 h1:iERDp/YAfnojSDJ7PW3dj1AReJz4MrwbECSSE59JWL0= github.com/dunglas/httpsfv v1.0.2/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg= -github.com/enfein/mieru/v3 v3.31.0 h1:Fl2ocRCRXJzMygzdRjBHgqI996ZuIDHUmyQyovSf9sA= -github.com/enfein/mieru/v3 v3.31.0/go.mod h1:zJBUCsi5rxyvHM8fjFf+GLaEl4OEjjBXr1s5F6Qd3hM= +github.com/enfein/mieru/v3 v3.33.0 h1:hv2jK8nqYHwpSG86U2rpZR2I8Aff1/J3ifRmd9NBbFc= +github.com/enfein/mieru/v3 v3.33.0/go.mod h1:zJBUCsi5rxyvHM8fjFf+GLaEl4OEjjBXr1s5F6Qd3hM= github.com/ericlagergren/aegis v0.0.0-20250325060835-cd0defd64358 h1:kXYqH/sL8dS/FdoFjr12ePjnLPorPo2FsnrHNuXSDyo= github.com/ericlagergren/aegis v0.0.0-20250325060835-cd0defd64358/go.mod h1:hkIFzoiIPZYxdFOOLyDho59b7SrDfo+w3h+yWdlg45I= github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 h1:8j2RH289RJplhA6WfdaPqzg1MjH2K8wX5e0uhAxrw2g= @@ -118,8 +118,8 @@ github.com/metacubex/hpke v0.1.0 h1:gu2jUNhraehWi0P/z5HX2md3d7L1FhPQE6/Q0E9r9xQ= github.com/metacubex/hpke v0.1.0/go.mod h1:vfDm6gfgrwlXUxKDkWbcE44hXtmc1uxLDm2BcR11b3U= github.com/metacubex/http v0.1.6 h1:xvXuvXMCMxCWMF5nEJF4yiKvXL+p2atWMzs37e80m1I= github.com/metacubex/http v0.1.6/go.mod h1:Nxx0zZAo2AhRfanyL+fmmK6ACMtVsfpwIl1aFAik2Eg= -github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c h1:KGhBHDe6FveU0ury+9RyX329nclM1CHODa0Fi+uOAYM= -github.com/metacubex/jsonv2 v0.0.0-20260513175203-1c6abea7534c/go.mod h1:F4sVXat6QjPXkNsKRDyyG3BhSkxPFFnRPEIwmmyCgbg= +github.com/metacubex/jsonv2 v0.0.0-20260518173308-f4597c22f1df h1:S0vBzqjXok24VopstOgPd1JdgglW9tXehrqvwpQWbQ8= +github.com/metacubex/jsonv2 v0.0.0-20260518173308-f4597c22f1df/go.mod h1:F4sVXat6QjPXkNsKRDyyG3BhSkxPFFnRPEIwmmyCgbg= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604 h1:hJwCVlE3ojViC35MGHB+FBr8TuIf3BUFn2EQ1VIamsI= github.com/metacubex/kcp-go v0.0.0-20260105040817-550693377604/go.mod h1:lpmN3m269b3V5jFCWtffqBLS4U3QQoIid9ugtO+OhVc= github.com/metacubex/mhurl v0.1.0 h1:ZdW4Zxe3j3uJ89gNytOazHu6kbHn5owutN/VfXOI8GE= @@ -132,8 +132,8 @@ github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686 h1:PIXmYT2an github.com/metacubex/protobuf-go v0.0.0-20260306035419-7ceee0674686/go.mod h1:eQV7juxFZIdRgjMxtVqP+6BssKoTZQ1RM0fc58BsCZY= github.com/metacubex/qpack v0.6.0 h1:YqClGIMOpiRYLjV1qOs483Od08MdPgRnHjt90FuaAKw= github.com/metacubex/qpack v0.6.0/go.mod h1:lKGSi7Xk94IMvHGOmxS9eIei3bvIqpOAImEBsaOwTkA= -github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306 h1:HlGLmLsWJMLSu0CMI9z/BmEnithB4oXM5Rom6/0Qxtg= -github.com/metacubex/quic-go v0.59.1-0.20260413153657-53bb22f2c306/go.mod h1:oNzMrmylS897M3zSMuapIdwSwfq6F2qW01Z3NhVRJhk= +github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace h1:KXacx7dp1GYVMgxezwXRt5BMsEbvAYuA6rPFUmdAvcQ= +github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace/go.mod h1:2YEQEvFrZ5V76oynMBDTlN+4fdnSHCa2uNJxv3cm1HU= github.com/metacubex/randv2 v0.2.0 h1:uP38uBvV2SxYfLj53kuvAjbND4RUDfFJjwr4UigMiLs= github.com/metacubex/randv2 v0.2.0/go.mod h1:kFi2SzrQ5WuneuoLLCMkABtiBu6VRrMrWFqSPyj2cxY= github.com/metacubex/restls-client-go v0.1.7 h1:eCwiXCTQb5WJu9IlgYvDBA1OgrINv58dEe7hcN5H15k= @@ -142,32 +142,32 @@ github.com/metacubex/sing v0.5.7 h1:8OC+fhKFSv/l9ehEhJRaZZAOuthfZo68SteBVLe8QqM= github.com/metacubex/sing v0.5.7/go.mod h1:ypf0mjwlZm0sKdQSY+yQvmsbWa0hNPtkeqyRMGgoN+w= github.com/metacubex/sing-mux v0.3.9 h1:/aoBD2+sK2qsXDlNDe3hkR0GZuFDtwIZhOeGUx9W0Yk= github.com/metacubex/sing-mux v0.3.9/go.mod h1:8bT7ZKT3clRrJjYc/x5CRYibC1TX/bK73a3r3+2E+Fc= -github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853 h1:nZ5WNU6kjj6kBu4+2eMySFkUVGCop64rZnLMm+HPh8w= -github.com/metacubex/sing-quic v0.0.0-20260512151354-8475655be853/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= +github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3 h1:PnMby5+kZXTl/CFDHfxMbMTaSRD+uMKMsrDYVQyAmX8= +github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3/go.mod h1:6ayFGfzzBE85csgQkM3gf4neFq6s0losHlPRSxY+nuk= github.com/metacubex/sing-shadowsocks v0.2.12 h1:Wqzo8bYXrK5aWqxu/TjlTnYZzAKtKsaFQBdr6IHFaBE= github.com/metacubex/sing-shadowsocks v0.2.12/go.mod h1:2e5EIaw0rxKrm1YTRmiMnDulwbGxH9hAFlrwQLQMQkU= github.com/metacubex/sing-shadowsocks2 v0.2.7 h1:hSuuc0YpsfiqYqt1o+fP4m34BQz4e6wVj3PPBVhor3A= github.com/metacubex/sing-shadowsocks2 v0.2.7/go.mod h1:vOEbfKC60txi0ca+yUlqEwOGc3Obl6cnSgx9Gf45KjE= -github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 h1:gXU+MYPm7Wme3/OAY2FFzVq9d9GxPHOqu5AQfg/ddhI= -github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E= -github.com/metacubex/sing-tun v0.4.18 h1:WRzAosG0YkT3aZq5RJWtF+RdCgeJ8EpooS5ZM1lkXo0= -github.com/metacubex/sing-tun v0.4.18/go.mod h1:g4I/JNplDBhXLF+aQWgFbhNeJPSXQOWS9HvLeNvkgeA= +github.com/metacubex/sing-shadowtls v0.0.0-20260517015314-c11c36474edc h1:8wLoFfYQ88iGPL+krQ5tJsI8IAmkFjKpQL2q+y3pvss= +github.com/metacubex/sing-shadowtls v0.0.0-20260517015314-c11c36474edc/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E= +github.com/metacubex/sing-tun v0.4.20 h1:xdupzizRoZKyDzP0l68WAx5Sk4ooiuT1GiWsiJyOGPw= +github.com/metacubex/sing-tun v0.4.20/go.mod h1:g4I/JNplDBhXLF+aQWgFbhNeJPSXQOWS9HvLeNvkgeA= github.com/metacubex/sing-vmess v0.2.5 h1:m9Zt5I27lB9fmLMZfism9sH2LcnAfShZfwSkf6/KJoE= github.com/metacubex/sing-vmess v0.2.5/go.mod h1:AwtlzUgf8COe9tRYAKqWZ+leDH7p5U98a0ZUpYehl8Q= -github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947 h1:IB03BvRQtvjWScyOK5jSQVJYY8osmZXHL+4VCEFMWcM= -github.com/metacubex/sing-wireguard v0.0.0-20260507084707-690d479ec947/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80= +github.com/metacubex/sing-wireguard v0.0.0-20260520151737-7e7c7c1b854c h1:tH9FuQW357zp2xAGzkoZTGpNGMVmEFZov0iV5M2S5ew= +github.com/metacubex/sing-wireguard v0.0.0-20260520151737-7e7c7c1b854c/go.mod h1:eQZDJTx+IH3k4mXqaOJ3VJ9h9ZqOl60F7TLi5wAU51Q= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141 h1:DK2l6m2Fc85H2BhiAPgbJygiWhesPlfGmF+9Vw6ARdk= github.com/metacubex/smux v0.0.0-20260105030934-d0c8756d3141/go.mod h1:/yI4OiGOSn0SURhZdJF3CbtPg3nwK700bG8TZLMBvAg= github.com/metacubex/ssh v0.1.0 h1:iGfr99qk/eMHzUnQ/0bTxXT8+8SWqLSHBWDHoAhngzw= github.com/metacubex/ssh v0.1.0/go.mod h1:NUtl0d+/f2cG9ECEpMM8iCVOpmggQlC13oLeDUONDlU= -github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe h1:ZdAKshacNruZGuKTE8WMTuxyGgpv/LySLoE/EEmgF9c= -github.com/metacubex/tailscale v0.0.0-20260516120020-a21c2c99dcbe/go.mod h1:2G1V82OGXgxT7m7046GA80I9SlcvczljCK0C7NQ3c10= -github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04 h1:zk+mDDSBl5lv80WWtaFUbpj8XLb7AhjCUbn2pB37N0U= -github.com/metacubex/tailscale-wireguard-go v0.0.0-20260513233728-8bc7ee255d04/go.mod h1:pKUKBy7IcQ5r0i66gWENHgxKvBn8tlgAGx0DZMq8h5M= +github.com/metacubex/tailscale v0.0.0-20260520011538-f23132fac4b7 h1:LoJR4NMyNKHeEJoeGDtcsao7sV0NRkzMeV5H/0J0MIE= +github.com/metacubex/tailscale v0.0.0-20260520011538-f23132fac4b7/go.mod h1:MAo3HhE7968rIwmDvYTYE8xCsV4x+hLnkChdXeP3X4c= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260521124654-e1bf77ef79af h1:c60IbBMUq2h1M2m7+grMJJmBmrObxL8SwvNtm6Ozbwk= +github.com/metacubex/tailscale-wireguard-go v0.0.0-20260521124654-e1bf77ef79af/go.mod h1:i3zLKytWkOnyT1i9OmiLevWvrN5J5HE1+yjE7UYNfcQ= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443 h1:H6TnfM12tOoTizYE/qBHH3nEuibIelmHI+BVSxVJr8o= github.com/metacubex/tfo-go v0.0.0-20251130171125-413e892ac443/go.mod h1:l9oLnLoEXyGZ5RVLsh7QCC5XsouTUyKk4F2nLm2DHLw= -github.com/metacubex/tls v0.1.5 h1:ECcB83dj+zadnhlKcLnUUf1Sq6+vU0f/zoyU0+9oPTc= -github.com/metacubex/tls v0.1.5/go.mod h1:0XeVdL0cBw+8i5Hqy3lVeP9IyD/LFTq02ExvHM6rzEM= +github.com/metacubex/tls v0.1.6 h1:t2ubLneYa4ceyIC++54a57BLqZFA/QYUrhdjLk2GPwo= +github.com/metacubex/tls v0.1.6/go.mod h1:0XeVdL0cBw+8i5Hqy3lVeP9IyD/LFTq02ExvHM6rzEM= github.com/metacubex/utls v1.8.4 h1:HmL9nUApDdWSkgUyodfwF6hSjtiwCGGdyhaSpEejKpg= github.com/metacubex/utls v1.8.4/go.mod h1:kncGGVhFaoGn5M3pFe3SXhZCzsbCJayNOH4UEqTKTko= github.com/metacubex/wireguard-go v0.0.0-20250820062549-a6cecdd7f57f h1:FGBPRb1zUabhPhDrlKEjQ9lgIwQ6cHL4x8M9lrERhbk= @@ -196,6 +196,8 @@ github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e h1:dCWirM5F3wMY+cmRda/B1BiPsFtmzXqV9b0hLWtVBMs= +github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e/go.mod h1:9leZcVcItj6m9/CfHY5Em/iBrCz7js8LcRQGTKEEv2M= github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0= github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZNjr6sGeT00J8uU7JF4cNUdb44/Duis= From c05032b734fb2957d0c36bbc08ff899d83959d81 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 31 May 2026 16:40:13 +0000 Subject: [PATCH 17/32] Bump version to 2.11.29 (211029) --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a85575129a..ee0121370f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -58,8 +58,8 @@ subprojects { minSdk = 21 targetSdk = 35 - versionName = "2.11.28" - versionCode = 211028 + versionName = "2.11.29" + versionCode = 211029 resValue("string", "release_name", "v$versionName") resValue("integer", "release_code", "$versionCode") From 71cb215daa8f8fb3ce2a2bdc400459744d883f0b Mon Sep 17 00:00:00 2001 From: Alexander <46811887+AlexFozor@users.noreply.github.com> Date: Mon, 1 Jun 2026 19:13:36 +0200 Subject: [PATCH 18/32] fix(profile): prevent HTTP header from overriding custom update intervals (#757) --- .../java/com/github/kr328/clash/service/ProfileProcessor.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt index e3dd0d5a13..710f5d48c6 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt @@ -106,7 +106,7 @@ object ProfileProcessor { } val updateIntervalHeader = response.headers["profile-update-interval"] - if (response.isSuccessful && updateIntervalHeader != null) { + if (old == null && snapshot.interval == 0L && response.isSuccessful && updateIntervalHeader != null) { val intervalHours = updateIntervalHeader.toLongOrNull() if (intervalHours != null) { updateInterval = if (intervalHours > 0) { From 7f63b750f2194c8b1bd56bc2f5ca1055d2c028b0 Mon Sep 17 00:00:00 2001 From: "clash-meta-maintainer[bot]" <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 20:39:52 +0800 Subject: [PATCH 19/32] Update Dependencies (#758) Co-authored-by: clash-meta-maintainer[bot] <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> --- core/src/foss/golang/clash | 2 +- core/src/foss/golang/go.mod | 1 + core/src/foss/golang/go.sum | 2 ++ core/src/main/golang/go.mod | 1 + core/src/main/golang/go.sum | 2 ++ 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/src/foss/golang/clash b/core/src/foss/golang/clash index fc8c5a24b1..9761bcd7f9 160000 --- a/core/src/foss/golang/clash +++ b/core/src/foss/golang/clash @@ -1 +1 @@ -Subproject commit fc8c5a24b16991f98cd736950c17d1aa306a5041 +Subproject commit 9761bcd7f933a1d53aacfb29e7e623c827abc3bc diff --git a/core/src/foss/golang/go.mod b/core/src/foss/golang/go.mod index 4f3b5eedad..6558ae9155 100644 --- a/core/src/foss/golang/go.mod +++ b/core/src/foss/golang/go.mod @@ -44,6 +44,7 @@ require ( github.com/klauspost/reedsolomon v1.12.3 // indirect github.com/mdlayher/netlink v1.7.2 // indirect github.com/mdlayher/socket v0.5.1 // indirect + github.com/metacubex/age v0.0.0-20260603010618-28d156b4ea78 // indirect github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d // indirect github.com/metacubex/ascon v0.1.0 // indirect github.com/metacubex/bart v0.26.0 // indirect diff --git a/core/src/foss/golang/go.sum b/core/src/foss/golang/go.sum index 10f27a2e59..b524747070 100644 --- a/core/src/foss/golang/go.sum +++ b/core/src/foss/golang/go.sum @@ -86,6 +86,8 @@ github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/ github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= +github.com/metacubex/age v0.0.0-20260603010618-28d156b4ea78 h1:LqWr0vb9zDNuQS+jJd4fnRYk/SEI7KJ7TDe/L4WFK48= +github.com/metacubex/age v0.0.0-20260603010618-28d156b4ea78/go.mod h1:BTBG/iVY7rg3qq5WdVCg0GFk58CSvCDSbjy8I7kEx/c= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d h1:vAJ0ZT4aO803F1uw2roIA9yH7Sxzox34tVVyye1bz6c= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d/go.mod h1:MsM/5czONyXMJ3PRr5DbQ4O/BxzAnJWOIcJdLzW6qHY= github.com/metacubex/ascon v0.1.0 h1:6ZWxmXYszT1XXtwkf6nxfFhc/OTtQ9R3Vyj1jN32lGM= diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod index dbfb52c455..7ac5c97305 100644 --- a/core/src/main/golang/go.mod +++ b/core/src/main/golang/go.mod @@ -49,6 +49,7 @@ require ( github.com/klauspost/reedsolomon v1.12.3 // indirect github.com/mdlayher/netlink v1.7.2 // indirect github.com/mdlayher/socket v0.5.1 // indirect + github.com/metacubex/age v0.0.0-20260603010618-28d156b4ea78 // indirect github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d // indirect github.com/metacubex/ascon v0.1.0 // indirect github.com/metacubex/bart v0.26.0 // indirect diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum index 10f27a2e59..b524747070 100644 --- a/core/src/main/golang/go.sum +++ b/core/src/main/golang/go.sum @@ -86,6 +86,8 @@ github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/ github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= +github.com/metacubex/age v0.0.0-20260603010618-28d156b4ea78 h1:LqWr0vb9zDNuQS+jJd4fnRYk/SEI7KJ7TDe/L4WFK48= +github.com/metacubex/age v0.0.0-20260603010618-28d156b4ea78/go.mod h1:BTBG/iVY7rg3qq5WdVCg0GFk58CSvCDSbjy8I7kEx/c= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d h1:vAJ0ZT4aO803F1uw2roIA9yH7Sxzox34tVVyye1bz6c= github.com/metacubex/amneziawg-go v0.0.0-20251104174305-5a0e9f7e361d/go.mod h1:MsM/5czONyXMJ3PRr5DbQ4O/BxzAnJWOIcJdLzW6qHY= github.com/metacubex/ascon v0.1.0 h1:6ZWxmXYszT1XXtwkf6nxfFhc/OTtQ9R3Vyj1jN32lGM= From a69dd69aa7d25356b9b824d769928ecb0b7ba94c Mon Sep 17 00:00:00 2001 From: LinBeitsi <58358419+NevadaCities@users.noreply.github.com> Date: Thu, 4 Jun 2026 21:00:32 +0800 Subject: [PATCH 20/32] feat(profile): support age secret keys (#764) --- .../kr328/clash/ExternalControlActivity.kt | 4 +- .../github/kr328/clash/PropertiesActivity.kt | 4 +- core/src/main/cpp/main.c | 23 +++++-- core/src/main/golang/native/config.go | 13 +++- core/src/main/golang/native/config/age.go | 7 ++ .../java/com/github/kr328/clash/core/Clash.kt | 4 ++ .../github/kr328/clash/core/bridge/Bridge.kt | 2 + .../kr328/clash/design/PropertiesDesign.kt | 17 +++++ .../kr328/clash/design/util/Validator.kt | 4 ++ .../src/main/res/drawable/ic_baseline_key.xml | 3 + .../src/main/res/layout/design_properties.xml | 10 +++ design/src/main/res/values-ja-rJP/strings.xml | 3 + design/src/main/res/values-ko-rKR/strings.xml | 3 + design/src/main/res/values-ru/strings.xml | 3 + design/src/main/res/values-vi/strings.xml | 3 + design/src/main/res/values-zh-rHK/strings.xml | 3 + design/src/main/res/values-zh-rTW/strings.xml | 3 + design/src/main/res/values-zh/strings.xml | 3 + design/src/main/res/values/strings.xml | 3 + .../kr328/clash/service/ProfileManager.kt | 40 ++++++----- .../kr328/clash/service/ProfileProcessor.kt | 66 +++++++++---------- .../clash/module/ConfigurationModule.kt | 4 +- .../kr328/clash/service/data/Database.kt | 4 +- .../kr328/clash/service/data/Imported.kt | 1 + .../kr328/clash/service/data/Pending.kt | 1 + .../service/data/migrations/Migrations.kt | 14 +++- .../kr328/clash/service/document/Picker.kt | 3 +- .../kr328/clash/service/model/Profile.kt | 5 +- .../clash/service/remote/IProfileManager.kt | 6 +- 29 files changed, 187 insertions(+), 72 deletions(-) create mode 100644 core/src/main/golang/native/config/age.go create mode 100644 design/src/main/res/drawable/ic_baseline_key.xml diff --git a/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt b/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt index ba80d03835..2f451ebf73 100644 --- a/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/ExternalControlActivity.kt @@ -47,7 +47,7 @@ class ExternalControlActivity : Activity(), CoroutineScope by MainScope() { val intervalMs = java.util.concurrent.TimeUnit.MINUTES.toMillis(updateInterval) create(type, name).also { - patch(it, name, url, intervalMs) + patch(it, name, url, intervalMs, null) } } startActivity(PropertiesActivity::class.intent.setUUID(uuid)) @@ -103,4 +103,4 @@ class ExternalControlActivity : Activity(), CoroutineScope by MainScope() { @Suppress("DEPRECATION") overridePendingTransition(0, 0) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/github/kr328/clash/PropertiesActivity.kt b/app/src/main/java/com/github/kr328/clash/PropertiesActivity.kt index 62adc8bca3..a6fc07550a 100644 --- a/app/src/main/java/com/github/kr328/clash/PropertiesActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/PropertiesActivity.kt @@ -45,7 +45,7 @@ class PropertiesActivity : BaseActivity() { if (!canceled && profile != original) { withProfile { - patch(profile.uuid, profile.name, profile.source, profile.interval) + patch(profile.uuid, profile.name, profile.source, profile.interval, profile.ageSecretKey) } } } @@ -92,7 +92,7 @@ class PropertiesActivity : BaseActivity() { try { withProcessing { updateStatus -> withProfile { - patch(profile.uuid, profile.name, profile.source, profile.interval) + patch(profile.uuid, profile.name, profile.source, profile.interval, profile.ageSecretKey) coroutineScope { commit(profile.uuid) { diff --git a/core/src/main/cpp/main.c b/core/src/main/cpp/main.c index 914bf7d9b6..20c5a46b83 100644 --- a/core/src/main/cpp/main.c +++ b/core/src/main/cpp/main.c @@ -226,9 +226,9 @@ Java_com_github_kr328_clash_core_bridge_Bridge_nativeLoad(JNIEnv *env, jobject t JNIEXPORT void JNICALL Java_com_github_kr328_clash_core_bridge_Bridge_nativeFetchAndValid(JNIEnv *env, jobject thiz, - jobject callback, - jstring path, - jstring url, jboolean force) { + jobject callback, + jstring path, + jstring url, jboolean force) { TRACE_METHOD(); jobject _completable = new_global(callback); @@ -238,6 +238,21 @@ Java_com_github_kr328_clash_core_bridge_Bridge_nativeFetchAndValid(JNIEnv *env, fetchAndValid(_completable, _path, _url, force); } +JNIEXPORT void JNICALL +Java_com_github_kr328_clash_core_bridge_Bridge_nativeSetAgeSecretKey(JNIEnv *env, jobject thiz, + jstring key) { + TRACE_METHOD(); + + if (key == NULL) { + setAgeSecretKey(NULL); + return; + } + + scoped_string _key = get_string(key); + + setAgeSecretKey(_key); +} + JNIEXPORT jstring JNICALL Java_com_github_kr328_clash_core_bridge_Bridge_nativeQueryProviders(JNIEnv *env, jobject thiz) { TRACE_METHOD(); @@ -526,4 +541,4 @@ Java_com_github_kr328_clash_core_bridge_Bridge_nativeCoreVersion(JNIEnv *env, jo char* Version = make_String(GIT_VERSION); return new_string(Version); -} \ No newline at end of file +} diff --git a/core/src/main/golang/native/config.go b/core/src/main/golang/native/config.go index f1e41606aa..6338bd138c 100644 --- a/core/src/main/golang/native/config.go +++ b/core/src/main/golang/native/config.go @@ -59,4 +59,15 @@ func writeOverride(slot C.int, content C.c_string) { //export clearOverride func clearOverride(slot C.int) { config.ClearOverride(config.OverrideSlot(slot)) -} \ No newline at end of file +} + +//export setAgeSecretKey +func setAgeSecretKey(key C.c_string) { + if key == nil { + config.SetGlobalSecretKeys() + return + } + + k := C.GoString(key) + config.SetGlobalSecretKeys(k) +} diff --git a/core/src/main/golang/native/config/age.go b/core/src/main/golang/native/config/age.go new file mode 100644 index 0000000000..5348dd8370 --- /dev/null +++ b/core/src/main/golang/native/config/age.go @@ -0,0 +1,7 @@ +package config + +import "github.com/metacubex/mihomo/component/age" + +func SetGlobalSecretKeys(secretKeys ...string) { + age.SetGlobalSecretKeys(secretKeys...) +} diff --git a/core/src/main/java/com/github/kr328/clash/core/Clash.kt b/core/src/main/java/com/github/kr328/clash/core/Clash.kt index a3be5fa561..bc87822325 100644 --- a/core/src/main/java/com/github/kr328/clash/core/Clash.kt +++ b/core/src/main/java/com/github/kr328/clash/core/Clash.kt @@ -225,4 +225,8 @@ object Clash { }) } } + + fun setAgeSecretKey(key: String?) { + Bridge.nativeSetAgeSecretKey(key) + } } \ No newline at end of file diff --git a/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt b/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt index 66df597d75..6007ff1d0d 100644 --- a/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt +++ b/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt @@ -50,6 +50,8 @@ object Bridge { external fun nativeSubscribeLogcat(callback: LogcatInterface) external fun nativeCoreVersion(): String + external fun nativeSetAgeSecretKey(key: String?) + private external fun nativeInit(home: String, versionName: String, sdkVersion: Int) init { diff --git a/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt b/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt index e18fafdf33..c3b5d56e82 100644 --- a/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/PropertiesDesign.kt @@ -121,6 +121,23 @@ class PropertiesDesign(context: Context) : Design(cont } } + fun inputAgeSecretKey() { + launch { + val ageSecretKey = context.requestModelTextInput( + initial = profile.ageSecretKey ?: "", + title = context.getText(R.string.age_secret_key), + hint = context.getText(R.string.age_secret_key_hint), + error = context.getText(R.string.age_secret_key_error), + validator = ValidatorAgeSecretKey + ) + + val newKey = ageSecretKey.ifBlank { null } + if (newKey != profile.ageSecretKey) { + profile = profile.copy(ageSecretKey = newKey) + } + } + } + fun inputInterval() { launch { var minutes = TimeUnit.MILLISECONDS.toMinutes(profile.interval) diff --git a/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt b/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt index f78f6e4225..8fa8723251 100644 --- a/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt +++ b/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt @@ -22,4 +22,8 @@ val ValidatorHttpUrl: Validator = { val ValidatorAutoUpdateInterval: Validator = { it.isEmpty() || (it.toLongOrNull() ?: 0) >= 15 +} + +val ValidatorAgeSecretKey: Validator = { + it.isEmpty() || it.startsWith("AGE-SECRET-KEY-", ignoreCase = true) } \ No newline at end of file diff --git a/design/src/main/res/drawable/ic_baseline_key.xml b/design/src/main/res/drawable/ic_baseline_key.xml new file mode 100644 index 0000000000..d2cd6f1138 --- /dev/null +++ b/design/src/main/res/drawable/ic_baseline_key.xml @@ -0,0 +1,3 @@ + + + diff --git a/design/src/main/res/layout/design_properties.xml b/design/src/main/res/layout/design_properties.xml index b037d95cc7..a234bba265 100644 --- a/design/src/main/res/layout/design_properties.xml +++ b/design/src/main/res/layout/design_properties.xml @@ -77,6 +77,16 @@ app:text="@{profile.source}" app:title="@string/url" /> + + http(s) のみを許可 15分以上か空白にしてください 空白にはできません + Age秘密鍵 + AGE-SECRET-KEY-…(任意) + フォーマットが無効です。鍵は AGE-SECRET-KEY- で始まる必要があります 詳細 更新 編集 diff --git a/design/src/main/res/values-ko-rKR/strings.xml b/design/src/main/res/values-ko-rKR/strings.xml index ab0bbf0a5e..5e858be606 100644 --- a/design/src/main/res/values-ko-rKR/strings.xml +++ b/design/src/main/res/values-ko-rKR/strings.xml @@ -47,6 +47,9 @@ http(s) 연결만 허용 최소 15분 이상 또는 공백 이 필드는 공백이 허용되지 않습니다. + Age 비밀 키 + AGE-SECRET-KEY-…(선택사항) + 잘못된 형식입니다. 키는 AGE-SECRET-KEY- 로 시작해야 합니다 자세히 업데이트 편집 diff --git a/design/src/main/res/values-ru/strings.xml b/design/src/main/res/values-ru/strings.xml index 342b639d28..f81525e3b7 100644 --- a/design/src/main/res/values-ru/strings.xml +++ b/design/src/main/res/values-ru/strings.xml @@ -57,6 +57,9 @@ Принимать только http(s) Не менее 15 минут или пустой Не должно быть пустым + Секретный ключ Age + AGE-SECRET-KEY-… (необязательно) + Неверный формат. Ключ должен начинаться с AGE-SECRET-KEY- Детали Обновить Изменить diff --git a/design/src/main/res/values-vi/strings.xml b/design/src/main/res/values-vi/strings.xml index 2bf8aacad4..fd337de68f 100644 --- a/design/src/main/res/values-vi/strings.xml +++ b/design/src/main/res/values-vi/strings.xml @@ -25,6 +25,9 @@ Các gói kiểm soát truy cập Định cấu hình quyền truy cập cho các ứng dụng Hồ sơ cần được lưu trước khi kích hoạt + Khóa bí mật Age + AGE-SECRET-KEY-… (tùy chọn) + Định dạng không hợp lệ. Khóa phải bắt đầu bằng AGE-SECRET-KEY- Cho phép tất cả các ứng dụng Cho phép bỏ qua Cho phép tất cả các ứng dụng bỏ qua kết nối VPN này diff --git a/design/src/main/res/values-zh-rHK/strings.xml b/design/src/main/res/values-zh-rHK/strings.xml index 537b33f3ee..9a83b6e048 100644 --- a/design/src/main/res/values-zh-rHK/strings.xml +++ b/design/src/main/res/values-zh-rHK/strings.xml @@ -78,6 +78,9 @@ 更新時間 應用包名稱 安裝時間 + Age 私鑰 + AGE-SECRET-KEY-…(可選) + 格式無效。密鑰應以 AGE-SECRET-KEY- 開頭 反饋 Github Issues Clash 配置文件(包含代理/規則)]]> diff --git a/design/src/main/res/values-zh-rTW/strings.xml b/design/src/main/res/values-zh-rTW/strings.xml index cf70cc2d41..feca4582c9 100644 --- a/design/src/main/res/values-zh-rTW/strings.xml +++ b/design/src/main/res/values-zh-rTW/strings.xml @@ -78,6 +78,9 @@ 更新時間 套件名稱 安裝時間 + Age 私鑰 + AGE-SECRET-KEY-…(選填) + 格式無效。金鑰應以 AGE-SECRET-KEY- 開頭 回饋 Github Issues Clash 設定檔 (包含Proxy /規則)]]> diff --git a/design/src/main/res/values-zh/strings.xml b/design/src/main/res/values-zh/strings.xml index 31c1371995..09de0724bd 100644 --- a/design/src/main/res/values-zh/strings.xml +++ b/design/src/main/res/values-zh/strings.xml @@ -78,6 +78,9 @@ VpnService 选项 选项在 Clash 运行时不可用 查找 + Age 私钥 + AGE-SECRET-KEY-…(可选) + 格式无效。密钥应以 AGE-SECRET-KEY- 开头 系统应用 更新时间 应用包名称 diff --git a/design/src/main/res/values/strings.xml b/design/src/main/res/values/strings.xml index 0808ae4bd9..f4afaa29fe 100644 --- a/design/src/main/res/values/strings.xml +++ b/design/src/main/res/values/strings.xml @@ -62,6 +62,9 @@ Accept only http(s) At least 15 minutes or empty + Age Secret Key + AGE-SECRET-KEY-… (optional) + Invalid format. Key should start with AGE-SECRET-KEY- Should not be blank Detail Update diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt index 848dd3d20e..b5f1e1e339 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt @@ -37,7 +37,7 @@ class ProfileManager(private val context: Context) : IProfileManager, } } - override suspend fun create(type: Profile.Type, name: String, source: String): UUID { + override suspend fun create(type: Profile.Type, name: String, source: String, ageSecretKey: String?): UUID { val uuid = generateProfileUUID() val pending = Pending( uuid = uuid, @@ -49,6 +49,7 @@ class ProfileManager(private val context: Context) : IProfileManager, total = 0, download = 0, expire = 0, + ageSecretKey = ageSecretKey, ) PendingDao().insert(pending) @@ -81,6 +82,7 @@ class ProfileManager(private val context: Context) : IProfileManager, total = imported.total, download = imported.download, expire = imported.expire, + ageSecretKey = imported.ageSecretKey ) cloneImportedFiles(uuid, newUUID) @@ -90,7 +92,7 @@ class ProfileManager(private val context: Context) : IProfileManager, return newUUID } - override suspend fun patch(uuid: UUID, name: String, source: String, interval: Long) { + override suspend fun patch(uuid: UUID, name: String, source: String, interval: Long, ageSecretKey: String?) { val pending = PendingDao().queryByUUID(uuid) if (pending == null) { @@ -110,6 +112,7 @@ class ProfileManager(private val context: Context) : IProfileManager, total = 0, download = 0, expire = 0, + ageSecretKey = ageSecretKey, ) ) } else { @@ -121,6 +124,7 @@ class ProfileManager(private val context: Context) : IProfileManager, total = 0, download = 0, expire = 0, + ageSecretKey = ageSecretKey, ) PendingDao().update(newPending) @@ -188,7 +192,8 @@ class ProfileManager(private val context: Context) : IProfileManager, download, total, expire, - old?.createdAt ?: System.currentTimeMillis() + old?.createdAt ?: System.currentTimeMillis(), + ageSecretKey = old.ageSecretKey ) if (old != null) { @@ -266,19 +271,20 @@ class ProfileManager(private val context: Context) : IProfileManager, val expire = pending?.expire ?: imported?.expire ?: return null return Profile( - uuid, - name, - type, - source, - active != null && imported?.uuid == active, - interval, - upload, - download, - total, - expire, - resolveUpdatedAt(uuid), - imported != null, - pending != null + uuid = uuid, + name = name, + type = type, + source = source, + active = active != null && imported?.uuid == active, + interval = interval, + upload = upload, + download = download, + total = total, + expire = expire, + updatedAt = resolveUpdatedAt(uuid), + imported = imported != null, + pending = pending != null, + ageSecretKey = if (pending != null) pending.ageSecretKey else imported?.ageSecretKey, ) } @@ -309,4 +315,4 @@ class ProfileManager(private val context: Context) : IProfileManager, ProfileReceiver.scheduleNext(context, imported) } } -} \ No newline at end of file +} diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt index 710f5d48c6..6ad6276954 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt @@ -22,7 +22,6 @@ import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request import java.math.BigDecimal -import java.net.URL import java.util.* import java.util.concurrent.TimeUnit @@ -34,8 +33,8 @@ object ProfileProcessor { withContext(NonCancellable) { processLock.withLock { val snapshot = profileLock.withLock { - val pending = PendingDao().queryByUUID(uuid) - ?: throw IllegalArgumentException("profile $uuid not found") + val pending = + PendingDao().queryByUUID(uuid) ?: throw IllegalArgumentException("profile $uuid not found") pending.enforceFieldValid() @@ -48,6 +47,8 @@ object ProfileProcessor { pending } + Clash.setAgeSecretKey(snapshot.ageSecretKey?.takeIf { it.isNotBlank() }) + val force = snapshot.type != Profile.Type.File var cb = callback @@ -63,10 +64,8 @@ object ProfileProcessor { profileLock.withLock { if (PendingDao().queryByUUID(snapshot.uuid) == snapshot) { - context.importedDir.resolve(snapshot.uuid.toString()) - .deleteRecursively() - context.processingDir - .copyRecursively(context.importedDir.resolve(snapshot.uuid.toString())) + context.importedDir.resolve(snapshot.uuid.toString()).deleteRecursively() + context.processingDir.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString())) val old = ImportedDao().queryByUUID(snapshot.uuid) var upload: Long = 0 @@ -77,11 +76,10 @@ object ProfileProcessor { if (snapshot?.type == Profile.Type.Url) { if (snapshot.source.startsWith("https://", true)) { val client = OkHttpClient() - val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName - val request = Request.Builder() - .url(snapshot.source) - .header("User-Agent", "ClashMetaForAndroid/$versionName") - .build() + val versionName = + context.packageManager.getPackageInfo(context.packageName, 0).versionName + val request = Request.Builder().url(snapshot.source) + .header("User-Agent", "ClashMetaForAndroid/$versionName").build() client.newCall(request).execute().use { response -> val userinfo = response.headers["subscription-userinfo"] @@ -99,7 +97,7 @@ object ProfileProcessor { info[0].contains("total") && info[1].isNotEmpty() -> total = BigDecimal(info[1].split('.').first()).longValueExact() - info[0].contains("expire") && info[1].isNotEmpty() -> expire = + info[0].contains("expire") && info[1].isNotEmpty() -> expire = (info[1].toDouble() * 1000).toLong() } } @@ -110,8 +108,8 @@ object ProfileProcessor { val intervalHours = updateIntervalHeader.toLongOrNull() if (intervalHours != null) { updateInterval = if (intervalHours > 0) { - java.util.concurrent.TimeUnit.HOURS.toMillis(intervalHours) - .coerceAtLeast(java.util.concurrent.TimeUnit.MINUTES.toMillis(15)) + TimeUnit.HOURS.toMillis(intervalHours) + .coerceAtLeast(TimeUnit.MINUTES.toMillis(15)) } else { 0L } @@ -129,7 +127,8 @@ object ProfileProcessor { download, total, expire, - old?.createdAt ?: System.currentTimeMillis() + old?.createdAt ?: System.currentTimeMillis(), + ageSecretKey = snapshot.ageSecretKey ) if (old != null) { ImportedDao().update(new) @@ -139,8 +138,7 @@ object ProfileProcessor { PendingDao().remove(snapshot.uuid) - context.pendingDir.resolve(snapshot.uuid.toString()) - .deleteRecursively() + context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively() context.sendProfileChanged(snapshot.uuid) } else if (snapshot?.type == Profile.Type.File) { @@ -154,7 +152,8 @@ object ProfileProcessor { download, total, expire, - old?.createdAt ?: System.currentTimeMillis() + old?.createdAt ?: System.currentTimeMillis(), + ageSecretKey = snapshot.ageSecretKey ) if (old != null) { ImportedDao().update(new) @@ -164,8 +163,7 @@ object ProfileProcessor { PendingDao().remove(snapshot.uuid) - context.pendingDir.resolve(snapshot.uuid.toString()) - .deleteRecursively() + context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively() context.sendProfileChanged(snapshot.uuid) } @@ -179,8 +177,8 @@ object ProfileProcessor { withContext(NonCancellable) { processLock.withLock { val snapshot = profileLock.withLock { - val imported = ImportedDao().queryByUUID(uuid) - ?: throw IllegalArgumentException("profile $uuid not found") + val imported = + ImportedDao().queryByUUID(uuid) ?: throw IllegalArgumentException("profile $uuid not found") context.processingDir.deleteRecursively() context.processingDir.mkdirs() @@ -191,6 +189,8 @@ object ProfileProcessor { imported } + Clash.setAgeSecretKey(snapshot.ageSecretKey?.takeIf { it.isNotBlank() }) + var cb = callback Clash.fetchAndValid(context.processingDir, snapshot.source, true) { @@ -206,8 +206,7 @@ object ProfileProcessor { profileLock.withLock { if (ImportedDao().exists(snapshot.uuid)) { context.importedDir.resolve(snapshot.uuid.toString()).deleteRecursively() - context.processingDir - .copyRecursively(context.importedDir.resolve(snapshot.uuid.toString())) + context.processingDir.copyRecursively(context.importedDir.resolve(snapshot.uuid.toString())) context.sendProfileChanged(snapshot.uuid) } @@ -261,17 +260,16 @@ object ProfileProcessor { val scheme = Uri.parse(source)?.scheme?.lowercase(Locale.getDefault()) when { - name.isBlank() -> - throw IllegalArgumentException("Empty name") + name.isBlank() -> throw IllegalArgumentException("Empty name") - source.isEmpty() && type != Profile.Type.File -> - throw IllegalArgumentException("Invalid url") + source.isEmpty() && type != Profile.Type.File -> throw IllegalArgumentException("Invalid url") - source.isNotEmpty() && scheme != "https" && scheme != "http" && scheme != "content" -> - throw IllegalArgumentException("Unsupported url $source") + source.isNotEmpty() && scheme != "https" && scheme != "http" && scheme != "content" -> throw IllegalArgumentException( + "Unsupported url $source" + ) - interval != 0L && TimeUnit.MILLISECONDS.toMinutes(interval) < 15 -> - throw IllegalArgumentException("Invalid interval") + interval != 0L && TimeUnit.MILLISECONDS.toMinutes(interval) < 15 -> throw IllegalArgumentException("Invalid interval") } } -} \ No newline at end of file + +} diff --git a/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt b/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt index 4e384b46d6..7de311aaa9 100644 --- a/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt +++ b/service/src/main/java/com/github/kr328/clash/service/clash/module/ConfigurationModule.kt @@ -55,6 +55,8 @@ class ConfigurationModule(service: Service) : Module = arrayOf() +private val MIGRATION_1_2 = object : Migration(1, 2) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE imported ADD COLUMN ageSecretKey TEXT") + database.execSQL("ALTER TABLE pending ADD COLUMN ageSecretKey TEXT") + } +} -val LEGACY_MIGRATION = ::migrationFromLegacy \ No newline at end of file +val MIGRATIONS: Array = arrayOf( + MIGRATION_1_2, +) + +val LEGACY_MIGRATION = ::migrationFromLegacy diff --git a/service/src/main/java/com/github/kr328/clash/service/document/Picker.kt b/service/src/main/java/com/github/kr328/clash/service/document/Picker.kt index aa08829ce4..7eaa9e2a4f 100644 --- a/service/src/main/java/com/github/kr328/clash/service/document/Picker.kt +++ b/service/src/main/java/com/github/kr328/clash/service/document/Picker.kt @@ -134,7 +134,8 @@ class Picker(private val context: Context) { imported.type, imported.source, imported.interval, - 0,0,0,0 + 0,0,0,0, + ageSecretKey = imported.ageSecretKey ) ) diff --git a/service/src/main/java/com/github/kr328/clash/service/model/Profile.kt b/service/src/main/java/com/github/kr328/clash/service/model/Profile.kt index 4c2b498016..436894ad0a 100644 --- a/service/src/main/java/com/github/kr328/clash/service/model/Profile.kt +++ b/service/src/main/java/com/github/kr328/clash/service/model/Profile.kt @@ -22,11 +22,10 @@ data class Profile( var download: Long, val total: Long, val expire: Long, - - val updatedAt: Long, val imported: Boolean, val pending: Boolean, + val ageSecretKey: String? = null, ) : Parcelable { enum class Type { File, Url, External @@ -49,4 +48,4 @@ data class Profile( return arrayOfNulls(size) } } -} \ No newline at end of file +} diff --git a/service/src/main/java/com/github/kr328/clash/service/remote/IProfileManager.kt b/service/src/main/java/com/github/kr328/clash/service/remote/IProfileManager.kt index f5915f0f17..0eace2ef7b 100644 --- a/service/src/main/java/com/github/kr328/clash/service/remote/IProfileManager.kt +++ b/service/src/main/java/com/github/kr328/clash/service/remote/IProfileManager.kt @@ -6,15 +6,15 @@ import java.util.* @BinderInterface interface IProfileManager { - suspend fun create(type: Profile.Type, name: String, source: String = ""): UUID + suspend fun create(type: Profile.Type, name: String, source: String = "", ageSecretKey: String? = null): UUID suspend fun clone(uuid: UUID): UUID suspend fun commit(uuid: UUID, callback: IFetchObserver? = null) suspend fun release(uuid: UUID) suspend fun delete(uuid: UUID) - suspend fun patch(uuid: UUID, name: String, source: String, interval: Long) + suspend fun patch(uuid: UUID, name: String, source: String, interval: Long, ageSecretKey: String?) suspend fun update(uuid: UUID) suspend fun queryByUUID(uuid: UUID): Profile? suspend fun queryAll(): List suspend fun queryActive(): Profile? suspend fun setActive(profile: Profile) -} \ No newline at end of file +} From 6390d46b6837b556380ae4a5611475fd65d430e0 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Thu, 4 Jun 2026 21:26:42 +0800 Subject: [PATCH 21/32] Update Proxy.kt --- core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt index 72f36706ab..4e0918adf9 100644 --- a/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt +++ b/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt @@ -20,6 +20,7 @@ data class Proxy( RejectDrop(false), Compatible(false), Pass(false), + PassRule(false), Shadowsocks(false), ShadowsocksR(false), From 5b0d0736e3aec40274c3a9330d5aed170e611faa Mon Sep 17 00:00:00 2001 From: LinBeitsi <58358419+NevadaCities@users.noreply.github.com> Date: Thu, 4 Jun 2026 23:59:41 +0800 Subject: [PATCH 22/32] Fixed Shortcut icon, corrected translation. (#766) --- app/src/main/res/drawable/ic_toggle_all.xml | 42 +++++++++++++++--- app/src/main/res/drawable/ic_toggle_off.xml | 44 ++++++++++++++++--- app/src/main/res/drawable/ic_toggle_on.xml | 30 ++++++++++--- .../src/main/res/drawable/ic_baseline_key.xml | 11 ++++- design/src/main/res/values-ja-rJP/strings.xml | 8 ++-- design/src/main/res/values-ko-rKR/strings.xml | 6 +-- design/src/main/res/values-ru/strings.xml | 2 +- design/src/main/res/values-zh-rHK/strings.xml | 4 +- design/src/main/res/values-zh-rTW/strings.xml | 2 +- design/src/main/res/values-zh/strings.xml | 2 +- 10 files changed, 118 insertions(+), 33 deletions(-) diff --git a/app/src/main/res/drawable/ic_toggle_all.xml b/app/src/main/res/drawable/ic_toggle_all.xml index 29ce98e9c9..f6ad6e2ba9 100644 --- a/app/src/main/res/drawable/ic_toggle_all.xml +++ b/app/src/main/res/drawable/ic_toggle_all.xml @@ -1,9 +1,41 @@ - + android:viewportWidth="24" + android:viewportHeight="24"> + + + + + + + diff --git a/app/src/main/res/drawable/ic_toggle_off.xml b/app/src/main/res/drawable/ic_toggle_off.xml index 6bbc6d155c..89931b20a4 100644 --- a/app/src/main/res/drawable/ic_toggle_off.xml +++ b/app/src/main/res/drawable/ic_toggle_off.xml @@ -1,11 +1,41 @@ - - + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + + + + + diff --git a/app/src/main/res/drawable/ic_toggle_on.xml b/app/src/main/res/drawable/ic_toggle_on.xml index 1162f274a5..354b34eca7 100644 --- a/app/src/main/res/drawable/ic_toggle_on.xml +++ b/app/src/main/res/drawable/ic_toggle_on.xml @@ -1,11 +1,27 @@ - - + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + + + diff --git a/design/src/main/res/drawable/ic_baseline_key.xml b/design/src/main/res/drawable/ic_baseline_key.xml index d2cd6f1138..c3ea24bd84 100644 --- a/design/src/main/res/drawable/ic_baseline_key.xml +++ b/design/src/main/res/drawable/ic_baseline_key.xml @@ -1,3 +1,10 @@ - - + + diff --git a/design/src/main/res/values-ja-rJP/strings.xml b/design/src/main/res/values-ja-rJP/strings.xml index 280c20abc0..92fed35d72 100644 --- a/design/src/main/res/values-ja-rJP/strings.xml +++ b/design/src/main/res/values-ja-rJP/strings.xml @@ -47,9 +47,9 @@ http(s) のみを許可 15分以上か空白にしてください 空白にはできません - Age秘密鍵 - AGE-SECRET-KEY-…(任意) - フォーマットが無効です。鍵は AGE-SECRET-KEY- で始まる必要があります + Age 秘密鍵 + AGE-SECRET-KEY-… (任意) + 形式が無効です。キーは AGE-SECRET-KEY- で始まる必要があります 詳細 更新 編集 @@ -256,4 +256,4 @@ Override Destination カメラのアクセスが制限されています。設定から有効にしてください。 システムで予期しない例外が発生しました。 - \ No newline at end of file + diff --git a/design/src/main/res/values-ko-rKR/strings.xml b/design/src/main/res/values-ko-rKR/strings.xml index 5e858be606..a42b6481f4 100644 --- a/design/src/main/res/values-ko-rKR/strings.xml +++ b/design/src/main/res/values-ko-rKR/strings.xml @@ -48,8 +48,8 @@ 최소 15분 이상 또는 공백 이 필드는 공백이 허용되지 않습니다. Age 비밀 키 - AGE-SECRET-KEY-…(선택사항) - 잘못된 형식입니다. 키는 AGE-SECRET-KEY- 로 시작해야 합니다 + AGE-SECRET-KEY-… (선택 사항) + 형식이 올바르지 않습니다. 키는 AGE-SECRET-KEY-로 시작해야 합니다 자세히 업데이트 편집 @@ -256,4 +256,4 @@ Override Destination 카메라 접근이 제한되었습니다. 설정에서 허용해 주세요. 처리되지 않은 시스템 예외가 발생했습니다. - \ No newline at end of file + diff --git a/design/src/main/res/values-ru/strings.xml b/design/src/main/res/values-ru/strings.xml index f81525e3b7..e96db42ce8 100644 --- a/design/src/main/res/values-ru/strings.xml +++ b/design/src/main/res/values-ru/strings.xml @@ -59,7 +59,7 @@ Не должно быть пустым Секретный ключ Age AGE-SECRET-KEY-… (необязательно) - Неверный формат. Ключ должен начинаться с AGE-SECRET-KEY- + Недопустимый формат. Ключ должен начинаться с AGE-SECRET-KEY- Детали Обновить Изменить diff --git a/design/src/main/res/values-zh-rHK/strings.xml b/design/src/main/res/values-zh-rHK/strings.xml index 9a83b6e048..21f1a2cfd1 100644 --- a/design/src/main/res/values-zh-rHK/strings.xml +++ b/design/src/main/res/values-zh-rHK/strings.xml @@ -80,7 +80,7 @@ 安裝時間 Age 私鑰 AGE-SECRET-KEY-…(可選) - 格式無效。密鑰應以 AGE-SECRET-KEY- 開頭 + 無效格式。密鑰應以 AGE-SECRET-KEY- 開頭 反饋 Github Issues Clash 配置文件(包含代理/規則)]]> @@ -253,4 +253,4 @@ Override Destination 相機權限受限,請前往設定開啟。 發生系統未知異常,操作失敗。 - \ No newline at end of file + diff --git a/design/src/main/res/values-zh-rTW/strings.xml b/design/src/main/res/values-zh-rTW/strings.xml index feca4582c9..aae2c144b2 100644 --- a/design/src/main/res/values-zh-rTW/strings.xml +++ b/design/src/main/res/values-zh-rTW/strings.xml @@ -80,7 +80,7 @@ 安裝時間 Age 私鑰 AGE-SECRET-KEY-…(選填) - 格式無效。金鑰應以 AGE-SECRET-KEY- 開頭 + 無效格式。金鑰應以 AGE-SECRET-KEY- 開頭 回饋 Github Issues Clash 設定檔 (包含Proxy /規則)]]> diff --git a/design/src/main/res/values-zh/strings.xml b/design/src/main/res/values-zh/strings.xml index 09de0724bd..253ab81b98 100644 --- a/design/src/main/res/values-zh/strings.xml +++ b/design/src/main/res/values-zh/strings.xml @@ -80,7 +80,7 @@ 查找 Age 私钥 AGE-SECRET-KEY-…(可选) - 格式无效。密钥应以 AGE-SECRET-KEY- 开头 + 无效格式。密钥应以 AGE-SECRET-KEY- 开头 系统应用 更新时间 应用包名称 From f6670dcd7a196333b70c11c12d64d23be1bc750f Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Fri, 5 Jun 2026 12:29:47 +0800 Subject: [PATCH 23/32] add BundleMRS.7z --- app/build.gradle.kts | 1 + .../java/com/github/kr328/clash/MainApplication.kt | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5272b86afb..27a8f5b26c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -41,6 +41,7 @@ task("downloadGeoFiles") { "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat" to "geosite.dat", // "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb" to "country.mmdb", "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb" to "ASN.mmdb", + "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/BundleMRS.7z" to "BundleMRS.7z", ) doLast { diff --git a/app/src/main/java/com/github/kr328/clash/MainApplication.kt b/app/src/main/java/com/github/kr328/clash/MainApplication.kt index 93f9b74b8b..9242d72299 100644 --- a/app/src/main/java/com/github/kr328/clash/MainApplication.kt +++ b/app/src/main/java/com/github/kr328/clash/MainApplication.kt @@ -68,6 +68,16 @@ class MainApplication : Application() { assets.open("ASN.mmdb").copyTo(it) } } + + val bundleMRSFile = File(clashDir, "BundleMRS.7z") + if (bundleMRSFile.exists() && bundleMRSFile.lastModified() < updateDate) { + bundleMRSFile.delete() + } + if (!bundleMRSFile.exists()) { + FileOutputStream(bundleMRSFile).use { + assets.open("BundleMRS.7z").copyTo(it) + } + } } fun finalize() { From 1452c2771f8301b711e3d8914b637f84d4d8be26 Mon Sep 17 00:00:00 2001 From: "clash-meta-maintainer[bot]" <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> Date: Fri, 5 Jun 2026 12:55:23 +0800 Subject: [PATCH 24/32] Update Dependencies (#765) Co-authored-by: clash-meta-maintainer[bot] <148681994+clash-meta-maintainer[bot]@users.noreply.github.com> --- core/src/foss/golang/clash | 2 +- core/src/foss/golang/go.mod | 10 ++++++++-- core/src/foss/golang/go.sum | 32 ++++++++++++++++++++++++++++---- core/src/main/golang/go.mod | 10 ++++++++-- core/src/main/golang/go.sum | 32 ++++++++++++++++++++++++++++---- 5 files changed, 73 insertions(+), 13 deletions(-) diff --git a/core/src/foss/golang/clash b/core/src/foss/golang/clash index 9761bcd7f9..e928ef59c1 160000 --- a/core/src/foss/golang/clash +++ b/core/src/foss/golang/clash @@ -1 +1 @@ -Subproject commit 9761bcd7f933a1d53aacfb29e7e623c827abc3bc +Subproject commit e928ef59c1aaa5b7db01a3a01f2c97730f0d0d16 diff --git a/core/src/foss/golang/go.mod b/core/src/foss/golang/go.mod index 6558ae9155..47c1f7e943 100644 --- a/core/src/foss/golang/go.mod +++ b/core/src/foss/golang/go.mod @@ -10,8 +10,10 @@ require ( github.com/ajg/form v1.5.1 // indirect github.com/akutz/memconn v0.1.0 // indirect github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect - github.com/andybalholm/brotli v1.0.6 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect + github.com/bodgit/plumbing v1.3.0 // indirect + github.com/bodgit/windows v1.0.1 // indirect github.com/coder/websocket v1.8.12 // indirect github.com/coreos/go-iptables v0.8.0 // indirect github.com/dlclark/regexp2 v1.12.0 // indirect @@ -35,6 +37,7 @@ require ( github.com/google/btree v1.1.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/huin/goupnp v1.3.0 // indirect github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 // indirect github.com/josharian/native v1.1.0 // indirect @@ -71,6 +74,7 @@ require ( github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/restls-client-go v0.1.7 // indirect + github.com/metacubex/sevenzip v1.6.4 // indirect github.com/metacubex/sing v0.5.7 // indirect github.com/metacubex/sing-mux v0.3.9 // indirect github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3 // indirect @@ -95,7 +99,7 @@ require ( github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect github.com/openacid/low v0.1.21 // indirect github.com/oschwald/maxminddb-golang v1.12.0 // indirect - github.com/pierrec/lz4/v4 v4.1.14 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect github.com/pires/go-proxyproto v0.8.0 // indirect github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e // indirect github.com/safchain/ethtool v0.3.0 // indirect @@ -105,11 +109,13 @@ require ( github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect github.com/sirupsen/logrus v1.9.4 // indirect + github.com/stangelandcl/ppmd v0.1.1 // indirect github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d // indirect github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a // indirect github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect + github.com/ulikunitz/xz v0.5.15 // indirect github.com/vishvananda/netns v0.0.5 // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect diff --git a/core/src/foss/golang/go.sum b/core/src/foss/golang/go.sum index b524747070..c6f62909f1 100644 --- a/core/src/foss/golang/go.sum +++ b/core/src/foss/golang/go.sum @@ -9,11 +9,15 @@ github.com/akutz/memconn v0.1.0 h1:NawI0TORU4hcOMsMr11g7vwlCdkYeLKXBcxWu2W/P8A= github.com/akutz/memconn v0.1.0/go.mod h1:Jo8rI7m0NieZyLI5e2CDlRdRqRRB4S7Xp77ukDjH+Fw= github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU= +github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs= +github.com/bodgit/windows v1.0.1 h1:tF7K6KOluPYygXa3Z2594zxlkbKPAOvqr97etrGNIz4= +github.com/bodgit/windows v1.0.1/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM= github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4= github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= @@ -21,6 +25,7 @@ github.com/coreos/go-iptables v0.8.0 h1:MPc2P89IhuVpLI7ETL/2tx3XZ61VeICZjYqDEgNs github.com/coreos/go-iptables v0.8.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8= github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dunglas/httpsfv v1.0.2 h1:iERDp/YAfnojSDJ7PW3dj1AReJz4MrwbECSSE59JWL0= @@ -67,6 +72,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 h1:q3OEI9RaN/wwcx+qgGo6ZaoJkCiDYe/gjDLfq7lQQF4= @@ -82,6 +89,8 @@ github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/4 github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/reedsolomon v1.12.3 h1:tzUznbfc3OFwJaTebv/QdhnFf2Xvb7gZ24XaHLBPmdc= github.com/klauspost/reedsolomon v1.12.3/go.mod h1:3K5rXwABAvzGeR01r6pWZieUALXO/Tq7bFKGIb4m4WI= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= @@ -140,6 +149,8 @@ github.com/metacubex/randv2 v0.2.0 h1:uP38uBvV2SxYfLj53kuvAjbND4RUDfFJjwr4UigMiL github.com/metacubex/randv2 v0.2.0/go.mod h1:kFi2SzrQ5WuneuoLLCMkABtiBu6VRrMrWFqSPyj2cxY= github.com/metacubex/restls-client-go v0.1.7 h1:eCwiXCTQb5WJu9IlgYvDBA1OgrINv58dEe7hcN5H15k= github.com/metacubex/restls-client-go v0.1.7/go.mod h1:BN/U52vPw7j8VTSh2vleD/MnmVKCov84mS5VcjVHH4g= +github.com/metacubex/sevenzip v1.6.4 h1:OIL+DeOeSAbKNsjqxcYUMiarRmX6Kaxakb0GT7E9Oik= +github.com/metacubex/sevenzip v1.6.4/go.mod h1:FP3X9bzFKj9wPxifGN9B3w2fIEicMjzKYIGIhnu+1pw= github.com/metacubex/sing v0.5.7 h1:8OC+fhKFSv/l9ehEhJRaZZAOuthfZo68SteBVLe8QqM= github.com/metacubex/sing v0.5.7/go.mod h1:ypf0mjwlZm0sKdQSY+yQvmsbWa0hNPtkeqyRMGgoN+w= github.com/metacubex/sing-mux v0.3.9 h1:/aoBD2+sK2qsXDlNDe3hkR0GZuFDtwIZhOeGUx9W0Yk= @@ -191,8 +202,9 @@ github.com/openacid/must v0.1.3/go.mod h1:luPiXCuJlEo3UUFQngVQokV0MPGryeYvtCbQPs github.com/openacid/testkeys v0.1.6/go.mod h1:MfA7cACzBpbiwekivj8StqX0WIRmqlMsci1c37CA3Do= github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs= github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY= -github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE= github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0= github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -214,10 +226,18 @@ github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e h1:ur8uMsPIF github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e/go.mod h1:+e5fBW3bpPyo+3uLo513gIUblc03egGjMM0+5GKbzK8= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= +github.com/stangelandcl/ppmd v0.1.1 h1:c25QazhlWUn5nmR1QOzafKhQxBicAr7GGCKER2aJ8H8= +github.com/stangelandcl/ppmd v0.1.1/go.mod h1:Rrv7M+/2P5jYr/GMLhBl7Ug3uJ1bUiVzr5LbbaV6xgY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d h1:JcGKBZAL7ePLwOhUdN8qGQZlP5GueEiIZwY7R62pejE= github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d/go.mod h1:XrBNfAFN+pwoWuksbFS9Ccxnopa15zJGgXRFN90l3K4= @@ -229,6 +249,8 @@ github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+y github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= @@ -241,6 +263,8 @@ github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7 h1:UNrDfkQqiEYzdMlNsVvBYOAJWZjdktqFE9tQh5BT2+4= @@ -295,8 +319,8 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod index 7ac5c97305..5bd731484e 100644 --- a/core/src/main/golang/go.mod +++ b/core/src/main/golang/go.mod @@ -16,8 +16,10 @@ require ( github.com/ajg/form v1.5.1 // indirect github.com/akutz/memconn v0.1.0 // indirect github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect - github.com/andybalholm/brotli v1.0.6 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect + github.com/bodgit/plumbing v1.3.0 // indirect + github.com/bodgit/windows v1.0.1 // indirect github.com/coder/websocket v1.8.12 // indirect github.com/coreos/go-iptables v0.8.0 // indirect github.com/dunglas/httpsfv v1.0.2 // indirect @@ -40,6 +42,7 @@ require ( github.com/google/btree v1.1.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/huin/goupnp v1.3.0 // indirect github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 // indirect github.com/josharian/native v1.1.0 // indirect @@ -75,6 +78,7 @@ require ( github.com/metacubex/quic-go v0.59.1-0.20260520020949-fcd18c7b6ace // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/restls-client-go v0.1.7 // indirect + github.com/metacubex/sevenzip v1.6.4 // indirect github.com/metacubex/sing v0.5.7 // indirect github.com/metacubex/sing-mux v0.3.9 // indirect github.com/metacubex/sing-quic v0.0.0-20260527143057-68e10a6afdc3 // indirect @@ -99,7 +103,7 @@ require ( github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect github.com/openacid/low v0.1.21 // indirect github.com/oschwald/maxminddb-golang v1.12.0 // indirect - github.com/pierrec/lz4/v4 v4.1.14 // indirect + github.com/pierrec/lz4/v4 v4.1.27 // indirect github.com/pires/go-proxyproto v0.8.0 // indirect github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e // indirect github.com/safchain/ethtool v0.3.0 // indirect @@ -109,11 +113,13 @@ require ( github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect github.com/sirupsen/logrus v1.9.4 // indirect + github.com/stangelandcl/ppmd v0.1.1 // indirect github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d // indirect github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a // indirect github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect + github.com/ulikunitz/xz v0.5.15 // indirect github.com/vishvananda/netns v0.0.5 // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum index b524747070..c6f62909f1 100644 --- a/core/src/main/golang/go.sum +++ b/core/src/main/golang/go.sum @@ -9,11 +9,15 @@ github.com/akutz/memconn v0.1.0 h1:NawI0TORU4hcOMsMr11g7vwlCdkYeLKXBcxWu2W/P8A= github.com/akutz/memconn v0.1.0/go.mod h1:Jo8rI7m0NieZyLI5e2CDlRdRqRRB4S7Xp77ukDjH+Fw= github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU= +github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs= +github.com/bodgit/windows v1.0.1 h1:tF7K6KOluPYygXa3Z2594zxlkbKPAOvqr97etrGNIz4= +github.com/bodgit/windows v1.0.1/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM= github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4= github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= @@ -21,6 +25,7 @@ github.com/coreos/go-iptables v0.8.0 h1:MPc2P89IhuVpLI7ETL/2tx3XZ61VeICZjYqDEgNs github.com/coreos/go-iptables v0.8.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8= github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dunglas/httpsfv v1.0.2 h1:iERDp/YAfnojSDJ7PW3dj1AReJz4MrwbECSSE59JWL0= @@ -67,6 +72,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905 h1:q3OEI9RaN/wwcx+qgGo6ZaoJkCiDYe/gjDLfq7lQQF4= @@ -82,6 +89,8 @@ github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/4 github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/reedsolomon v1.12.3 h1:tzUznbfc3OFwJaTebv/QdhnFf2Xvb7gZ24XaHLBPmdc= github.com/klauspost/reedsolomon v1.12.3/go.mod h1:3K5rXwABAvzGeR01r6pWZieUALXO/Tq7bFKGIb4m4WI= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= @@ -140,6 +149,8 @@ github.com/metacubex/randv2 v0.2.0 h1:uP38uBvV2SxYfLj53kuvAjbND4RUDfFJjwr4UigMiL github.com/metacubex/randv2 v0.2.0/go.mod h1:kFi2SzrQ5WuneuoLLCMkABtiBu6VRrMrWFqSPyj2cxY= github.com/metacubex/restls-client-go v0.1.7 h1:eCwiXCTQb5WJu9IlgYvDBA1OgrINv58dEe7hcN5H15k= github.com/metacubex/restls-client-go v0.1.7/go.mod h1:BN/U52vPw7j8VTSh2vleD/MnmVKCov84mS5VcjVHH4g= +github.com/metacubex/sevenzip v1.6.4 h1:OIL+DeOeSAbKNsjqxcYUMiarRmX6Kaxakb0GT7E9Oik= +github.com/metacubex/sevenzip v1.6.4/go.mod h1:FP3X9bzFKj9wPxifGN9B3w2fIEicMjzKYIGIhnu+1pw= github.com/metacubex/sing v0.5.7 h1:8OC+fhKFSv/l9ehEhJRaZZAOuthfZo68SteBVLe8QqM= github.com/metacubex/sing v0.5.7/go.mod h1:ypf0mjwlZm0sKdQSY+yQvmsbWa0hNPtkeqyRMGgoN+w= github.com/metacubex/sing-mux v0.3.9 h1:/aoBD2+sK2qsXDlNDe3hkR0GZuFDtwIZhOeGUx9W0Yk= @@ -191,8 +202,9 @@ github.com/openacid/must v0.1.3/go.mod h1:luPiXCuJlEo3UUFQngVQokV0MPGryeYvtCbQPs github.com/openacid/testkeys v0.1.6/go.mod h1:MfA7cACzBpbiwekivj8StqX0WIRmqlMsci1c37CA3Do= github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs= github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY= -github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE= github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0= github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -214,10 +226,18 @@ github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e h1:ur8uMsPIF github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e/go.mod h1:+e5fBW3bpPyo+3uLo513gIUblc03egGjMM0+5GKbzK8= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= +github.com/stangelandcl/ppmd v0.1.1 h1:c25QazhlWUn5nmR1QOzafKhQxBicAr7GGCKER2aJ8H8= +github.com/stangelandcl/ppmd v0.1.1/go.mod h1:Rrv7M+/2P5jYr/GMLhBl7Ug3uJ1bUiVzr5LbbaV6xgY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d h1:JcGKBZAL7ePLwOhUdN8qGQZlP5GueEiIZwY7R62pejE= github.com/tailscale/certstore v0.1.1-0.20260409135935-3638fb84b77d/go.mod h1:XrBNfAFN+pwoWuksbFS9Ccxnopa15zJGgXRFN90l3K4= @@ -229,6 +249,8 @@ github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+y github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= @@ -241,6 +263,8 @@ github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7 h1:UNrDfkQqiEYzdMlNsVvBYOAJWZjdktqFE9tQh5BT2+4= @@ -295,8 +319,8 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 9c80c41def48f89ded77ab202dbba9f4df06d2d9 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Fri, 5 Jun 2026 17:10:08 +0800 Subject: [PATCH 25/32] adopt `path-in-bundle` for rule-providers --- core/src/foss/golang/clash | 2 +- core/src/main/golang/native/config/fetch.go | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/core/src/foss/golang/clash b/core/src/foss/golang/clash index e928ef59c1..01edf45ce0 160000 --- a/core/src/foss/golang/clash +++ b/core/src/foss/golang/clash @@ -1 +1 @@ -Subproject commit e928ef59c1aaa5b7db01a3a01f2c97730f0d0d16 +Subproject commit 01edf45ce05900a01335ad086ff0c2e88a6eb722 diff --git a/core/src/main/golang/native/config/fetch.go b/core/src/main/golang/native/config/fetch.go index ba08ebccbd..e677034113 100644 --- a/core/src/main/golang/native/config/fetch.go +++ b/core/src/main/golang/native/config/fetch.go @@ -15,6 +15,7 @@ import ( "cfa/native/app" clashHttp "github.com/metacubex/mihomo/component/http" + RB "github.com/metacubex/mihomo/rules/bundle" ) type Status struct { @@ -60,6 +61,10 @@ func fetch(url *U.URL, file string) error { defer reader.Close() + return writeFile(file, reader) +} + +func writeFile(file string, reader io.Reader) error { _ = os.MkdirAll(P.Dir(file), 0700) f, err := os.OpenFile(file, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) @@ -145,6 +150,22 @@ func FetchAndValid( return } + if prefix == RULES { + if pib, uok := provider["path-in-bundle"]; uok { + if pib, uok := pib.(string); uok && pib != "" { + // actually, we don't need to extract the file here; the core will do it. + // however, due to historical reasons, CMFA fetches provider content when loading profile, + // so we maintain consistency with the old behavior. + if file, err := RB.Open(pib); err == nil { + defer file.Close() + if err := writeFile(ps, file); err == nil { + return + } + } + } + } + } + _ = fetch(url, ps) }) From ffda42db3773b4ac86f1f5e5b1e0123d14bfca92 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Fri, 5 Jun 2026 18:19:05 +0800 Subject: [PATCH 26/32] allow ignoring fetch subscription-userinfo error --- .../kr328/clash/service/ProfileManager.kt | 5 +- .../kr328/clash/service/ProfileProcessor.kt | 141 ++++++++---------- 2 files changed, 63 insertions(+), 83 deletions(-) diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt index b5f1e1e339..d2a49dc7de 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileManager.kt @@ -1,6 +1,7 @@ package com.github.kr328.clash.service import android.content.Context +import com.github.kr328.clash.common.log.Log import com.github.kr328.clash.service.data.Database import com.github.kr328.clash.service.data.Imported import com.github.kr328.clash.service.data.ImportedDao @@ -141,8 +142,8 @@ class ProfileManager(private val context: Context) : IProfileManager, } suspend fun updateFlow(old: Imported) { - val client = OkHttpClient() try { + val client = OkHttpClient() val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName val request = Request.Builder() .url(old.source) @@ -208,7 +209,7 @@ class ProfileManager(private val context: Context) : IProfileManager, } } catch (e: Exception) { - System.out.println(e) + Log.w("Report fetch subscription-userinfo status: $e", e) } } diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt index 6ad6276954..1341731e8d 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileProcessor.kt @@ -75,98 +75,77 @@ object ProfileProcessor { var updateInterval: Long = snapshot.interval if (snapshot?.type == Profile.Type.Url) { if (snapshot.source.startsWith("https://", true)) { - val client = OkHttpClient() - val versionName = - context.packageManager.getPackageInfo(context.packageName, 0).versionName - val request = Request.Builder().url(snapshot.source) - .header("User-Agent", "ClashMetaForAndroid/$versionName").build() - - client.newCall(request).execute().use { response -> - val userinfo = response.headers["subscription-userinfo"] - if (response.isSuccessful && userinfo != null) { - val flags = userinfo.split(";") - for (flag in flags) { - val info = flag.split("=") - when { - info[0].contains("upload") && info[1].isNotEmpty() -> upload = - BigDecimal(info[1].split('.').first()).longValueExact() - - info[0].contains("download") && info[1].isNotEmpty() -> download = - BigDecimal(info[1].split('.').first()).longValueExact() - - info[0].contains("total") && info[1].isNotEmpty() -> total = - BigDecimal(info[1].split('.').first()).longValueExact() - - info[0].contains("expire") && info[1].isNotEmpty() -> expire = - (info[1].toDouble() * 1000).toLong() + try { + val client = OkHttpClient() + val versionName = + context.packageManager.getPackageInfo(context.packageName, 0).versionName + val request = Request.Builder().url(snapshot.source) + .header("User-Agent", "ClashMetaForAndroid/$versionName").build() + + client.newCall(request).execute().use { response -> + val userinfo = response.headers["subscription-userinfo"] + if (response.isSuccessful && userinfo != null) { + val flags = userinfo.split(";") + for (flag in flags) { + val info = flag.split("=") + when { + info[0].contains("upload") && info[1].isNotEmpty() -> upload = + BigDecimal(info[1].split('.').first()).longValueExact() + + info[0].contains("download") && info[1].isNotEmpty() -> download = + BigDecimal(info[1].split('.').first()).longValueExact() + + info[0].contains("total") && info[1].isNotEmpty() -> total = + BigDecimal(info[1].split('.').first()).longValueExact() + + info[0].contains("expire") && info[1].isNotEmpty() -> expire = + (info[1].toDouble() * 1000).toLong() + } } } - } - val updateIntervalHeader = response.headers["profile-update-interval"] - if (old == null && snapshot.interval == 0L && response.isSuccessful && updateIntervalHeader != null) { - val intervalHours = updateIntervalHeader.toLongOrNull() - if (intervalHours != null) { - updateInterval = if (intervalHours > 0) { - TimeUnit.HOURS.toMillis(intervalHours) - .coerceAtLeast(TimeUnit.MINUTES.toMillis(15)) - } else { - 0L + val updateIntervalHeader = response.headers["profile-update-interval"] + if (old == null && snapshot.interval == 0L && response.isSuccessful && updateIntervalHeader != null) { + val intervalHours = updateIntervalHeader.toLongOrNull() + if (intervalHours != null) { + updateInterval = if (intervalHours > 0) { + TimeUnit.HOURS.toMillis(intervalHours) + .coerceAtLeast(TimeUnit.MINUTES.toMillis(15)) + } else { + 0L + } } } } + } catch (e: Exception) { + Log.w("Report fetch subscription-userinfo status: $e", e) } } - val new = Imported( - snapshot.uuid, - snapshot.name, - snapshot.type, - snapshot.source, - updateInterval, - upload, - download, - total, - expire, - old?.createdAt ?: System.currentTimeMillis(), - ageSecretKey = snapshot.ageSecretKey - ) - if (old != null) { - ImportedDao().update(new) - } else { - ImportedDao().insert(new) - } - - PendingDao().remove(snapshot.uuid) - - context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively() - - context.sendProfileChanged(snapshot.uuid) - } else if (snapshot?.type == Profile.Type.File) { - val new = Imported( - snapshot.uuid, - snapshot.name, - snapshot.type, - snapshot.source, - snapshot.interval, - upload, - download, - total, - expire, - old?.createdAt ?: System.currentTimeMillis(), - ageSecretKey = snapshot.ageSecretKey - ) - if (old != null) { - ImportedDao().update(new) - } else { - ImportedDao().insert(new) - } + } + val new = Imported( + snapshot.uuid, + snapshot.name, + snapshot.type, + snapshot.source, + updateInterval, + upload, + download, + total, + expire, + old?.createdAt ?: System.currentTimeMillis(), + ageSecretKey = snapshot.ageSecretKey + ) + if (old != null) { + ImportedDao().update(new) + } else { + ImportedDao().insert(new) + } - PendingDao().remove(snapshot.uuid) + PendingDao().remove(snapshot.uuid) - context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively() + context.pendingDir.resolve(snapshot.uuid.toString()).deleteRecursively() - context.sendProfileChanged(snapshot.uuid) - } + context.sendProfileChanged(snapshot.uuid) } } } From d628f332d523fa6601848d679f74e5e66e2e36a6 Mon Sep 17 00:00:00 2001 From: LinBeitsi <58358419+NevadaCities@users.noreply.github.com> Date: Sat, 6 Jun 2026 08:40:58 +0800 Subject: [PATCH 27/32] feat(settings): add clickable label to generate age-encryption public key & secret key in "Meta Features" settings page. (#768) --- core/src/main/cpp/main.c | 67 ++++++++++ core/src/main/golang/native/config.go | 53 ++++++++ core/src/main/golang/native/config/age.go | 20 +++ .../java/com/github/kr328/clash/core/Clash.kt | 28 +++++ .../github/kr328/clash/core/bridge/Bridge.kt | 5 + .../kr328/clash/core/model/AgeKeyPair.kt | 9 ++ .../clash/design/MetaFeatureSettingsDesign.kt | 98 +++++++++++++++ .../clash/design/preference/Clickable.kt | 1 + .../kr328/clash/design/util/Validator.kt | 3 +- .../main/res/layout/dialog_age_key_helper.xml | 117 ++++++++++++++++++ design/src/main/res/values-ja-rJP/strings.xml | 8 ++ design/src/main/res/values-ko-rKR/strings.xml | 8 ++ design/src/main/res/values-ru/strings.xml | 8 ++ design/src/main/res/values-vi/strings.xml | 8 ++ design/src/main/res/values-zh-rHK/strings.xml | 8 ++ design/src/main/res/values-zh-rTW/strings.xml | 8 ++ design/src/main/res/values-zh/strings.xml | 8 ++ design/src/main/res/values/strings.xml | 10 ++ 18 files changed, 466 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/com/github/kr328/clash/core/model/AgeKeyPair.kt create mode 100644 design/src/main/res/layout/dialog_age_key_helper.xml diff --git a/core/src/main/cpp/main.c b/core/src/main/cpp/main.c index 20c5a46b83..61e431c8a1 100644 --- a/core/src/main/cpp/main.c +++ b/core/src/main/cpp/main.c @@ -253,6 +253,73 @@ Java_com_github_kr328_clash_core_bridge_Bridge_nativeSetAgeSecretKey(JNIEnv *env setAgeSecretKey(_key); } +JNIEXPORT jstring JNICALL +Java_com_github_kr328_clash_core_bridge_Bridge_nativeGenX25519KeyPair(JNIEnv *env, jobject thiz) { + TRACE_METHOD(); + + scoped_string response = genX25519KeyPair(); + + if (response == NULL) + return NULL; + + return new_string(response); +} + +JNIEXPORT jstring JNICALL +Java_com_github_kr328_clash_core_bridge_Bridge_nativeGenHybridKeyPair(JNIEnv *env, jobject thiz) { + TRACE_METHOD(); + + scoped_string response = genHybridKeyPair(); + + if (response == NULL) + return NULL; + + return new_string(response); +} + +JNIEXPORT jboolean JNICALL +Java_com_github_kr328_clash_core_bridge_Bridge_nativeVeritySecretKeys(JNIEnv *env, jobject thiz, + jstring secret_keys) { + TRACE_METHOD(); + + if (secret_keys == NULL) + return 0; + + scoped_string _secret_keys = get_string(secret_keys); + + return (jboolean) veritySecretKeys(_secret_keys); +} + +JNIEXPORT jstring JNICALL +Java_com_github_kr328_clash_core_bridge_Bridge_nativeToPublicKeys(JNIEnv *env, jobject thiz, + jstring secret_keys) { + TRACE_METHOD(); + + if (secret_keys == NULL) + return NULL; + + scoped_string _secret_keys = get_string(secret_keys); + scoped_string response = toPublicKeys(_secret_keys); + + if (response == NULL) + return NULL; + + return new_string(response); +} + +JNIEXPORT jboolean JNICALL +Java_com_github_kr328_clash_core_bridge_Bridge_nativeVerityPublicKeys(JNIEnv *env, jobject thiz, + jstring public_keys) { + TRACE_METHOD(); + + if (public_keys == NULL) + return 0; + + scoped_string _public_keys = get_string(public_keys); + + return (jboolean) verityPublicKeys(_public_keys); +} + JNIEXPORT jstring JNICALL Java_com_github_kr328_clash_core_bridge_Bridge_nativeQueryProviders(JNIEnv *env, jobject thiz) { TRACE_METHOD(); diff --git a/core/src/main/golang/native/config.go b/core/src/main/golang/native/config.go index 6338bd138c..43e099b683 100644 --- a/core/src/main/golang/native/config.go +++ b/core/src/main/golang/native/config.go @@ -18,6 +18,11 @@ func (r *remoteValidCallback) reportStatus(json string) { C.fetch_report(r.callback, marshalString(json)) } +type ageKeyPair struct { + SecretKey string `json:"secretKey"` + PublicKey string `json:"publicKey"` +} + //export fetchAndValid func fetchAndValid(callback unsafe.Pointer, path, url C.c_string, force C.int) { go func(path, url string, callback unsafe.Pointer) { @@ -71,3 +76,51 @@ func setAgeSecretKey(key C.c_string) { k := C.GoString(key) config.SetGlobalSecretKeys(k) } + +//export genX25519KeyPair +func genX25519KeyPair() *C.char { + secretKey, publicKey, err := config.GenX25519KeyPair() + if err != nil { + return nil + } + + return marshalJson(ageKeyPair{SecretKey: secretKey, PublicKey: publicKey}) +} + +//export genHybridKeyPair +func genHybridKeyPair() *C.char { + secretKey, publicKey, err := config.GenHybridKeyPair() + if err != nil { + return nil + } + + return marshalJson(ageKeyPair{SecretKey: secretKey, PublicKey: publicKey}) +} + +//export veritySecretKeys +func veritySecretKeys(secretKeys C.c_string) C.int { + if config.VeritySecretKeys(C.GoString(secretKeys)) != nil { + return 0 + } + + return 1 +} + +//export toPublicKeys +func toPublicKeys(secretKeys C.c_string) *C.char { + publicKeys, err := config.ToPublicKeys(C.GoString(secretKeys)) + if err != nil { + return nil + } + + return marshalJson(publicKeys) +} + +//export verityPublicKeys +func verityPublicKeys(publicKeys C.c_string) C.int { + if config.VerityPublicKeys(C.GoString(publicKeys)) != nil { + return 0 + } + + return 1 +} diff --git a/core/src/main/golang/native/config/age.go b/core/src/main/golang/native/config/age.go index 5348dd8370..7b8b6d716b 100644 --- a/core/src/main/golang/native/config/age.go +++ b/core/src/main/golang/native/config/age.go @@ -5,3 +5,23 @@ import "github.com/metacubex/mihomo/component/age" func SetGlobalSecretKeys(secretKeys ...string) { age.SetGlobalSecretKeys(secretKeys...) } + +func GenX25519KeyPair() (secretKey string, publicKey string, err error) { + return age.GenX25519KeyPair() +} + +func GenHybridKeyPair() (secretKey string, publicKey string, err error) { + return age.GenHybridKeyPair() +} + +func ToPublicKeys(secretKeys ...string) (publicKeys []string, err error) { + return age.ToPublicKeys(secretKeys...) +} + +func VeritySecretKeys(secretKeys ...string) error { + return age.VeritySecretKeys(secretKeys...) +} + +func VerityPublicKeys(publicKeys ...string) error { + return age.VerityPublicKeys(publicKeys...) +} diff --git a/core/src/main/java/com/github/kr328/clash/core/Clash.kt b/core/src/main/java/com/github/kr328/clash/core/Clash.kt index bc87822325..c3a2be684a 100644 --- a/core/src/main/java/com/github/kr328/clash/core/Clash.kt +++ b/core/src/main/java/com/github/kr328/clash/core/Clash.kt @@ -6,6 +6,8 @@ import com.github.kr328.clash.core.util.parseInetSocketAddress import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel +import kotlinx.serialization.builtins.ListSerializer +import kotlinx.serialization.builtins.serializer import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonArray import kotlinx.serialization.json.jsonPrimitive @@ -229,4 +231,30 @@ object Clash { fun setAgeSecretKey(key: String?) { Bridge.nativeSetAgeSecretKey(key) } + + fun genX25519KeyPair(): AgeKeyPair { + return parseAgeKeyPair(checkNotNull(Bridge.nativeGenX25519KeyPair())) + } + + fun genHybridKeyPair(): AgeKeyPair { + return parseAgeKeyPair(checkNotNull(Bridge.nativeGenHybridKeyPair())) + } + + fun veritySecretKeys(vararg secretKeys: String): Boolean { + return Bridge.nativeVeritySecretKeys(secretKeys.firstOrNull() ?: "") + } + + fun toPublicKeys(vararg secretKeys: String): List { + return Bridge.nativeToPublicKeys(secretKeys.firstOrNull() ?: "") + ?.let { Json.Default.decodeFromString(ListSerializer(String.serializer()), it) } + ?: emptyList() + } + + fun verityPublicKeys(vararg publicKeys: String): Boolean { + return Bridge.nativeVerityPublicKeys(publicKeys.firstOrNull() ?: "") + } + + private fun parseAgeKeyPair(value: String): AgeKeyPair { + return Json.Default.decodeFromString(AgeKeyPair.serializer(), value) + } } \ No newline at end of file diff --git a/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt b/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt index 6007ff1d0d..fa3b9247ef 100644 --- a/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt +++ b/core/src/main/java/com/github/kr328/clash/core/bridge/Bridge.kt @@ -51,6 +51,11 @@ object Bridge { external fun nativeCoreVersion(): String external fun nativeSetAgeSecretKey(key: String?) + external fun nativeGenX25519KeyPair(): String? + external fun nativeGenHybridKeyPair(): String? + external fun nativeVeritySecretKeys(secretKeys: String): Boolean + external fun nativeToPublicKeys(secretKeys: String): String? + external fun nativeVerityPublicKeys(publicKeys: String): Boolean private external fun nativeInit(home: String, versionName: String, sdkVersion: Int) diff --git a/core/src/main/java/com/github/kr328/clash/core/model/AgeKeyPair.kt b/core/src/main/java/com/github/kr328/clash/core/model/AgeKeyPair.kt new file mode 100644 index 0000000000..6b594e2783 --- /dev/null +++ b/core/src/main/java/com/github/kr328/clash/core/model/AgeKeyPair.kt @@ -0,0 +1,9 @@ +package com.github.kr328.clash.core.model + +import kotlinx.serialization.Serializable + +@Serializable +data class AgeKeyPair( + val secretKey: String, + val publicKey: String +) diff --git a/design/src/main/java/com/github/kr328/clash/design/MetaFeatureSettingsDesign.kt b/design/src/main/java/com/github/kr328/clash/design/MetaFeatureSettingsDesign.kt index b24a1bb90b..d2b634f1d4 100644 --- a/design/src/main/java/com/github/kr328/clash/design/MetaFeatureSettingsDesign.kt +++ b/design/src/main/java/com/github/kr328/clash/design/MetaFeatureSettingsDesign.kt @@ -1,12 +1,21 @@ package com.github.kr328.clash.design +import android.content.ClipData +import android.content.ClipboardManager import android.content.Context import android.view.View +import androidx.core.content.getSystemService +import androidx.core.widget.doOnTextChanged +import com.github.kr328.clash.core.Clash import com.github.kr328.clash.core.model.ConfigurationOverride import com.github.kr328.clash.design.databinding.DesignSettingsMetaFeatureBinding +import com.github.kr328.clash.design.databinding.DialogAgeKeyHelperBinding import com.github.kr328.clash.design.preference.* +import com.github.kr328.clash.design.ui.ToastDuration import com.github.kr328.clash.design.util.* import com.google.android.material.dialog.MaterialAlertDialogBuilder +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import kotlin.coroutines.resume @@ -63,6 +72,26 @@ class MetaFeatureSettingsDesign( ) val screen = preferenceScreen(context) { + category(R.string.age_key_category) + + clickable( + title = R.string.age_key_type_x25519, + summary = R.string.age_key_generate_summary, + ) { + clicked { + requestAgeKeyHelper(hybrid = false) + } + } + + clickable( + title = R.string.age_key_type_hybrid, + summary = R.string.age_key_generate_summary, + ) { + clicked { + requestAgeKeyHelper(hybrid = true) + } + } + category(R.string.settings) selectableList( @@ -317,6 +346,75 @@ class MetaFeatureSettingsDesign( binding.content.addView(screen.root) } + private fun requestAgeKeyHelper(hybrid: Boolean) { + launch(Dispatchers.Main) { + val binding = DialogAgeKeyHelperBinding + .inflate(context.layoutInflater, context.root, false) + val dialog = MaterialAlertDialogBuilder(context) + .setTitle(if (hybrid) R.string.age_key_type_hybrid else R.string.age_key_type_x25519) + .setView(binding.root) + .create() + + fun copy(label: String, value: String) { + if (value.isBlank()) + return + + val data = ClipData.newPlainText(label, value) + context.getSystemService()?.setPrimaryClip(data) + + launch { showToast(R.string.copied, ToastDuration.Short) } + } + + fun patchSecretKeyState() { + val secretKey = binding.secretKeyView.text?.toString() ?: "" + val valid = secretKey.isBlank() || Clash.veritySecretKeys(secretKey) + + binding.secretKeyLayout.error = if (valid) null else context.getText(R.string.age_secret_key_error) + } + + fun patchPublicKeyState() { + val publicKey = binding.publicKeyView.text?.toString() ?: "" + val valid = publicKey.isBlank() || Clash.verityPublicKeys(publicKey) + + binding.publicKeyLayout.error = if (valid) null else context.getText(R.string.age_public_key_error) + } + + dialog.setOnShowListener { + binding.secretKeyView.doOnTextChanged { _, _, _, _ -> patchSecretKeyState() } + binding.publicKeyView.doOnTextChanged { _, _, _, _ -> patchPublicKeyState() } + + binding.generateView.setOnClickListener { + val keyPair = if (hybrid) { + Clash.genHybridKeyPair() + } else { + Clash.genX25519KeyPair() + } + + binding.secretKeyView.setText(keyPair.secretKey) + binding.publicKeyView.setText(keyPair.publicKey) + } + + binding.toPublicKeyView.setOnClickListener { + val publicKey = Clash.toPublicKeys(binding.secretKeyView.text?.toString() ?: "") + .firstOrNull() + ?: "" + + binding.publicKeyView.setText(publicKey) + } + + binding.copySecretKeyView.setOnClickListener { + copy("age_secret_key", binding.secretKeyView.text?.toString() ?: "") + } + + binding.copyPublicKeyView.setOnClickListener { + copy("age_public_key", binding.publicKeyView.text?.toString() ?: "") + } + } + + dialog.show() + } + } + fun requestClear() { requests.trySend(Request.ResetOverride) } diff --git a/design/src/main/java/com/github/kr328/clash/design/preference/Clickable.kt b/design/src/main/java/com/github/kr328/clash/design/preference/Clickable.kt index 5e2d9a0775..c9f594c6af 100644 --- a/design/src/main/java/com/github/kr328/clash/design/preference/Clickable.kt +++ b/design/src/main/java/com/github/kr328/clash/design/preference/Clickable.kt @@ -31,6 +31,7 @@ fun PreferenceScreen.clickable( get() = binding.iconView.background set(value) { binding.iconView.background = value + binding.iconView.visibility = if (value == null) View.GONE else View.VISIBLE } override var title: CharSequence get() = binding.titleView.text diff --git a/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt b/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt index 8fa8723251..8b316d57bb 100644 --- a/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt +++ b/design/src/main/java/com/github/kr328/clash/design/util/Validator.kt @@ -1,6 +1,7 @@ package com.github.kr328.clash.design.util import com.github.kr328.clash.common.util.PatternFileName +import com.github.kr328.clash.core.Clash typealias Validator = (String) -> Boolean @@ -25,5 +26,5 @@ val ValidatorAutoUpdateInterval: Validator = { } val ValidatorAgeSecretKey: Validator = { - it.isEmpty() || it.startsWith("AGE-SECRET-KEY-", ignoreCase = true) + it.isEmpty() || Clash.veritySecretKeys(it) } \ No newline at end of file diff --git a/design/src/main/res/layout/dialog_age_key_helper.xml b/design/src/main/res/layout/dialog_age_key_helper.xml new file mode 100644 index 0000000000..181c3b08f5 --- /dev/null +++ b/design/src/main/res/layout/dialog_age_key_helper.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + +