mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-07-03 02:08:45 +00:00
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:
committed by
GitHub
parent
3a826b7ece
commit
8043924af5
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user