wifi_linux.go 1013 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package settings
  2. import (
  3. "github.com/sagernet/sing-box/adapter"
  4. E "github.com/sagernet/sing/common/exceptions"
  5. )
  6. type LinuxWIFIMonitor struct {
  7. monitor WIFIMonitor
  8. }
  9. func NewWIFIMonitor(callback func(adapter.WIFIState)) (WIFIMonitor, error) {
  10. monitors := []func(func(adapter.WIFIState)) (WIFIMonitor, error){
  11. newNetworkManagerMonitor,
  12. newIWDMonitor,
  13. newWpaSupplicantMonitor,
  14. newConnManMonitor,
  15. }
  16. var errors []error
  17. for _, factory := range monitors {
  18. monitor, err := factory(callback)
  19. if err == nil {
  20. return &LinuxWIFIMonitor{monitor: monitor}, nil
  21. }
  22. errors = append(errors, err)
  23. }
  24. return nil, E.Cause(E.Errors(errors...), "no supported WIFI manager found")
  25. }
  26. func (m *LinuxWIFIMonitor) ReadWIFIState() adapter.WIFIState {
  27. return m.monitor.ReadWIFIState()
  28. }
  29. func (m *LinuxWIFIMonitor) Start() error {
  30. if m.monitor != nil {
  31. return m.monitor.Start()
  32. }
  33. return nil
  34. }
  35. func (m *LinuxWIFIMonitor) Close() error {
  36. if m.monitor != nil {
  37. return m.monitor.Close()
  38. }
  39. return nil
  40. }