mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-03-03 04:09:53 +00:00
feat: add PROCESS-NAME-REGEX and PROCESS-PATH-REGEX
This commit is contained in:
@@ -4,6 +4,8 @@ import (
|
||||
"strings"
|
||||
|
||||
C "github.com/metacubex/mihomo/constant"
|
||||
|
||||
"github.com/dlclark/regexp2"
|
||||
)
|
||||
|
||||
type Process struct {
|
||||
@@ -11,21 +13,36 @@ type Process struct {
|
||||
adapter string
|
||||
process string
|
||||
nameOnly bool
|
||||
regexp *regexp2.Regexp
|
||||
}
|
||||
|
||||
func (ps *Process) RuleType() C.RuleType {
|
||||
if ps.nameOnly {
|
||||
return C.Process
|
||||
if ps.regexp != nil {
|
||||
return C.ProcessNameRegex
|
||||
}
|
||||
return C.ProcessName
|
||||
}
|
||||
|
||||
if ps.regexp != nil {
|
||||
return C.ProcessPathRegex
|
||||
}
|
||||
return C.ProcessPath
|
||||
}
|
||||
|
||||
func (ps *Process) Match(metadata *C.Metadata) (bool, string) {
|
||||
if ps.nameOnly {
|
||||
if ps.regexp != nil {
|
||||
match, _ := ps.regexp.MatchString(metadata.Process)
|
||||
return match, ps.adapter
|
||||
}
|
||||
return strings.EqualFold(metadata.Process, ps.process), ps.adapter
|
||||
}
|
||||
|
||||
if ps.regexp != nil {
|
||||
match, _ := ps.regexp.MatchString(metadata.ProcessPath)
|
||||
return match, ps.adapter
|
||||
}
|
||||
return strings.EqualFold(metadata.ProcessPath, ps.process), ps.adapter
|
||||
}
|
||||
|
||||
@@ -41,11 +58,20 @@ func (ps *Process) ShouldFindProcess() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func NewProcess(process string, adapter string, nameOnly bool) (*Process, error) {
|
||||
func NewProcess(process string, adapter string, nameOnly bool, regex bool) (*Process, error) {
|
||||
var r *regexp2.Regexp
|
||||
var err error
|
||||
if regex {
|
||||
r, err = regexp2.Compile(process, regexp2.IgnoreCase)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return &Process{
|
||||
Base: &Base{},
|
||||
adapter: adapter,
|
||||
process: process,
|
||||
nameOnly: nameOnly,
|
||||
regexp: r,
|
||||
}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user