platform.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package libbox
  2. import (
  3. C "github.com/sagernet/sing-box/constant"
  4. "github.com/sagernet/sing-box/option"
  5. )
  6. type PlatformInterface interface {
  7. LocalDNSTransport() LocalDNSTransport
  8. UsePlatformAutoDetectInterfaceControl() bool
  9. AutoDetectInterfaceControl(fd int32) error
  10. OpenTun(options TunOptions) (int32, error)
  11. UseProcFS() bool
  12. FindConnectionOwner(ipProtocol int32, sourceAddress string, sourcePort int32, destinationAddress string, destinationPort int32) (*ConnectionOwner, error)
  13. StartDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
  14. CloseDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
  15. GetInterfaces() (NetworkInterfaceIterator, error)
  16. UnderNetworkExtension() bool
  17. IncludeAllNetworks() bool
  18. ReadWIFIState() *WIFIState
  19. SystemCertificates() StringIterator
  20. ClearDNSCache()
  21. SendNotification(notification *Notification) error
  22. }
  23. type ConnectionOwner struct {
  24. UserId int32
  25. UserName string
  26. ProcessPath string
  27. androidPackageNames []string
  28. }
  29. func (c *ConnectionOwner) SetAndroidPackageNames(names StringIterator) {
  30. c.androidPackageNames = iteratorToArray[string](names)
  31. }
  32. func (c *ConnectionOwner) AndroidPackageNames() StringIterator {
  33. return newIterator(c.androidPackageNames)
  34. }
  35. type InterfaceUpdateListener interface {
  36. UpdateDefaultInterface(interfaceName string, interfaceIndex int32, isExpensive bool, isConstrained bool)
  37. }
  38. const (
  39. InterfaceTypeWIFI = int32(C.InterfaceTypeWIFI)
  40. InterfaceTypeCellular = int32(C.InterfaceTypeCellular)
  41. InterfaceTypeEthernet = int32(C.InterfaceTypeEthernet)
  42. InterfaceTypeOther = int32(C.InterfaceTypeOther)
  43. )
  44. type NetworkInterface struct {
  45. Index int32
  46. MTU int32
  47. Name string
  48. Addresses StringIterator
  49. Flags int32
  50. Type int32
  51. DNSServer StringIterator
  52. Metered bool
  53. }
  54. type WIFIState struct {
  55. SSID string
  56. BSSID string
  57. }
  58. func NewWIFIState(wifiSSID string, wifiBSSID string) *WIFIState {
  59. return &WIFIState{wifiSSID, wifiBSSID}
  60. }
  61. type NetworkInterfaceIterator interface {
  62. Next() *NetworkInterface
  63. HasNext() bool
  64. }
  65. type Notification struct {
  66. Identifier string
  67. TypeName string
  68. TypeID int32
  69. Title string
  70. Subtitle string
  71. Body string
  72. OpenURL string
  73. }
  74. type OnDemandRule interface {
  75. Target() int32
  76. DNSSearchDomainMatch() StringIterator
  77. DNSServerAddressMatch() StringIterator
  78. InterfaceTypeMatch() int32
  79. SSIDMatch() StringIterator
  80. ProbeURL() string
  81. }
  82. type OnDemandRuleIterator interface {
  83. Next() OnDemandRule
  84. HasNext() bool
  85. }
  86. type onDemandRule struct {
  87. option.OnDemandRule
  88. }
  89. func (r *onDemandRule) Target() int32 {
  90. if r.OnDemandRule.Action == nil {
  91. return -1
  92. }
  93. return int32(*r.OnDemandRule.Action)
  94. }
  95. func (r *onDemandRule) DNSSearchDomainMatch() StringIterator {
  96. return newIterator(r.OnDemandRule.DNSSearchDomainMatch)
  97. }
  98. func (r *onDemandRule) DNSServerAddressMatch() StringIterator {
  99. return newIterator(r.OnDemandRule.DNSServerAddressMatch)
  100. }
  101. func (r *onDemandRule) InterfaceTypeMatch() int32 {
  102. if r.OnDemandRule.InterfaceTypeMatch == nil {
  103. return -1
  104. }
  105. return int32(*r.OnDemandRule.InterfaceTypeMatch)
  106. }
  107. func (r *onDemandRule) SSIDMatch() StringIterator {
  108. return newIterator(r.OnDemandRule.SSIDMatch)
  109. }
  110. func (r *onDemandRule) ProbeURL() string {
  111. return r.OnDemandRule.ProbeURL
  112. }