platform.go 2.2 KB

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