mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-02 03:05:02 +03:00
feat(xray): keep the XHTTP server's h2Params
xray-core 26.10.31 (#7295) added xhttpSettings.h2Params, a Go net/http HTTP2Config the XHTTP server applies to its HTTP/2 listener. The inbound form parsed xhttpSettings through a Zod object that strips unknown keys, so a value set through the JSON editor vanished on the next save; it is now kept as an optional record. h2Params tunes the server only. Share links already carry an allowlist of XHTTP keys, but the JSON subscription copies the inbound's xhttpSettings minus a denylist, which now drops h2Params too.
This commit is contained in:
@@ -809,6 +809,7 @@ func (s *SubJsonService) streamData(stream string, clientKey string) map[string]
|
||||
delete(xhttp, "scMaxBufferedPosts")
|
||||
delete(xhttp, "scStreamUpServerSecs")
|
||||
delete(xhttp, "serverMaxHeaderBytes")
|
||||
delete(xhttp, "h2Params")
|
||||
// Values matching xray-core's own defaults stay off the wire:
|
||||
// old panels seeded them into every stored config and the
|
||||
// literal scMinPostsIntervalMs=30 is a DPI fingerprint (#5141).
|
||||
|
||||
@@ -155,6 +155,19 @@ func TestSubJsonServiceInjectsGlobalFinalMask(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// h2Params (xray-core 26.10.31, #7295) tunes the XHTTP server's HTTP/2; clients must not get it.
|
||||
func TestSubJsonServiceDropsXhttpServerOnlyH2Params(t *testing.T) {
|
||||
svc := NewSubJsonService("", "", "", "", nil)
|
||||
stream := svc.streamData(`{"network":"xhttp","security":"none","xhttpSettings":{"path":"/x","mode":"auto","h2Params":{"MaxConcurrentStreams":512}}}`, "")
|
||||
xhttp, _ := stream["xhttpSettings"].(map[string]any)
|
||||
if xhttp == nil || xhttp["path"] != "/x" {
|
||||
t.Fatalf("xhttpSettings = %#v, want the inbound's path kept", stream["xhttpSettings"])
|
||||
}
|
||||
if h2, ok := xhttp["h2Params"]; ok {
|
||||
t.Fatalf("xhttpSettings.h2Params = %#v, want the server-only key dropped", h2)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSubJsonServiceMergesWithExistingFinalMask(t *testing.T) {
|
||||
finalMask := `{"tcp":[{"type":"fragment","settings":{"packets":"tlshello"}}]}`
|
||||
svc := NewSubJsonService("", "", finalMask, "", nil)
|
||||
|
||||
Reference in New Issue
Block a user