router.go 1.8 KB

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