| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package dns
- import (
- "context"
- "net/url"
- E "github.com/sagernet/sing/common/exceptions"
- M "github.com/sagernet/sing/common/metadata"
- N "github.com/sagernet/sing/common/network"
- "github.com/sagernet/sing-box/adapter"
- "github.com/sagernet/sing-box/log"
- )
- func NewTransport(ctx context.Context, dialer N.Dialer, logger log.Logger, address string) (adapter.DNSTransport, error) {
- if address == "local" {
- return NewLocalTransport(), nil
- }
- serverURL, err := url.Parse(address)
- if err != nil {
- return nil, err
- }
- host := serverURL.Hostname()
- port := serverURL.Port()
- if port == "" {
- port = "53"
- }
- destination := M.ParseSocksaddrHostPortStr(host, port)
- switch serverURL.Scheme {
- case "", "udp":
- return NewUDPTransport(ctx, dialer, logger, destination), nil
- case "tcp":
- return NewTCPTransport(ctx, dialer, logger, destination), nil
- case "tls":
- return NewTLSTransport(ctx, dialer, logger, destination), nil
- case "https":
- return NewHTTPSTransport(dialer, serverURL.String()), nil
- default:
- return nil, E.New("unknown dns scheme: " + serverURL.Scheme)
- }
- }
|