From dc85b6b5c3b14d11b5d329e756786c79c042aaac Mon Sep 17 00:00:00 2001 From: patterniha <71074308+patterniha@users.noreply.github.com> Date: Fri, 10 Jul 2026 05:54:17 +0330 Subject: [PATCH] feat: round-trip cipherSuites in share links and VMess QR code The fork already round-trips its custom TLS fields (ech, vcn, pcs, pqv) through share-link query parameters and the VMess QR-code JSON, but cipherSuites was missing, so sharing a profile silently dropped it. Add a "cs" query parameter to FmtBase import/export and a "cs" field to VmessQRCode, mapped in VmessFmt parse/toUri, following the existing pattern (emitted only when non-blank). Co-Authored-By: Claude Fable 5 --- V2rayNG/app/src/main/java/com/v2ray/ang/dto/VmessQRCode.kt | 1 + V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt | 2 ++ V2rayNG/app/src/main/java/com/v2ray/ang/fmt/VmessFmt.kt | 2 ++ 3 files changed, 5 insertions(+) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/VmessQRCode.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/VmessQRCode.kt index ba17b765ef..d8f731c5c5 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/VmessQRCode.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/VmessQRCode.kt @@ -16,6 +16,7 @@ data class VmessQRCode( var sni: String = "", var alpn: String = "", var fp: String = "", + var cs: String = "", var insecure: String = "", var vcn: String = "", var pcs: String = "" diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt index 4aab0a9770..cf9a351185 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/FmtBase.kt @@ -83,6 +83,7 @@ open class FmtBase { config.sni = queryParam["sni"] config.fingerPrint = queryParam["fp"] config.alpn = queryParam["alpn"] + config.cipherSuites = queryParam["cs"] config.echConfigList = queryParam["ech"] config.verifyPeerCertByName = queryParam["vcn"] config.pinnedCA256 = queryParam["pcs"] @@ -104,6 +105,7 @@ open class FmtBase { dicQuery["security"] = config.security?.ifEmpty { "none" }.orEmpty() config.sni?.nullIfBlank()?.let { dicQuery["sni"] = it } config.alpn?.nullIfBlank()?.let { dicQuery["alpn"] = it } + config.cipherSuites?.nullIfBlank()?.let { dicQuery["cs"] = it } config.echConfigList?.nullIfBlank()?.let { dicQuery["ech"] = it } config.verifyPeerCertByName?.nullIfBlank()?.let { dicQuery["vcn"] = it } config.pinnedCA256?.nullIfBlank()?.let { dicQuery["pcs"] = it } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/VmessFmt.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/VmessFmt.kt index ef102270a2..ba9b07e8ea 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/VmessFmt.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/fmt/VmessFmt.kt @@ -82,6 +82,7 @@ object VmessFmt : FmtBase() { config.sni = vmessQRCode.sni config.fingerPrint = vmessQRCode.fp config.alpn = vmessQRCode.alpn + config.cipherSuites = vmessQRCode.cs config.insecure = when (vmessQRCode.insecure) { "1" -> true "0" -> false @@ -138,6 +139,7 @@ object VmessFmt : FmtBase() { vmessQRCode.sni = config.sni.orEmpty() vmessQRCode.fp = config.fingerPrint.orEmpty() vmessQRCode.alpn = config.alpn.orEmpty() + vmessQRCode.cs = config.cipherSuites.orEmpty() vmessQRCode.insecure = when (config.insecure) { true -> "1" false -> "0"