clash/rules/common/network_type.go
2023-11-03 21:58:21 +08:00

48 lines
833 B
Go

package common
import (
"fmt"
C "github.com/metacubex/mihomo/constant"
"strings"
)
type NetworkType struct {
*Base
network C.NetWork
adapter string
}
func NewNetworkType(network, adapter string) (*NetworkType, error) {
ntType := NetworkType{
Base: &Base{},
}
ntType.adapter = adapter
switch strings.ToUpper(network) {
case "TCP":
ntType.network = C.TCP
case "UDP":
ntType.network = C.UDP
default:
return nil, fmt.Errorf("unsupported network type, only TCP/UDP")
}
return &ntType, nil
}
func (n *NetworkType) RuleType() C.RuleType {
return C.Network
}
func (n *NetworkType) Match(metadata *C.Metadata) (bool, string) {
return n.network == metadata.NetWork, n.adapter
}
func (n *NetworkType) Adapter() string {
return n.adapter
}
func (n *NetworkType) Payload() string {
return n.network.String()
}