diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2026-04-27 03:29:13 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2026-04-27 04:06:41 +0300 |
| commit | 6d05702d005aeab043d71f9dc0fe51f50d10ccf7 (patch) | |
| tree | f032da32a17c5ed3b024271f0ea1dfb67c38fc81 /sub/subService.go | |
| parent | 9791b05a4efd2e22621927b9e80d288386e510df (diff) | |
TCP Masks
Diffstat (limited to 'sub/subService.go')
| -rw-r--r-- | sub/subService.go | 61 |
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 { |
