transport_adapter.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. return TransportAdapter{
  25. transportType: transportType,
  26. transportTag: transportTag,
  27. strategy: C.DomainStrategy(localOptions.LegacyStrategy),
  28. clientSubnet: localOptions.LegacyClientSubnet,
  29. }
  30. }
  31. func NewTransportAdapterWithRemoteOptions(transportType string, transportTag string, remoteOptions option.RemoteDNSServerOptions) TransportAdapter {
  32. var dependencies []string
  33. if remoteOptions.AddressResolver != "" {
  34. dependencies = []string{remoteOptions.AddressResolver}
  35. }
  36. return TransportAdapter{
  37. transportType: transportType,
  38. transportTag: transportTag,
  39. dependencies: dependencies,
  40. strategy: C.DomainStrategy(remoteOptions.LegacyStrategy),
  41. clientSubnet: remoteOptions.LegacyClientSubnet,
  42. }
  43. }
  44. func (a *TransportAdapter) Type() string {
  45. return a.transportType
  46. }
  47. func (a *TransportAdapter) Tag() string {
  48. return a.transportTag
  49. }
  50. func (a *TransportAdapter) Dependencies() []string {
  51. return a.dependencies
  52. }
  53. func (a *TransportAdapter) LegacyStrategy() C.DomainStrategy {
  54. return a.strategy
  55. }
  56. func (a *TransportAdapter) LegacyClientSubnet() netip.Prefix {
  57. return a.clientSubnet
  58. }