platform.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. IncludeAllNetworks() bool
  21. ReadWIFIState() *WIFIState
  22. ClearDNSCache()
  23. }
  24. type TunInterface interface {
  25. FileDescriptor() int32
  26. Close() error
  27. }
  28. type InterfaceUpdateListener interface {
  29. UpdateDefaultInterface(interfaceName string, interfaceIndex int32)
  30. }
  31. type NetworkInterface struct {
  32. Index int32
  33. MTU int32
  34. Name string
  35. Addresses StringIterator
  36. }
  37. type WIFIState struct {
  38. SSID string
  39. BSSID string
  40. }
  41. func NewWIFIState(wifiSSID string, wifiBSSID string) *WIFIState {
  42. return &WIFIState{wifiSSID, wifiBSSID}
  43. }
  44. type NetworkInterfaceIterator interface {
  45. Next() *NetworkInterface
  46. HasNext() bool
  47. }
  48. type OnDemandRule interface {
  49. Target() int32
  50. DNSSearchDomainMatch() StringIterator
  51. DNSServerAddressMatch() StringIterator
  52. InterfaceTypeMatch() int32
  53. SSIDMatch() StringIterator
  54. ProbeURL() string
  55. }
  56. type OnDemandRuleIterator interface {
  57. Next() OnDemandRule
  58. HasNext() bool
  59. }
  60. type onDemandRule struct {
  61. option.OnDemandRule
  62. }
  63. func (r *onDemandRule) Target() int32 {
  64. if r.OnDemandRule.Action == nil {
  65. return -1
  66. }
  67. return int32(*r.OnDemandRule.Action)
  68. }
  69. func (r *onDemandRule) DNSSearchDomainMatch() StringIterator {
  70. return newIterator(r.OnDemandRule.DNSSearchDomainMatch)
  71. }
  72. func (r *onDemandRule) DNSServerAddressMatch() StringIterator {
  73. return newIterator(r.OnDemandRule.DNSServerAddressMatch)
  74. }
  75. func (r *onDemandRule) InterfaceTypeMatch() int32 {
  76. if r.OnDemandRule.InterfaceTypeMatch == nil {
  77. return -1
  78. }
  79. return int32(*r.OnDemandRule.InterfaceTypeMatch)
  80. }
  81. func (r *onDemandRule) SSIDMatch() StringIterator {
  82. return newIterator(r.OnDemandRule.SSIDMatch)
  83. }
  84. func (r *onDemandRule) ProbeURL() string {
  85. return r.OnDemandRule.ProbeURL
  86. }