mirror of https://github.com/v2ray/v2ray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.3 KiB
59 lines
1.3 KiB
package dns |
|
|
|
import ( |
|
"v2ray.com/core/common/errors" |
|
"v2ray.com/core/common/net" |
|
"v2ray.com/core/common/serial" |
|
"v2ray.com/core/features" |
|
) |
|
|
|
// Client is a V2Ray feature for querying DNS information. |
|
// |
|
// v2ray:api:stable |
|
type Client interface { |
|
features.Feature |
|
|
|
// LookupIP returns IP address for the given domain. IPs may contain IPv4 and/or IPv6 addresses. |
|
LookupIP(domain string) ([]net.IP, error) |
|
} |
|
|
|
// IPv4Lookup is an optional feature for querying IPv4 addresses only. |
|
// |
|
// v2ray:api:beta |
|
type IPv4Lookup interface { |
|
LookupIPv4(domain string) ([]net.IP, error) |
|
} |
|
|
|
// IPv6Lookup is an optional feature for querying IPv6 addresses only. |
|
// |
|
// v2ray:api:beta |
|
type IPv6Lookup interface { |
|
LookupIPv6(domain string) ([]net.IP, error) |
|
} |
|
|
|
// ClientType returns the type of Client interface. Can be used for implementing common.HasType. |
|
// |
|
// v2ray:api:beta |
|
func ClientType() interface{} { |
|
return (*Client)(nil) |
|
} |
|
|
|
// ErrEmptyResponse indicates that DNS query succeeded but no answer was returned. |
|
var ErrEmptyResponse = errors.New("empty response") |
|
|
|
type RCodeError uint16 |
|
|
|
func (e RCodeError) Error() string { |
|
return serial.Concat("rcode: ", uint16(e)) |
|
} |
|
|
|
func RCodeFromError(err error) uint16 { |
|
if err == nil { |
|
return 0 |
|
} |
|
cause := errors.Cause(err) |
|
if r, ok := cause.(RCodeError); ok { |
|
return uint16(r) |
|
} |
|
return 0 |
|
}
|
|
|