Documentation
¶
Index ¶
- func FilterByCountry(codes ...string) func(ProxyNode) bool
- func FilterByName(keyword string) func(ProxyNode) bool
- func FilterByType(types ...string) func(ProxyNode) bool
- func HealthyDials(results []NodeResult) []proxyclient.Dial
- func NodeToURL(node map[string]any) (*url.URL, error)
- type GeoLookup
- type HealthCheckConfig
- type NodeResult
- type Options
- type ProxyGroup
- type ProxyNode
- type Strategy
- type Subscription
- func FetchSubscription(subscribeURL string) (*Subscription, error)
- func FetchSubscriptionWithUA(subscribeURL, userAgent string) (*Subscription, error)
- func NewDialer(subscribeURL string, opts Options) (proxyclient.Dial, *Subscription, error)
- func NewDialerFromSubscription(sub *Subscription, opts Options) (proxyclient.Dial, *Subscription, error)
- func ParseSubscription(data []byte) (*Subscription, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FilterByCountry ¶
FilterByCountry returns a filter function for use with clash.Options.Filter that keeps nodes whose server IP resolves to one of the given country codes.
func FilterByName ¶
FilterByName returns a filter function that keeps nodes whose name contains the keyword.
func FilterByType ¶
FilterByType returns a filter function that only keeps nodes of the given types.
func HealthyDials ¶
func HealthyDials(results []NodeResult) []proxyclient.Dial
HealthyDials returns only the working Dial functions from health check results.
Types ¶
type GeoLookup ¶
type GeoLookup struct {
// contains filtered or unexported fields
}
func Geo ¶
func Geo() *GeoLookup
Geo returns the shared GeoLookup instance, initialized on first call.
type HealthCheckConfig ¶
type NodeResult ¶
func HealthCheck ¶
func HealthCheck(sub *Subscription, cfg *HealthCheckConfig, filter func(ProxyNode) bool) []NodeResult
HealthCheck tests all dialable nodes concurrently and returns results sorted by latency.
type Options ¶
type Options struct {
Strategy Strategy
Filter func(node ProxyNode) bool
HealthCheck *HealthCheckConfig // used by url-test strategy, or set to enable pre-filtering
// UserAgent for fetching subscription. Default: "clash".
UserAgent string
}
type ProxyGroup ¶
type ProxyNode ¶
type ProxyNode struct {
Name string
Type string // ss, socks5, trojan, vmess, vless, hysteria2, http
Server string
Port int
URL *url.URL
RawConf map[string]any
Supported bool
}
func DialableNodes ¶
func DialableNodes(sub *Subscription) []ProxyNode
DialableNodes returns nodes whose URL scheme is registered in proxyclient.
func NodesByType ¶
func NodesByType(sub *Subscription, proxyType string) []ProxyNode
func SupportedNodes ¶
func SupportedNodes(sub *Subscription) []ProxyNode
type Strategy ¶
type Strategy string
const ( StrategyRoundRobin Strategy = "round-robin" StrategyRandom Strategy = "random" StrategyHash Strategy = "hash" StrategyFirst Strategy = "first" StrategyURLTest Strategy = "url-test" // health check, then use fastest nodes StrategyAdaptive Strategy = "adaptive" // auto-learn from success/failure/latency )
type Subscription ¶
type Subscription struct {
Nodes []ProxyNode
Groups []ProxyGroup
}
func FetchSubscription ¶
func FetchSubscription(subscribeURL string) (*Subscription, error)
func FetchSubscriptionWithUA ¶
func FetchSubscriptionWithUA(subscribeURL, userAgent string) (*Subscription, error)
FetchSubscriptionWithUA fetches a subscription with the given User-Agent.
func NewDialer ¶
func NewDialer(subscribeURL string, opts Options) (proxyclient.Dial, *Subscription, error)
NewDialer fetches a Clash subscription URL, parses it, creates proxyclient dialers for all dialable nodes, and returns a single load-balanced Dial.
func NewDialerFromSubscription ¶
func NewDialerFromSubscription(sub *Subscription, opts Options) (proxyclient.Dial, *Subscription, error)
NewDialerFromSubscription creates a load-balanced Dial from a pre-parsed subscription.
func ParseSubscription ¶
func ParseSubscription(data []byte) (*Subscription, error)