12345678910111213141516171819202122232425262728293031323334353637 |
- package rule
- import (
- "strings"
- "github.com/sagernet/sing-box/adapter"
- F "github.com/sagernet/sing/common/format"
- )
- var _ RuleItem = (*ClientItem)(nil)
- type ClientItem struct {
- clients []string
- clientMap map[string]bool
- }
- func NewClientItem(clients []string) *ClientItem {
- clientMap := make(map[string]bool)
- for _, client := range clients {
- clientMap[client] = true
- }
- return &ClientItem{
- clients: clients,
- clientMap: clientMap,
- }
- }
- func (r *ClientItem) Match(metadata *adapter.InboundContext) bool {
- return r.clientMap[metadata.Client]
- }
- func (r *ClientItem) String() string {
- if len(r.clients) == 1 {
- return F.ToString("client=", r.clients[0])
- }
- return F.ToString("client=[", strings.Join(r.clients, " "), "]")
- }
|