router.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package adapter
  2. import (
  3. "context"
  4. "net/http"
  5. "net/netip"
  6. "github.com/sagernet/sing-box/common/geoip"
  7. "github.com/sagernet/sing-dns"
  8. "github.com/sagernet/sing-tun"
  9. "github.com/sagernet/sing/common/control"
  10. N "github.com/sagernet/sing/common/network"
  11. "github.com/sagernet/sing/service"
  12. mdns "github.com/miekg/dns"
  13. )
  14. type Router interface {
  15. Service
  16. PreStarter
  17. PostStarter
  18. Outbounds() []Outbound
  19. Outbound(tag string) (Outbound, bool)
  20. DefaultOutbound(network string) (Outbound, error)
  21. FakeIPStore() FakeIPStore
  22. ConnectionRouter
  23. GeoIPReader() *geoip.Reader
  24. LoadGeosite(code string) (Rule, error)
  25. RuleSet(tag string) (RuleSet, bool)
  26. Exchange(ctx context.Context, message *mdns.Msg) (*mdns.Msg, error)
  27. Lookup(ctx context.Context, domain string, strategy dns.DomainStrategy) ([]netip.Addr, error)
  28. LookupDefault(ctx context.Context, domain string) ([]netip.Addr, error)
  29. ClearDNSCache()
  30. InterfaceFinder() control.InterfaceFinder
  31. UpdateInterfaces() error
  32. DefaultInterface() string
  33. AutoDetectInterface() bool
  34. AutoDetectInterfaceFunc() control.Func
  35. DefaultMark() int
  36. NetworkMonitor() tun.NetworkUpdateMonitor
  37. InterfaceMonitor() tun.DefaultInterfaceMonitor
  38. PackageManager() tun.PackageManager
  39. WIFIState() WIFIState
  40. Rules() []Rule
  41. ClashServer() ClashServer
  42. SetClashServer(server ClashServer)
  43. V2RayServer() V2RayServer
  44. SetV2RayServer(server V2RayServer)
  45. ResetNetwork() error
  46. }
  47. func ContextWithRouter(ctx context.Context, router Router) context.Context {
  48. return service.ContextWith(ctx, router)
  49. }
  50. func RouterFromContext(ctx context.Context) Router {
  51. return service.FromContext[Router](ctx)
  52. }
  53. type HeadlessRule interface {
  54. Match(metadata *InboundContext) bool
  55. }
  56. type Rule interface {
  57. HeadlessRule
  58. Service
  59. Type() string
  60. UpdateGeosite() error
  61. Outbound() string
  62. String() string
  63. }
  64. type DNSRule interface {
  65. Rule
  66. DisableCache() bool
  67. RewriteTTL() *uint32
  68. }
  69. type RuleSet interface {
  70. StartContext(ctx context.Context, startContext RuleSetStartContext) error
  71. PostStart() error
  72. Metadata() RuleSetMetadata
  73. Close() error
  74. HeadlessRule
  75. }
  76. type RuleSetMetadata struct {
  77. ContainsProcessRule bool
  78. ContainsWIFIRule bool
  79. }
  80. type RuleSetStartContext interface {
  81. HTTPClient(detour string, dialer N.Dialer) *http.Client
  82. Close()
  83. }
  84. type InterfaceUpdateListener interface {
  85. InterfaceUpdated()
  86. }
  87. type WIFIState struct {
  88. SSID string
  89. BSSID string
  90. }