diff --git a/frontend/src/lib/xray/inbound-link.ts b/frontend/src/lib/xray/inbound-link.ts index 52f8d60d..55f2afd5 100644 --- a/frontend/src/lib/xray/inbound-link.ts +++ b/frontend/src/lib/xray/inbound-link.ts @@ -232,6 +232,7 @@ export function genVmessLink(input: GenVmessLinkInput): string { if (tlsSettings.serverName.length > 0) obj.sni = tlsSettings.serverName; if (tlsSettings.settings.fingerprint.length > 0) obj.fp = tlsSettings.settings.fingerprint; if (tlsSettings.alpn.length > 0) obj.alpn = tlsSettings.alpn.join(','); + if (tlsSettings.settings.echConfigList.length > 0) obj.ech = tlsSettings.settings.echConfigList; if (tlsSettings.settings.pinnedPeerCertSha256.length > 0) { obj.pcs = tlsSettings.settings.pinnedPeerCertSha256.join(','); } diff --git a/sub/subJsonService.go b/sub/subJsonService.go index 42dd7358..a6b4e14d 100644 --- a/sub/subJsonService.go +++ b/sub/subJsonService.go @@ -258,6 +258,9 @@ func (s *SubJsonService) tlsData(tData map[string]any) map[string]any { if fingerprint, ok := tlsClientSettings["fingerprint"].(string); ok { tlsData["fingerprint"] = fingerprint } + if ech, ok := tlsClientSettings["echConfigList"].(string); ok && ech != "" { + tlsData["echConfigList"] = ech + } if pins, ok := tlsClientSettings["pinnedPeerCertSha256"].([]any); ok && len(pins) > 0 { tlsData["pinnedPeerCertSha256"] = pins } diff --git a/sub/subService.go b/sub/subService.go index baba974f..169f06e1 100644 --- a/sub/subService.go +++ b/sub/subService.go @@ -894,6 +894,11 @@ func applyShareTLSParams(stream map[string]any, params map[string]string) { if fpValue, ok := searchKey(tlsSettings, "fingerprint"); ok { params["fp"], _ = fpValue.(string) } + if echValue, ok := searchKey(tlsSettings, "echConfigList"); ok { + if ech, _ := echValue.(string); ech != "" { + params["ech"] = ech + } + } if pins, ok := pinnedSha256List(tlsSettings); ok { params["pcs"] = strings.Join(pins, ",") } @@ -919,6 +924,11 @@ func applyVmessTLSParams(stream map[string]any, obj map[string]any) { if fpValue, ok := searchKey(tlsSettings, "fingerprint"); ok { obj["fp"], _ = fpValue.(string) } + if echValue, ok := searchKey(tlsSettings, "echConfigList"); ok { + if ech, _ := echValue.(string); ech != "" { + obj["ech"] = ech + } + } if pins, ok := pinnedSha256List(tlsSettings); ok { obj["pcs"] = strings.Join(pins, ",") }