feat: add browserDialer under sockopt and wire transports

Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/56665ec5-84ea-4bc3-a812-2e699e0e880d

Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-26 07:22:38 +00:00
committed by GitHub
parent b4f08981be
commit c2116bb869
7 changed files with 169 additions and 63 deletions
@@ -15,6 +15,7 @@ import (
// BrowserDialerClient implements splithttp.DialerClient in terms of browser dialer
type BrowserDialerClient struct {
transportConfig *Config
browserDialer string
}
func (c *BrowserDialerClient) IsClosed() bool {
@@ -33,7 +34,7 @@ func (c *BrowserDialerClient) OpenStream(ctx context.Context, url string, sessio
c.transportConfig.FillStreamRequest(request, sessionId, "")
conn, err := browser_dialer.DialGet(request.URL.String(), request.Header, request.Cookies())
conn, err := browser_dialer.DialGetWithAddress(c.browserDialer, request.URL.String(), request.Header, request.Cookies())
dummyAddr := &net.IPAddr{}
if err != nil {
return nil, dummyAddr, dummyAddr, err
@@ -62,7 +63,7 @@ func (c *BrowserDialerClient) PostPacket(ctx context.Context, url string, sessio
}
}
err = browser_dialer.DialPacket(method, request.URL.String(), request.Header, request.Cookies(), bytes)
err = browser_dialer.DialPacketWithAddress(c.browserDialer, method, request.URL.String(), request.Header, request.Cookies(), bytes)
if err != nil {
return err
}
+9 -2
View File
@@ -47,9 +47,16 @@ var (
func getHTTPClient(ctx context.Context, dest net.Destination, streamSettings *internet.MemoryStreamConfig) (DialerClient, *XmuxClient) {
realityConfig := reality.ConfigFromStreamSettings(streamSettings)
browserDialer := ""
if streamSettings.SocketSettings != nil {
browserDialer = streamSettings.SocketSettings.BrowserDialer
}
if browser_dialer.HasBrowserDialer() && realityConfig == nil {
return &BrowserDialerClient{transportConfig: streamSettings.ProtocolSettings.(*Config)}, nil
if browser_dialer.HasBrowserDialerWithAddress(browserDialer) && realityConfig == nil {
return &BrowserDialerClient{
transportConfig: streamSettings.ProtocolSettings.(*Config),
browserDialer: browserDialer,
}, nil
}
globalDialerAccess.Lock()