refactor: remove browser dialer env reload path and refresh proto metadata

Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/e3502f01-e171-4e6f-9ae7-dc29b6682951

Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-26 07:44:58 +00:00
committed by GitHub
parent 2fdfa727b4
commit 27b8b29ef8
2 changed files with 14 additions and 47 deletions

View File

@@ -7,13 +7,13 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
stderrors "errors" stderrors "errors"
"net"
"net/http" "net/http"
"sync" "sync"
"time" "time"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/platform"
"github.com/xtls/xray-core/common/uuid" "github.com/xtls/xray-core/common/uuid"
) )
@@ -27,8 +27,6 @@ type task struct {
StreamResponse bool `json:"streamResponse"` StreamResponse bool `json:"streamResponse"`
} }
var conns chan *websocket.Conn
var server *http.Server
var sockoptDialers map[string]*dialerInstance var sockoptDialers map[string]*dialerInstance
var mu sync.Mutex var mu sync.Mutex
@@ -41,32 +39,12 @@ var upgrader = &websocket.Upgrader{
}, },
} }
// Used by external projects when using xray as a go module
func Reload() {
addr := getEnvAddress()
mu.Lock()
closeDialerInstance(&dialerInstance{conns: conns, server: server})
conns = nil
server = nil
var dialer *dialerInstance
if addr != "" {
dialer = newDialerInstance(addr)
conns = dialer.conns
server = dialer.server
}
mu.Unlock()
startDialerInstance(dialer)
}
func HasBrowserDialer() bool {
return conns != nil
}
func HasBrowserDialerWithAddress(addr string) bool { func HasBrowserDialerWithAddress(addr string) bool {
return connsByAddress(addr) != nil if addr == "" {
return false
}
_, _, err := net.SplitHostPort(addr)
return err == nil
} }
type webSocketExtra struct { type webSocketExtra struct {
@@ -78,10 +56,6 @@ type dialerInstance struct {
server *http.Server server *http.Server
} }
func getEnvAddress() string {
return platform.NewEnvFlag(platform.BrowserDialerAddress).GetValue(func() string { return "" })
}
func newDialerInstance(addr string) *dialerInstance { func newDialerInstance(addr string) *dialerInstance {
token := uuid.New() token := uuid.New()
csrfToken := token.String() csrfToken := token.String()
@@ -275,7 +249,7 @@ func dialTaskWithAddress(addr string, task task) (*websocket.Conn, error) {
if addr != "" { if addr != "" {
return nil, errors.New("browser dialer is not configured for sockopt.browserDialer: ", addr) return nil, errors.New("browser dialer is not configured for sockopt.browserDialer: ", addr)
} }
return nil, errors.New("browser dialer is not configured; set sockopt.browserDialer or env ", platform.BrowserDialerAddress) return nil, errors.New("browser dialer is not configured; set sockopt.browserDialer")
} }
var conn *websocket.Conn var conn *websocket.Conn
@@ -308,19 +282,12 @@ func CheckOK(conn *websocket.Conn) error {
} }
func connsByAddress(addr string) chan *websocket.Conn { func connsByAddress(addr string) chan *websocket.Conn {
if addr != "" { if addr == "" {
return nil
}
dialer := getDialerByAddress(addr) dialer := getDialerByAddress(addr)
if dialer == nil { if dialer == nil {
return nil return nil
} }
return dialer.conns return dialer.conns
} }
if HasBrowserDialer() {
return conns
}
return nil
}
func init() {
Reload()
}

View File

@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.36.11 // protoc-gen-go v1.36.11
// protoc v3.21.12 // protoc v6.33.5
// source: transport/internet/config.proto // source: transport/internet/config.proto
package internet package internet