| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package dns
- import (
- "github.com/xtls/xray-core/common/errors"
- "github.com/xtls/xray-core/common/net"
- "github.com/xtls/xray-core/common/serial"
- "github.com/xtls/xray-core/features"
- )
- // IPOption is an object for IP query options.
- type IPOption struct {
- IPv4Enable bool
- IPv6Enable bool
- FakeEnable bool
- }
- // Client is a Xray feature for querying DNS information.
- //
- // xray: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, option IPOption) ([]net.IP, uint32, error)
- }
- // ClientType returns the type of Client interface. Can be used for implementing common.HasType.
- //
- // xray: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")
- const DefaultTTL = 300
- type RCodeError uint16
- func (e RCodeError) Error() string {
- return serial.Concat("rcode: ", uint16(e))
- }
- func (RCodeError) IP() net.IP {
- panic("Calling IP() on a RCodeError.")
- }
- func (RCodeError) Domain() string {
- panic("Calling Domain() on a RCodeError.")
- }
- func (RCodeError) Family() net.AddressFamily {
- panic("Calling Family() on a RCodeError.")
- }
- func (e RCodeError) String() string {
- return e.Error()
- }
- var _ net.Address = (*RCodeError)(nil)
- 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
- }
|