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