Move browser dialer start stop to instance lifecycle

Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/b8c640ab-f93c-4609-8e34-a8e14e2be9e7

Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-27 13:32:47 +00:00
committed by GitHub
parent 3a826b7ece
commit 8043924af5
3 changed files with 31 additions and 3 deletions
+9
View File
@@ -18,6 +18,7 @@ import (
"github.com/xtls/xray-core/features/routing" "github.com/xtls/xray-core/features/routing"
"github.com/xtls/xray-core/features/stats" "github.com/xtls/xray-core/features/stats"
"github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet"
"github.com/xtls/xray-core/transport/internet/browser_dialer"
) )
// Server is an instance of Xray. At any time, there must be at most one Server instance running. // Server is an instance of Xray. At any time, there must be at most one Server instance running.
@@ -262,6 +263,9 @@ func (s *Instance) Close() error {
s.running = false s.running = false
var errs []interface{} var errs []interface{}
if err := browser_dialer.StopCollectedDialerProxyURLs(); err != nil {
errs = append(errs, err)
}
for _, f := range s.features { for _, f := range s.features {
if err := f.Close(); err != nil { if err := f.Close(); err != nil {
errs = append(errs, err) errs = append(errs, err)
@@ -385,9 +389,14 @@ func (s *Instance) Start() error {
s.statusLock.Lock() s.statusLock.Lock()
defer s.statusLock.Unlock() defer s.statusLock.Unlock()
if err := browser_dialer.StartCollectedDialerProxyURLs(); err != nil {
return err
}
s.running = true s.running = true
for _, f := range s.features { for _, f := range s.features {
if err := f.Start(); err != nil { if err := f.Start(); err != nil {
s.running = false
_ = browser_dialer.StopCollectedDialerProxyURLs()
return err return err
} }
} }
-3
View File
@@ -632,9 +632,6 @@ func (c *Config) Build() (*core.Config, error) {
if err := browser_dialer.ConfigureCollectedDialerProxyURLs(); err != nil { if err := browser_dialer.ConfigureCollectedDialerProxyURLs(); err != nil {
return nil, errors.New("failed to configure browser dialer").Base(err) return nil, errors.New("failed to configure browser dialer").Base(err)
} }
if err := browser_dialer.StartCollectedDialerProxyURLs(); err != nil {
return nil, errors.New("failed to start browser dialer listeners").Base(err)
}
return config, nil return config, nil
} }
@@ -123,6 +123,20 @@ func StartCollectedDialerProxyURLs() error {
return nil return nil
} }
func StopCollectedDialerProxyURLs() error {
var stopErr error
for listenAddr, server := range serversByListenAddr {
if err := server.stop(); err != nil && stopErr == nil {
stopErr = errors.New("failed to stop browser dialer listener on ", listenAddr).Base(err)
}
}
dialersByAddress = map[string]*dialerInstance{}
serversByListenAddr = map[string]*dialerServer{}
pendingURLs = nil
initialized = false
return stopErr
}
type dialerInstance struct { type dialerInstance struct {
conns chan *websocket.Conn conns chan *websocket.Conn
page []byte page []byte
@@ -227,6 +241,14 @@ func (d *dialerServer) start() error {
return nil return nil
} }
func (d *dialerServer) stop() error {
if !d.started {
return nil
}
d.started = false
return d.server.Close()
}
func closeConnection(w http.ResponseWriter) { func closeConnection(w http.ResponseWriter) {
hijacker, ok := w.(http.Hijacker) hijacker, ok := w.(http.Hijacker)
if !ok { if !ok {