diff --git a/getter/base.go b/getter/base.go index bf28139..29134b7 100644 --- a/getter/base.go +++ b/getter/base.go @@ -7,7 +7,7 @@ import ( ) type Getter interface { - Get() []proxy.Proxy + Get() []*proxy.Proxy } func String2Proxy(link string) proxy.Proxy { @@ -27,8 +27,8 @@ func String2Proxy(link string) proxy.Proxy { func StringArray2ProxyArray(origin []string) []proxy.Proxy { var err error results := make([]proxy.Proxy, 0) - var data proxy.Proxy for _, link := range origin { + var data proxy.Proxy if strings.HasPrefix(link, "ssr://") { data, err = proxy.ParseSSRLink(link) } else if strings.HasPrefix(link, "vmess://") { diff --git a/provider/clash.go b/provider/clash.go index 28bb438..0c927a7 100644 --- a/provider/clash.go +++ b/provider/clash.go @@ -25,13 +25,13 @@ func (c Clash) Provide() string { func checkClashSupport(p proxy.Proxy) bool { switch p.(type) { - case proxy.ShadowsocksR: - ssr := p.(proxy.ShadowsocksR) + case *proxy.ShadowsocksR: + ssr := p.(*proxy.ShadowsocksR) if checkInList(ssrCipherList, ssr.Cipher) && checkInList(ssrProtocolList, ssr.Protocol) && checkInList(ssrObfsList, ssr.Obfs) { return true } - case proxy.Vmess: - vmess := p.(proxy.Vmess) + case *proxy.Vmess: + vmess := p.(*proxy.Vmess) if checkInList(vmessCipherList, vmess.Cipher) { return true } diff --git a/proxy/shadowsocksr.go b/proxy/shadowsocksr.go index 9713241..66d4b34 100644 --- a/proxy/shadowsocksr.go +++ b/proxy/shadowsocksr.go @@ -53,32 +53,32 @@ func (ssr ShadowsocksR) ToClash() string { return "- " + string(data) } -func (ssr ShadowsocksR) SetName(name string) { +func (ssr *ShadowsocksR) SetName(name string) { ssr.Name = name } -func ParseSSRLink(link string) (ShadowsocksR, error) { +func ParseSSRLink(link string) (*ShadowsocksR, error) { if !strings.HasPrefix(link, "ssr") { - return ShadowsocksR{}, ErrorNotSSRLink + return nil, ErrorNotSSRLink } ssrmix := strings.SplitN(link, "://", 2) if len(ssrmix) < 2 { - return ShadowsocksR{}, ErrorNotSSRLink + return nil, ErrorNotSSRLink } linkPayloadBase64 := ssrmix[1] payload, err := tool.Base64DecodeString(linkPayloadBase64) if err != nil { - return ShadowsocksR{}, ErrorMissingQuery + return nil, ErrorMissingQuery } infoPayload := strings.SplitN(payload, "/?", 2) if len(infoPayload) < 2 { - return ShadowsocksR{}, ErrorNotSSRLink + return nil, ErrorNotSSRLink } ssrpath := strings.Split(infoPayload[0], ":") if len(ssrpath) < 6 { - return ShadowsocksR{}, ErrorPathNotComplete + return nil, ErrorPathNotComplete } // base info server := strings.ToLower(ssrpath[0]) @@ -88,7 +88,7 @@ func ParseSSRLink(link string) (ShadowsocksR, error) { obfs := strings.ToLower(ssrpath[4]) password, err := tool.Base64DecodeString(ssrpath[5]) if err != nil { - return ShadowsocksR{}, ErrorPasswordParseFail + return nil, ErrorPasswordParseFail } moreInfo, _ := url.ParseQuery(infoPayload[1]) @@ -110,7 +110,7 @@ func ParseSSRLink(link string) (ShadowsocksR, error) { // protocol param protocolParam, err := tool.Base64DecodeString(moreInfo.Get("protoparam")) if err != nil { - return ShadowsocksR{}, ErrorProtocolParamParseFail + return nil, ErrorProtocolParamParseFail } if strings.HasSuffix(protocolParam, "_compatible") { protocolParam = strings.ReplaceAll(protocolParam, "_compatible", "") @@ -119,7 +119,7 @@ func ParseSSRLink(link string) (ShadowsocksR, error) { // obfs param obfsParam, err := tool.Base64DecodeString(moreInfo.Get("obfsparam")) if err != nil { - return ShadowsocksR{}, ErrorObfsParamParseFail + return nil, ErrorObfsParamParseFail } if strings.HasSuffix(obfsParam, "_compatible") { obfsParam = strings.ReplaceAll(obfsParam, "_compatible", "") @@ -131,7 +131,7 @@ func ParseSSRLink(link string) (ShadowsocksR, error) { //} group := "" - return ShadowsocksR{ + return &ShadowsocksR{ Base: Base{ Name: remarks + "_" + strconv.Itoa(rand.Int()), Server: server, diff --git a/proxy/vmess.go b/proxy/vmess.go index 4066a7b..da74165 100644 --- a/proxy/vmess.go +++ b/proxy/vmess.go @@ -17,11 +17,6 @@ import ( var ( ErrorNotVmessLink = errors.New("not a correct vmess link") ErrorVmessPayloadParseFail = errors.New("vmess link payload parse failed") - //ErrorPasswordParseFail = errors.New("password parse failed") - //ErrorPathNotComplete = errors.New("path not complete") - //ErrorMissingQuery = errors.New("link missing query") - //ErrorProtocolParamParseFail = errors.New("protocol param parse failed") - //ErrorObfsParamParseFail = errors.New("obfs param parse failed") ) type Vmess struct { @@ -64,7 +59,7 @@ func (v Vmess) ToClash() string { return "- " + string(data) } -func (v Vmess) SetName(name string) { +func (v *Vmess) SetName(name string) { v.Name = name } @@ -82,14 +77,14 @@ type vmessLinkJson struct { Tls string `json:"tls"` } -func ParseVmessLink(link string) (Vmess, error) { +func ParseVmessLink(link string) (*Vmess, error) { if !strings.HasPrefix(link, "vmess") { - return Vmess{}, ErrorNotVmessLink + return nil, ErrorNotVmessLink } vmessmix := strings.SplitN(link, "://", 2) if len(vmessmix) < 2 { - return Vmess{}, ErrorNotVmessLink + return nil, ErrorNotVmessLink } linkPayload := vmessmix[1] if strings.Contains(linkPayload, "?") { @@ -101,30 +96,30 @@ func ParseVmessLink(link string) (Vmess, error) { infoPayloads = strings.SplitN(linkPayload, "?", 2) } if len(infoPayloads) < 2 { - return Vmess{}, ErrorNotVmessLink + return nil, ErrorNotVmessLink } baseInfo, err := tool.Base64DecodeString(infoPayloads[0]) if err != nil { - return Vmess{}, ErrorVmessPayloadParseFail + return nil, ErrorVmessPayloadParseFail } fmt.Println(baseInfo) baseInfoPath := strings.Split(baseInfo, ":") if len(baseInfoPath) < 3 { - return Vmess{}, ErrorPathNotComplete + return nil, ErrorPathNotComplete } // base info cipher := baseInfoPath[0] mixInfo := strings.SplitN(baseInfoPath[1], "@", 2) if len(mixInfo) < 2 { - return Vmess{}, ErrorVmessPayloadParseFail + return nil, ErrorVmessPayloadParseFail } uuid := mixInfo[0] server := mixInfo[1] portStr := baseInfoPath[2] port, err := strconv.Atoi(portStr) if err != nil { - return Vmess{}, ErrorVmessPayloadParseFail + return nil, ErrorVmessPayloadParseFail } moreInfo, _ := url.ParseQuery(infoPayloads[1]) @@ -140,7 +135,7 @@ func ParseVmessLink(link string) (Vmess, error) { tls := moreInfo.Get("tls") == "1" wsHeaders := make(map[string]string) - return Vmess{ + return &Vmess{ Base: Base{ Name: remarks + "_" + strconv.Itoa(rand.Int()), Server: server, @@ -162,12 +157,12 @@ func ParseVmessLink(link string) (Vmess, error) { } else { payload, err := tool.Base64DecodeString(linkPayload) if err != nil { - return Vmess{}, ErrorVmessPayloadParseFail + return nil, ErrorVmessPayloadParseFail } vmessJson := vmessLinkJson{} err = json.Unmarshal([]byte(payload), &vmessJson) if err != nil { - return Vmess{}, err + return nil, err } port := 443 portInterface := vmessJson.Port @@ -186,7 +181,7 @@ func ParseVmessLink(link string) (Vmess, error) { wsHeaders := make(map[string]string) wsHeaders["HOST"] = vmessJson.Host - return Vmess{ + return &Vmess{ Base: Base{ Name: vmessJson.Ps + "_" + strconv.Itoa(rand.Int()), Server: vmessJson.Add,