mirror of
https://github.com/bestnite/sub2clash.git
synced 2025-07-07 05:12:34 +08:00
u
This commit is contained in:
@ -26,7 +26,7 @@ func (p *AnytlsParser) GetType() string {
|
||||
return "anytls"
|
||||
}
|
||||
|
||||
func (p *AnytlsParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *AnytlsParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
@ -72,6 +72,7 @@ func (p *AnytlsParser) Parse(proxy string) (P.Proxy, error) {
|
||||
Password: password,
|
||||
SNI: sni,
|
||||
SkipCertVerify: insecureBool,
|
||||
UDP: config.UseUDP,
|
||||
},
|
||||
}
|
||||
return result, nil
|
||||
|
@ -77,14 +77,18 @@ func DecodeBase64(s string) (string, error) {
|
||||
return string(decodeStr), nil
|
||||
}
|
||||
|
||||
func ParseProxies(proxies ...string) ([]P.Proxy, error) {
|
||||
type ParseConfig struct {
|
||||
UseUDP bool
|
||||
}
|
||||
|
||||
func ParseProxies(config ParseConfig, proxies ...string) ([]P.Proxy, error) {
|
||||
var result []P.Proxy
|
||||
for _, proxy := range proxies {
|
||||
if proxy != "" {
|
||||
var proxyItem P.Proxy
|
||||
var err error
|
||||
|
||||
proxyItem, err = ParseProxyWithRegistry(proxy)
|
||||
proxyItem, err = ParseProxyWithRegistry(config, proxy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ func (p *HysteriaParser) GetType() string {
|
||||
return "hysteria"
|
||||
}
|
||||
|
||||
func (p *HysteriaParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *HysteriaParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ func (p *Hysteria2Parser) GetType() string {
|
||||
return "hysteria2"
|
||||
}
|
||||
|
||||
func (p *Hysteria2Parser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *Hysteria2Parser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
type ProxyParser interface {
|
||||
Parse(proxy string) (P.Proxy, error)
|
||||
Parse(config ParseConfig, proxy string) (P.Proxy, error)
|
||||
GetPrefixes() []string
|
||||
GetType() string
|
||||
SupportClash() bool
|
||||
@ -64,7 +64,7 @@ func GetAllPrefixes() []string {
|
||||
return prefixes
|
||||
}
|
||||
|
||||
func ParseProxyWithRegistry(proxy string) (P.Proxy, error) {
|
||||
func ParseProxyWithRegistry(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
proxy = strings.TrimSpace(proxy)
|
||||
if proxy == "" {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidStruct, "empty proxy string")
|
||||
@ -72,7 +72,7 @@ func ParseProxyWithRegistry(proxy string) (P.Proxy, error) {
|
||||
|
||||
for prefix, parser := range registry.parsers {
|
||||
if strings.HasPrefix(proxy, prefix) {
|
||||
return parser.Parse(proxy)
|
||||
return parser.Parse(config, proxy)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ func (p *ShadowsocksParser) GetType() string {
|
||||
}
|
||||
|
||||
// Parse 解析Shadowsocks代理
|
||||
func (p *ShadowsocksParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *ShadowsocksParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
@ -108,9 +108,9 @@ func (p *ShadowsocksParser) Parse(proxy string) (P.Proxy, error) {
|
||||
Password: password,
|
||||
Server: server,
|
||||
Port: port,
|
||||
UDP: config.UseUDP,
|
||||
},
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ func (p *ShadowsocksRParser) GetType() string {
|
||||
return "ssr"
|
||||
}
|
||||
|
||||
func (p *ShadowsocksRParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *ShadowsocksRParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
@ -100,9 +100,9 @@ func (p *ShadowsocksRParser) Parse(proxy string) (P.Proxy, error) {
|
||||
Password: password,
|
||||
ObfsParam: obfsParam,
|
||||
ProtocolParam: protoParam,
|
||||
UDP: config.UseUDP,
|
||||
},
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ func (p *SocksParser) GetType() string {
|
||||
return "socks5"
|
||||
}
|
||||
|
||||
func (p *SocksParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *SocksParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ func (p *TrojanParser) GetType() string {
|
||||
return "trojan"
|
||||
}
|
||||
|
||||
func (p *TrojanParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *TrojanParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ func (p *VlessParser) GetType() string {
|
||||
return "vless"
|
||||
}
|
||||
|
||||
func (p *VlessParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *VlessParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ func (p *VmessParser) GetType() string {
|
||||
return "vmess"
|
||||
}
|
||||
|
||||
func (p *VmessParser) Parse(proxy string) (P.Proxy, error) {
|
||||
func (p *VmessParser) Parse(config ParseConfig, proxy string) (P.Proxy, error) {
|
||||
if !hasPrefix(proxy, p.GetPrefixes()) {
|
||||
return P.Proxy{}, fmt.Errorf("%w: %s", ErrInvalidPrefix, proxy)
|
||||
}
|
||||
@ -112,6 +112,7 @@ func (p *VmessParser) Parse(proxy string) (P.Proxy, error) {
|
||||
UUID: vmess.Id,
|
||||
AlterID: aid,
|
||||
Cipher: vmess.Scy,
|
||||
UDP: config.UseUDP,
|
||||
}
|
||||
|
||||
if len(alpn) > 0 {
|
||||
|
Reference in New Issue
Block a user