Add network_[type/is_expensive/is_constrained] rule items
This commit is contained in:
29
route/rule/rule_item_network_is_expensive.go
Normal file
29
route/rule/rule_item_network_is_expensive.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package rule
|
||||
|
||||
import (
|
||||
"github.com/sagernet/sing-box/adapter"
|
||||
)
|
||||
|
||||
var _ RuleItem = (*NetworkIsExpensiveItem)(nil)
|
||||
|
||||
type NetworkIsExpensiveItem struct {
|
||||
networkManager adapter.NetworkManager
|
||||
}
|
||||
|
||||
func NewNetworkIsExpensiveItem(networkManager adapter.NetworkManager) *NetworkIsExpensiveItem {
|
||||
return &NetworkIsExpensiveItem{
|
||||
networkManager: networkManager,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *NetworkIsExpensiveItem) Match(metadata *adapter.InboundContext) bool {
|
||||
networkInterface := r.networkManager.DefaultNetworkInterface()
|
||||
if networkInterface == nil {
|
||||
return false
|
||||
}
|
||||
return networkInterface.Expensive
|
||||
}
|
||||
|
||||
func (r *NetworkIsExpensiveItem) String() string {
|
||||
return "network_is_expensive=true"
|
||||
}
|
||||
Reference in New Issue
Block a user