Documentation
¶
Index ¶
Constants ¶
const (
// DNSNameMaxBytes is the maximum number of bytes a DNS name may contain
DNSNameMaxBytes = 253
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DNSQuestion ¶
DNSQuestion represents a DNS question to be resolved by a DNS server
type DNSRR ¶
type DNSRR struct { Name string `json:"name,omitempty"` Type uint16 `json:"type,omitempty"` TTL uint32 `json:"TTL,omitempty"` Data string `json:"data,omitempty"` }
DNSRR represents a DNS record, part of a response to a DNSQuestion
func (DNSRR) RR ¶
RR transforms a DNSRR to a dns.RR. It does not support a full compliment of DNS records, although it will grow additional types as necessary. Currently it supports:
- A
- AAAA
- CNAME
- MX
Any unsupported type will be translated to an RFC3597 message.
Transforms from A, AAAA, and CNAME records are straightforward; the (DNSRR).Data fields are translated from strings to IP addresses (in the case of A, AAAA), or copied straight over (in the case of CNAME) to the dns.RR.
MX Records expect the Data field to be in the format of "10 whatever.com", where "10" is the unsigned integer priority, and "whatever.com" is the server expected to serve the request.
type DNSResponse ¶
type DNSResponse struct { Question []DNSQuestion Answer []DNSRR Authority []DNSRR Extra []DNSRR Truncated bool RecursionDesired bool RecursionAvailable bool AuthenticatedData bool CheckingDisabled bool ResponseCode int }
DNSResponse represents a complete DNS server response, to be served by the DNS server handler.
type GDNSProvider ¶
GDNSProvider is the Google DNS-over-HTTPS provider; it implements the Provider interface.
func (GDNSProvider) Query ¶
func (g GDNSProvider) Query(q DNSQuestion) (*DNSResponse, error)
Query sends a DNS question to Google, and returns the response
type GDNSQuestion ¶
type GDNSQuestion DNSQuestion
GDNSQuestion represents a question response item from Google's DNS service This is currently the same as DNSQuestion, our internal implementation, but since Google's API is in flux, we keep them separate
func (GDNSQuestion) DNSQuestion ¶
func (r GDNSQuestion) DNSQuestion() DNSQuestion
DNSQuestion transforms a GDNSQuestion to a DNSQuestion and returns it.
type GDNSQuestions ¶
type GDNSQuestions []GDNSQuestion
GDNSQuestions is a array of GDNSQuestion objects
func (GDNSQuestions) DNSQuestions ¶
func (rs GDNSQuestions) DNSQuestions() (rqs []DNSQuestion)
DNSQuestions transforms an array of GDNSQuestion objects to an array of DNSQuestion objects
type GDNSRR ¶
type GDNSRR DNSRR
GDNSRR represents a dns response record item from Google's DNS service. This is currently the same as DNSRR, our internal implementation, but since Google's API is in flux, we keep them separate
type GDNSResponse ¶
type GDNSResponse struct { Status int32 `json:"Status,omitempty"` TC bool `json:"TC,omitempty"` RD bool `json:"RD,omitempty"` RA bool `json:"RA,omitempty"` AD bool `json:"AD,omitempty"` CD bool `json:"CD,omitempty"` Question GDNSQuestions `json:"Question,omitempty"` Answer GDNSRRs `json:"Answer,omitempty"` Authority GDNSRRs `json:"Authority,omitempty"` Additional GDNSRRs `json:"Additional,omitempty"` EDNSClientSubnet string `json:"edns_client_subnet,omitempty"` Comment string `json:"Comment,omitempty"` }
GDNSResponse represents a response from the Google DNS-over-HTTPS servers
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler represents a DNS handler
func NewHandler ¶
func NewHandler(provider Provider, options *HandlerOptions) *Handler
NewHandler creates a new Handler
type HandlerOptions ¶
type HandlerOptions struct{}
HandlerOptions specifies options to be used when instantiating a handler
type Provider ¶
type Provider interface {
Query(DNSQuestion) (*DNSResponse, error)
}
Provider is an interface representing a servicer of DNS queries.