rule_item_wifi_ssid.go 863 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package rule
  2. import (
  3. "strings"
  4. "github.com/sagernet/sing-box/adapter"
  5. F "github.com/sagernet/sing/common/format"
  6. )
  7. var _ RuleItem = (*WIFISSIDItem)(nil)
  8. type WIFISSIDItem struct {
  9. ssidList []string
  10. ssidMap map[string]bool
  11. networkManager adapter.NetworkManager
  12. }
  13. func NewWIFISSIDItem(networkManager adapter.NetworkManager, ssidList []string) *WIFISSIDItem {
  14. ssidMap := make(map[string]bool)
  15. for _, ssid := range ssidList {
  16. ssidMap[ssid] = true
  17. }
  18. return &WIFISSIDItem{
  19. ssidList,
  20. ssidMap,
  21. networkManager,
  22. }
  23. }
  24. func (r *WIFISSIDItem) Match(metadata *adapter.InboundContext) bool {
  25. return r.ssidMap[r.networkManager.WIFIState().SSID]
  26. }
  27. func (r *WIFISSIDItem) String() string {
  28. if len(r.ssidList) == 1 {
  29. return F.ToString("wifi_ssid=", r.ssidList[0])
  30. }
  31. return F.ToString("wifi_ssid=[", strings.Join(r.ssidList, " "), "]")
  32. }