transport_adapter.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package dns
  2. import (
  3. "net/netip"
  4. "github.com/sagernet/sing-box/adapter"
  5. C "github.com/sagernet/sing-box/constant"
  6. "github.com/sagernet/sing-box/option"
  7. )
  8. var _ adapter.LegacyDNSTransport = (*TransportAdapter)(nil)
  9. type TransportAdapter struct {
  10. transportType string
  11. transportTag string
  12. dependencies []string
  13. strategy C.DomainStrategy
  14. clientSubnet netip.Prefix
  15. }
  16. func NewTransportAdapter(transportType string, transportTag string, dependencies []string) TransportAdapter {
  17. return TransportAdapter{
  18. transportType: transportType,
  19. transportTag: transportTag,
  20. dependencies: dependencies,
  21. }
  22. }
  23. func NewTransportAdapterWithLocalOptions(transportType string, transportTag string, localOptions option.LocalDNSServerOptions) TransportAdapter {
  24. var dependencies []string
  25. if localOptions.DomainResolver != nil && localOptions.DomainResolver.Server != "" {
  26. dependencies = append(dependencies, localOptions.DomainResolver.Server)
  27. }
  28. return TransportAdapter{
  29. transportType: transportType,
  30. transportTag: transportTag,
  31. dependencies: dependencies,
  32. strategy: C.DomainStrategy(localOptions.LegacyStrategy),
  33. clientSubnet: localOptions.LegacyClientSubnet,
  34. }
  35. }
  36. func NewTransportAdapterWithRemoteOptions(transportType string, transportTag string, remoteOptions option.RemoteDNSServerOptions) TransportAdapter {
  37. var dependencies []string
  38. if remoteOptions.DomainResolver != nil && remoteOptions.DomainResolver.Server != "" {
  39. dependencies = append(dependencies, remoteOptions.DomainResolver.Server)
  40. }
  41. if remoteOptions.LegacyAddressResolver != "" {
  42. dependencies = append(dependencies, remoteOptions.LegacyAddressResolver)
  43. }
  44. return TransportAdapter{
  45. transportType: transportType,
  46. transportTag: transportTag,
  47. dependencies: dependencies,
  48. strategy: C.DomainStrategy(remoteOptions.LegacyStrategy),
  49. clientSubnet: remoteOptions.LegacyClientSubnet,
  50. }
  51. }
  52. func (a *TransportAdapter) Type() string {
  53. return a.transportType
  54. }
  55. func (a *TransportAdapter) Tag() string {
  56. return a.transportTag
  57. }
  58. func (a *TransportAdapter) Dependencies() []string {
  59. return a.dependencies
  60. }
  61. func (a *TransportAdapter) LegacyStrategy() C.DomainStrategy {
  62. return a.strategy
  63. }
  64. func (a *TransportAdapter) LegacyClientSubnet() netip.Prefix {
  65. return a.clientSubnet
  66. }