diff --git a/api/node.go b/api/node.go index 27835ae..81f448f 100644 --- a/api/node.go +++ b/api/node.go @@ -56,17 +56,17 @@ func readLocalRuleList(path string) (LocalRuleList []DetectRule) { } type NodeInfo struct { - DeviceLimit int - SpeedLimit uint64 - NodeType string - NodeId int - TLSType string - EnableVless bool - EnableTls bool - EnableSS2022 bool - V2ray *V2rayConfig - Trojan *TrojanConfig - SS *SSConfig + DeviceLimit int + SpeedLimit uint64 + NodeType string + NodeId int + TLSType string + EnableVless bool + EnableTls bool + //EnableSS2022 bool + V2ray *V2rayConfig + Trojan *TrojanConfig + SS *SSConfig } type SSConfig struct { @@ -130,10 +130,13 @@ func (c *Client) GetNodeInfo() (nodeInfo *NodeInfo, err error) { case "V2ray": i := bytes.Index(res.Body(), []byte("outbo")) md := md52.Sum(res.Body()[:i]) - nodeIsNotChange := true - if c.NodeInfoRspMd5 != [16]byte{} { + nodeNotIsChange := true + if c.NodeInfoRspMd5 == [16]byte{} { + nodeNotIsChange = false + c.NodeInfoRspMd5 = md + } else { if c.NodeInfoRspMd5 != md { - nodeIsNotChange = false + nodeNotIsChange = false c.NodeInfoRspMd5 = md } } @@ -143,7 +146,7 @@ func (c *Client) GetNodeInfo() (nodeInfo *NodeInfo, err error) { ruleIsChange = true c.NodeRuleRspMd5 = md2 } - nodeInfo, err = c.ParseV2rayNodeResponse(res.Body(), nodeIsNotChange, ruleIsChange) + nodeInfo, err = c.ParseV2rayNodeResponse(res.Body(), nodeNotIsChange, ruleIsChange) case "Trojan": md := md52.Sum(res.Body()) if c.NodeInfoRspMd5 != [16]byte{} { @@ -189,6 +192,7 @@ func (c *Client) ParseTrojanNodeResponse(body []byte) (*NodeInfo, error) { node.DeviceLimit = c.DeviceLimit node.NodeId = c.NodeID node.NodeType = c.NodeType + node.Trojan.TransportProtocol = "tcp" return node, nil } @@ -225,7 +229,7 @@ func (c *Client) ParseSSNodeResponse() (*NodeInfo, error) { // ParseV2rayNodeResponse parse the response for the given nodeinfor format func (c *Client) ParseV2rayNodeResponse(body []byte, notParseNode, parseRule bool) (*NodeInfo, error) { - if notParseNode && (!parseRule) { + if notParseNode && !parseRule { return nil, nil } node := &NodeInfo{V2ray: &V2rayConfig{}} diff --git a/service/controller/controller.go b/service/controller/controller.go index 85f98f7..00278a2 100644 --- a/service/controller/controller.go +++ b/service/controller/controller.go @@ -133,7 +133,7 @@ func (c *Controller) nodeInfoMonitor() (err error) { var nodeInfoChanged = false // If nodeInfo changed if newNodeInfo != nil { - if !reflect.DeepEqual(c.nodeInfo, newNodeInfo) { + if c.nodeInfo.SS == nil || !reflect.DeepEqual(c.nodeInfo.SS, newNodeInfo.SS) { // Remove old tag oldtag := c.Tag err := c.removeOldTag(oldtag) diff --git a/service/controller/inboundbuilder.go b/service/controller/inboundbuilder.go index e828b1e..15c0b8a 100644 --- a/service/controller/inboundbuilder.go +++ b/service/controller/inboundbuilder.go @@ -65,7 +65,7 @@ func InboundBuilder(config *Config, nodeInfo *api.NodeInfo, tag string) (*core.I nodeInfo.V2ray.Inbounds[0].PortList = &conf.PortList{ Range: []conf.PortRange{{From: uint32(nodeInfo.Trojan.LocalPort), To: uint32(nodeInfo.Trojan.LocalPort)}}, } - t := conf.TransportProtocol(nodeInfo.SS.TransportProtocol) + t := conf.TransportProtocol(nodeInfo.Trojan.TransportProtocol) nodeInfo.V2ray.Inbounds[0].StreamSetting = &conf.StreamConfig{Network: &t} } else if nodeInfo.NodeType == "Shadowsocks" { defer func() { diff --git a/service/controller/userbuilder.go b/service/controller/userbuilder.go index e22a92e..ec05c7a 100644 --- a/service/controller/userbuilder.go +++ b/service/controller/userbuilder.go @@ -77,7 +77,7 @@ func (c *Controller) buildTrojanUsers(userInfo *[]api.UserInfo) (users []*protoc users = make([]*protocol.User, len(*userInfo)) for i, user := range *userInfo { trojanAccount := &trojan.Account{ - Password: user.V2rayUser.Uuid, + Password: user.TrojanUser.Password, Flow: "xtls-rprx-direct", } users[i] = &protocol.User{ @@ -91,7 +91,7 @@ func (c *Controller) buildTrojanUsers(userInfo *[]api.UserInfo) (users []*protoc func (c *Controller) buildTrojanUser(userInfo *api.UserInfo) (user *protocol.User) { trojanAccount := &trojan.Account{ - Password: userInfo.V2rayUser.Uuid, + Password: userInfo.TrojanUser.Password, Flow: "xtls-rprx-direct", } user = &protocol.User{