diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt index e28dfaa0..d52f1424 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt @@ -223,10 +223,12 @@ data class V2rayConfig( } data class GrpcSettingsBean(var serviceName: String = "", + var authority: String? = null, var multiMode: Boolean? = null) fun populateTransportSettings(transport: String, headerType: String?, host: String?, path: String?, seed: String?, - quicSecurity: String?, key: String?, mode: String?, serviceName: String?): String { + quicSecurity: String?, key: String?, mode: String?, serviceName: String?, + authority: String?): String { var sni = "" network = transport when (network) { @@ -290,7 +292,8 @@ data class V2rayConfig( val grpcSetting = GrpcSettingsBean() grpcSetting.multiMode = mode == "multi" grpcSetting.serviceName = serviceName ?: "" - sni = host ?: "" + grpcSetting.authority = authority ?: "" + sni = authority ?: "" grpcSettings = grpcSetting } } @@ -421,7 +424,7 @@ data class V2rayConfig( "grpc" -> { val grpcSetting = streamSettings?.grpcSettings ?: return null listOf(if (grpcSetting.multiMode == true) "multi" else "gun", - "", + grpcSetting.authority ?: "", grpcSetting.serviceName) } else -> null diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt index 895e17a1..3622332b 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt @@ -496,15 +496,16 @@ class ServerActivity : BaseActivity() { val spiderX = et_spider_x?.text?.toString()?.trim() ?: return var sni = streamSetting.populateTransportSettings( - transport = networks[network], - headerType = transportTypes(networks[network])[type], - host = requestHost, - path = path, - seed = path, - quicSecurity = requestHost, - key = path, - mode = transportTypes(networks[network])[type], - serviceName = path + transport = networks[network], + headerType = transportTypes(networks[network])[type], + host = requestHost, + path = path, + seed = path, + quicSecurity = requestHost, + key = path, + mode = transportTypes(networks[network])[type], + serviceName = path, + authority = requestHost, ) if (sniField.isNotBlank()) { sni = sniField diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt index 9bccd603..cf382636 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt @@ -176,7 +176,8 @@ object AngConfigManager { vmessBean.requestHost, vmessBean.path, vmessBean.headerType, - vmessBean.path + vmessBean.path, + vmessBean.requestHost, ) val allowInsecure = if (vmessBean.allowInsecure.isBlank()) { settingsStorage?.decodeBool(AppConfig.PREF_ALLOW_INSECURE) ?: false @@ -275,7 +276,8 @@ object AngConfigManager { vmessQRCode.host, vmessQRCode.path, vmessQRCode.type, - vmessQRCode.path + vmessQRCode.path, + vmessQRCode.host ) val fingerprint = vmessQRCode.fp ?: streamSetting.tlsSettings?.fingerprint @@ -383,7 +385,8 @@ object AngConfigManager { queryParam["quicSecurity"], queryParam["key"], queryParam["mode"], - queryParam["serviceName"] + queryParam["serviceName"], + queryParam["authority"] ) fingerprint = queryParam["fp"] ?: "" config.outboundBean?.streamSettings?.populateTlsSettings( @@ -411,7 +414,6 @@ object AngConfigManager { .associate { it.split("=").let { (k, v) -> k to Utils.urlDecode(v) } } config = ServerConfig.create(EConfigType.VLESS) val streamSetting = config.outboundBean?.streamSettings ?: return -1 - var fingerprint = streamSetting.tlsSettings?.fingerprint config.remarks = Utils.urlDecode(uri.fragment ?: "") config.outboundBean?.settings?.vnext?.get(0)?.let { vnext -> @@ -431,15 +433,18 @@ object AngConfigManager { queryParam["quicSecurity"], queryParam["key"], queryParam["mode"], - queryParam["serviceName"] + queryParam["serviceName"], + queryParam["authority"] ) - fingerprint = queryParam["fp"] ?: "" - val pbk = queryParam["pbk"] ?: "" - val sid = queryParam["sid"] ?: "" - val spx = Utils.urlDecode(queryParam["spx"] ?: "") streamSetting.populateTlsSettings( - queryParam["security"] ?: "", allowInsecure, - queryParam["sni"] ?: sni, fingerprint, queryParam["alpn"], pbk, sid, spx + queryParam["security"] ?: "", + allowInsecure, + queryParam["sni"] ?: sni, + queryParam["fp"] ?: "", + queryParam["alpn"], + queryParam["pbk"] ?: "", + queryParam["sid"] ?: "", + queryParam["spx"] ?: "" ) } else if (str.startsWith(EConfigType.WIREGUARD.protocolScheme)) { val uri = URI(Utils.fixIllegalUrl(str)) @@ -520,7 +525,8 @@ object AngConfigManager { queryParam["security"], queryParam["key"], queryParam["mode"], - queryParam["serviceName"]) + queryParam["serviceName"], + queryParam["authority"]) streamSetting.populateTlsSettings( if (tls) TLS else "", allowInsecure, sni, fingerprint, null, null, null, null @@ -758,7 +764,8 @@ object AngConfigManager { "grpc" -> { dicQuery["mode"] = transportDetails[0] - dicQuery["serviceName"] = transportDetails[2] + dicQuery["authority"] = Utils.urlEncode(transportDetails[1]) + dicQuery["serviceName"] = Utils.urlEncode(transportDetails[2]) } } } diff --git a/V2rayNG/app/src/main/res/values-ar/strings.xml b/V2rayNG/app/src/main/res/values-ar/strings.xml index 1712effa..c071472a 100644 --- a/V2rayNG/app/src/main/res/values-ar/strings.xml +++ b/V2rayNG/app/src/main/res/values-ar/strings.xml @@ -44,7 +44,7 @@ النقل نوع الرأس وضع gRPC - طلب الاستضافة (host/ws host/h2 host)/QUIC security + طلب الاستضافة (host/ws host/h2 host)/QUIC security/gRPC Authority المسار (ws path/h2 path)/QUIC key/kcp seed/gRPC serviceName TLS allowInsecure diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index 49681cbe..f5299b6c 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -46,7 +46,7 @@ انتقال نوع head حالت gRPC - میزبان درخواست (host/host ws/host h2)/امنیت QUIC + gRPC Authority/میزبان درخواست (host/host ws/host h2)/امنیت QUIC مسیر (مسیر ws/ مسیر h2) کلید QUIC/دانه kcp/نام‌خدمات gRPC TLS مجوز ناامن diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 4f9e6acc..ebf8970d 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -46,7 +46,7 @@ Другие параметры Тип заголовка Режим gRPC - Запрос узла (WS/H2) / Шифрование QUIC + Запрос узла (WS/H2) / Шифрование QUIC/gRPC Authority Путь (WS/H2) / Ключ QUIC / Сид KCP / Сервис gRPC TLS Разрешать небезопасные diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index 6ff9362c..064adcef 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -46,7 +46,7 @@ Nâng cao Kiểu ngụy trang (type) Chế độ gRPC - Yêu cầu host(host/ws host/h2 host)/QUIC security + Yêu cầu host(host/ws host/h2 host)/QUIC security/gRPC Authority path(ws path/h2 path)/QUIC key/kcp seed/gRPC serviceName TLS allowInsecure diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index 0dfe8577..bb6add7d 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -46,7 +46,7 @@ 底层传输方式(transport) 伪装类型(type) gRPC 传输模式(mode) - 伪装域名(host)(host/ws host/httpupgrade host/h2 host)/QUIC 加密方式 + 伪装域名(host)(host/ws host/httpupgrade host/h2 host)/QUIC 加密方式/gRPC Authority path(ws path/httpupgrade path/h2 path)/QUIC 加密密钥/kcp seed/gRPC serviceName 传输层安全(TLS) 跳过证书验证(allowInsecure) diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index 6ccce4de..86a56169 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -46,7 +46,7 @@ 底層傳輸方式 (transport) 標頭類型 gRPC 傳輸模式 (mode) - 要求主機 (host)(host/ws host/httpupgrade host/h2 host)/QUIC 加密方式 + 要求主機 (host)(host/ws host/httpupgrade host/h2 host)/QUIC 加密方式/gRPC Authority path(ws path/httpupgrade path/h2 path)/QUIC 加密金鑰/kcp seed/gRPC serviceName 傳輸層安全 (TLS) 跳過憑證驗證 (allowInsecure) diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index e72813d5..e8faccee 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -47,7 +47,7 @@ Transport head type gRPC mode - request host(host/ws host/httpupgrade host/h2 host)/QUIC security + request host(host/ws host/httpupgrade host/h2 host)/QUIC security/gRPC Authority path(ws path/httpupgrade path/h2 path)/QUIC key/kcp seed/gRPC serviceName TLS Fingerprint