platform.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package libbox
  2. import (
  3. "github.com/sagernet/sing-box/option"
  4. )
  5. type PlatformInterface interface {
  6. UsePlatformAutoDetectInterfaceControl() bool
  7. AutoDetectInterfaceControl(fd int32) error
  8. OpenTun(options TunOptions) (int32, error)
  9. WriteLog(message string)
  10. UseProcFS() bool
  11. FindConnectionOwner(ipProtocol int32, sourceAddress string, sourcePort int32, destinationAddress string, destinationPort int32) (int32, error)
  12. PackageNameByUid(uid int32) (string, error)
  13. UIDByPackageName(packageName string) (int32, error)
  14. UsePlatformDefaultInterfaceMonitor() bool
  15. StartDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
  16. CloseDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
  17. UsePlatformInterfaceGetter() bool
  18. GetInterfaces() (NetworkInterfaceIterator, error)
  19. UnderNetworkExtension() bool
  20. ReadWIFIState() *WIFIState
  21. ClearDNSCache()
  22. }
  23. type TunInterface interface {
  24. FileDescriptor() int32
  25. Close() error
  26. }
  27. type InterfaceUpdateListener interface {
  28. UpdateDefaultInterface(interfaceName string, interfaceIndex int32)
  29. }
  30. type NetworkInterface struct {
  31. Index int32
  32. MTU int32
  33. Name string
  34. Addresses StringIterator
  35. }
  36. type WIFIState struct {
  37. SSID string
  38. BSSID string
  39. }
  40. func NewWIFIState(wifiSSID string, wifiBSSID string) *WIFIState {
  41. return &WIFIState{wifiSSID, wifiBSSID}
  42. }
  43. type NetworkInterfaceIterator interface {
  44. Next() *NetworkInterface
  45. HasNext() bool
  46. }
  47. type OnDemandRule interface {
  48. Target() int32
  49. DNSSearchDomainMatch() StringIterator
  50. DNSServerAddressMatch() StringIterator
  51. InterfaceTypeMatch() int32
  52. SSIDMatch() StringIterator
  53. ProbeURL() string
  54. }
  55. type OnDemandRuleIterator interface {
  56. Next() OnDemandRule
  57. HasNext() bool
  58. }
  59. type onDemandRule struct {
  60. option.OnDemandRule
  61. }
  62. func (r *onDemandRule) Target() int32 {
  63. if r.OnDemandRule.Action == nil {
  64. return -1
  65. }
  66. return int32(*r.OnDemandRule.Action)
  67. }
  68. func (r *onDemandRule) DNSSearchDomainMatch() StringIterator {
  69. return newIterator(r.OnDemandRule.DNSSearchDomainMatch)
  70. }
  71. func (r *onDemandRule) DNSServerAddressMatch() StringIterator {
  72. return newIterator(r.OnDemandRule.DNSServerAddressMatch)
  73. }
  74. func (r *onDemandRule) InterfaceTypeMatch() int32 {
  75. if r.OnDemandRule.InterfaceTypeMatch == nil {
  76. return -1
  77. }
  78. return int32(*r.OnDemandRule.InterfaceTypeMatch)
  79. }
  80. func (r *onDemandRule) SSIDMatch() StringIterator {
  81. return newIterator(r.OnDemandRule.SSIDMatch)
  82. }
  83. func (r *onDemandRule) ProbeURL() string {
  84. return r.OnDemandRule.ProbeURL
  85. }