sing-box/route/rule_protocol.go

38 lines
800 B
Go
Raw Normal View History

2022-07-02 22:55:10 +08:00
package route
import (
"strings"
2022-07-06 15:01:09 +08:00
"github.com/sagernet/sing-box/adapter"
2022-07-08 23:03:57 +08:00
F "github.com/sagernet/sing/common/format"
2022-07-02 22:55:10 +08:00
)
var _ RuleItem = (*ProtocolItem)(nil)
type ProtocolItem struct {
protocols []string
protocolMap map[string]bool
}
func NewProtocolItem(protocols []string) *ProtocolItem {
protocolMap := make(map[string]bool)
for _, protocol := range protocols {
protocolMap[protocol] = true
}
return &ProtocolItem{
protocols: protocols,
protocolMap: protocolMap,
}
}
func (r *ProtocolItem) Match(metadata *adapter.InboundContext) bool {
return r.protocolMap[metadata.Protocol]
}
func (r *ProtocolItem) String() string {
if len(r.protocols) == 1 {
return F.ToString("protocol=", r.protocols[0])
}
return F.ToString("protocol=[", strings.Join(r.protocols, " "), "]")
}