Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2026-04-27 03:29:13 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2026-04-27 04:06:41 +0300
commit6d05702d005aeab043d71f9dc0fe51f50d10ccf7 (patch)
treef032da32a17c5ed3b024271f0ea1dfb67c38fc81 /sub/subService.go
parent9791b05a4efd2e22621927b9e80d288386e510df (diff)
TCP Masks
Diffstat (limited to 'sub/subService.go')
-rw-r--r--sub/subService.go61
1 files changed, 57 insertions, 4 deletions
diff --git a/sub/subService.go b/sub/subService.go
index 67b931ce..1ab55039 100644
--- a/sub/subService.go
+++ b/sub/subService.go
@@ -997,9 +997,14 @@ var validFinalMaskUDPTypes = map[string]struct{}{
"mkcp-original": {},
"xdns": {},
"xicmp": {},
- "header-custom": {},
"noise": {},
- "sudoku": {},
+ "header-custom": {},
+}
+
+var validFinalMaskTCPTypes = map[string]struct{}{
+ "header-custom": {},
+ "fragment": {},
+ "sudoku": {},
}
// applyKcpShareParams reconstructs legacy KCP share-link fields from either
@@ -1159,11 +1164,59 @@ func marshalFinalMask(finalmask map[string]any) (string, bool) {
}
func normalizeFinalMask(finalmask map[string]any) map[string]any {
+ tcpMasks := normalizedFinalMaskTCPMasks(finalmask)
udpMasks := normalizedFinalMaskUDPMasks(finalmask)
- if len(udpMasks) == 0 {
+ quicParams, hasQuicParams := finalmask["quicParams"].(map[string]any)
+
+ if len(tcpMasks) == 0 && len(udpMasks) == 0 && !hasQuicParams {
+ return nil
+ }
+
+ result := map[string]any{}
+ if len(tcpMasks) > 0 {
+ result["tcp"] = tcpMasks
+ }
+ if len(udpMasks) > 0 {
+ result["udp"] = udpMasks
+ }
+ if hasQuicParams && len(quicParams) > 0 {
+ result["quicParams"] = quicParams
+ }
+ return result
+}
+
+func normalizedFinalMaskTCPMasks(value any) []any {
+ finalmask, _ := value.(map[string]any)
+ if finalmask == nil {
+ return nil
+ }
+ rawMasks, _ := finalmask["tcp"].([]any)
+ if len(rawMasks) == 0 {
+ return nil
+ }
+
+ normalized := make([]any, 0, len(rawMasks))
+ for _, rawMask := range rawMasks {
+ mask, _ := rawMask.(map[string]any)
+ if mask == nil {
+ continue
+ }
+ maskType, _ := mask["type"].(string)
+ if _, ok := validFinalMaskTCPTypes[maskType]; !ok || maskType == "" {
+ continue
+ }
+
+ normalizedMask := map[string]any{"type": maskType}
+ if settings, ok := mask["settings"].(map[string]any); ok && len(settings) > 0 {
+ normalizedMask["settings"] = settings
+ }
+ normalized = append(normalized, normalizedMask)
+ }
+
+ if len(normalized) == 0 {
return nil
}
- return map[string]any{"udp": udpMasks}
+ return normalized
}
func normalizedFinalMaskUDPMasks(value any) []any {