2026-09-30 01:16:59 +08:00
|
|
|
package xdns
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"net"
|
|
|
|
|
|
|
|
|
|
"github.com/xtls/xray-core/transport/internet/finalmask"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Resolver interface {
|
|
|
|
|
Addr() *net.UDPAddr
|
|
|
|
|
Read(p []byte) (int, error)
|
|
|
|
|
Send(p []byte)
|
|
|
|
|
Close()
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-05 16:07:19 +08:00
|
|
|
func NewResolver(config *ResolverProto, dialer *finalmask.Dialer) (Resolver, error) {
|
|
|
|
|
switch config.Type {
|
|
|
|
|
case "tcp":
|
|
|
|
|
return NewTCPResolver(config, dialer)
|
|
|
|
|
case "udp":
|
|
|
|
|
return NewUDPResolver(config, dialer)
|
2026-10-16 06:41:19 +08:00
|
|
|
case "https":
|
|
|
|
|
return NewDOHResolver(config, dialer)
|
2026-09-30 01:16:59 +08:00
|
|
|
default:
|
2026-10-05 16:07:19 +08:00
|
|
|
return nil, errors.New("unknown type")
|
2026-09-30 01:16:59 +08:00
|
|
|
}
|
|
|
|
|
}
|