From b607b8eb4a3de3e2c07f545dde0e57a336c8299b Mon Sep 17 00:00:00 2001 From: yuzuki999 Date: Mon, 6 Jun 2022 15:23:40 +0800 Subject: [PATCH] fix get node info and node rule error --- api/api.go | 3 +-- api/node.go | 37 +++++++++++++++++++++++-------------- common/limiter/limiter.go | 4 ++-- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/api/api.go b/api/api.go index b5c4518..69efa6d 100644 --- a/api/api.go +++ b/api/api.go @@ -78,7 +78,7 @@ func New(apiConfig *Config) API { }) // Read local rule list localRuleList := readLocalRuleList(apiConfig.RuleListPath) - apiClient := &Client{ + return &Client{ client: client, NodeID: apiConfig.NodeID, Key: apiConfig.Key, @@ -91,5 +91,4 @@ func New(apiConfig *Config) API { DeviceLimit: apiConfig.DeviceLimit, LocalRuleList: localRuleList, } - return apiClient } diff --git a/api/node.go b/api/node.go index 8d600e9..fab9156 100644 --- a/api/node.go +++ b/api/node.go @@ -124,25 +124,34 @@ func (c *Client) GetNodeInfo() (nodeInfo *NodeInfo, err error) { if err != nil { return nil, err } - i := bytes.Index(res.Body(), []byte("outbo")) - md := md52.Sum(res.Body()[:i]) - nodeIsNotChange := false - if c.NodeInfoRspMd5 != [16]byte{} { - if c.NodeInfoRspMd5 == md { - nodeIsNotChange = true - } - } - c.NodeInfoRspMd5 = md c.access.Lock() defer c.access.Unlock() switch c.NodeType { case "V2ray": - md2 := md52.Sum(res.Body()[i:]) - nodeInfo, err = c.ParseV2rayNodeResponse(res.Body(), nodeIsNotChange, c.NodeRuleRspMd5 != md2) - case "Trojan": - if nodeIsNotChange { - return nil, nil + i := bytes.Index(res.Body(), []byte("outbo")) + md := md52.Sum(res.Body()[:i]) + nodeIsNotChange := true + if c.NodeInfoRspMd5 != [16]byte{} { + if c.NodeInfoRspMd5 != md { + nodeIsNotChange = false + c.NodeInfoRspMd5 = md + } } + md2 := md52.Sum(res.Body()[i:]) + ruleIsChange := false + if c.NodeRuleRspMd5 != md2 { + ruleIsChange = true + c.NodeRuleRspMd5 = md2 + } + nodeInfo, err = c.ParseV2rayNodeResponse(res.Body(), nodeIsNotChange, ruleIsChange) + case "Trojan": + md := md52.Sum(res.Body()) + if c.NodeInfoRspMd5 != [16]byte{} { + if c.NodeInfoRspMd5 == md { + return nil, nil + } + } + c.NodeInfoRspMd5 = md nodeInfo, err = c.ParseTrojanNodeResponse(res.Body()) } return nodeInfo, nil diff --git a/common/limiter/limiter.go b/common/limiter/limiter.go index 046669e..fa4b40e 100644 --- a/common/limiter/limiter.go +++ b/common/limiter/limiter.go @@ -125,8 +125,8 @@ func (l *Limiter) GetUserBucket(tag string, email string, ip string) (limiter *r inboundInfo := value.(*InboundInfo) nodeLimit := inboundInfo.NodeSpeedLimit var userLimit uint64 = 0 - var deviceLimit int = 0 - var uid int = 0 + var deviceLimit = 0 + var uid = 0 if v, ok := inboundInfo.UserInfo.Load(email); ok { u := v.(UserInfo) uid = u.UID