This commit is contained in:
CN-JS-HuiBai
2026-04-15 00:08:57 +08:00
parent ee7300435a
commit 035a1335a8

View File

@@ -63,6 +63,7 @@ type XNodeConfig struct {
ServerConfig json.RawMessage `json:"server_config"`
ServerConfig_ json.RawMessage `json:"serverConfig"`
Config json.RawMessage `json:"config"`
ListenIP string `json:"listen_ip"`
Port int `json:"port"`
ServerPort int `json:"server_port"`
Protocol string `json:"protocol"`
@@ -74,6 +75,7 @@ type XNodeConfig struct {
}
type XInnerConfig struct {
ListenIP string `json:"listen_ip"`
Port int `json:"port"`
ServerPort int `json:"server_port"`
Protocol string `json:"protocol"`
@@ -207,6 +209,13 @@ func (s *Service) setupNode() error {
}
// Fallback to flat if still empty
if inner.ListenIP == "" {
inner.ListenIP = config.ListenIP
}
if inner.ListenIP == "" {
inner.ListenIP = "0.0.0.0"
}
if inner.Protocol == "" {
inner.Protocol = config.Protocol
}
@@ -239,11 +248,14 @@ func (s *Service) setupNode() error {
s.logger.Info("Xboard protocol identified: ", protocol)
listenAddr := badoption.ParseAddr(inner.ListenIP)
var inboundOptions any
switch protocol {
case "vless":
vlessOptions := option.VLESSInboundOptions{
ListenOptions: option.ListenOptions{
Listen: &listenAddr,
ListenPort: uint16(inner.Port),
},
}
@@ -278,6 +290,7 @@ func (s *Service) setupNode() error {
case "vmess":
vmessOptions := option.VMessInboundOptions{
ListenOptions: option.ListenOptions{
Listen: &listenAddr,
ListenPort: uint16(inner.Port),
},
}
@@ -285,6 +298,7 @@ func (s *Service) setupNode() error {
case "shadowsocks":
ssOptions := option.ShadowsocksInboundOptions{
ListenOptions: option.ListenOptions{
Listen: &listenAddr,
ListenPort: uint16(inner.Port),
},
Method: inner.Cipher,
@@ -294,6 +308,7 @@ func (s *Service) setupNode() error {
case "trojan":
trojanOptions := option.TrojanInboundOptions{
ListenOptions: option.ListenOptions{
Listen: &listenAddr,
ListenPort: uint16(inner.Port),
},
}
@@ -421,6 +436,10 @@ func (s *Service) syncUsers() {
return
}
if len(users) == 0 {
s.logger.Warn("Xboard sync: no users returned from panel. Check your Node ID and User config.")
}
s.access.Lock()
defer s.access.Unlock()
@@ -640,12 +659,19 @@ func (s *Service) fetchUsers() ([]XUser, error) {
body, _ := io.ReadAll(resp.Body)
var result struct {
Data []XUser `json:"data"`
Data []XUser `json:"data"`
Users []XUser `json:"users"`
}
err = json.Unmarshal(body, &result)
if err != nil {
s.logger.Debug("Xboard raw user response: ", string(body))
s.logger.Error("Xboard raw user response: ", string(body))
return nil, err
}
return result.Data, nil
userList := result.Data
if len(userList) == 0 {
userList = result.Users
}
return userList, nil
}