mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
dns: add some comments
This commit is contained in:
parent
09b6d59394
commit
5467e4bbc1
@ -116,12 +116,13 @@ func (c *Client) exchange(qname string, reqBytes []byte, preferTCP bool) (server
|
|||||||
servers := c.GetServers(qname)
|
servers := c.GetServers(qname)
|
||||||
for _, server = range servers {
|
for _, server = range servers {
|
||||||
rc, err := dialer.Dial(network, server)
|
rc, err := dialer.Dial(network, server)
|
||||||
// TODO: check the timeout setting here, some dns client has 5 seconds timeout
|
// TODO: support timeout setting for different upstream server
|
||||||
rc.SetDeadline(time.Now().Add(time.Duration(3) * time.Second))
|
rc.SetDeadline(time.Now().Add(time.Duration(3) * time.Second))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.F("[dns] failed to connect to server %v: %v", server, err)
|
log.F("[dns] failed to connect to server %v: %v", server, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
defer rc.Close()
|
||||||
|
|
||||||
switch network {
|
switch network {
|
||||||
case "tcp":
|
case "tcp":
|
||||||
@ -141,8 +142,6 @@ func (c *Client) exchange(qname string, reqBytes []byte, preferTCP bool) (server
|
|||||||
|
|
||||||
// exchangeTCP exchange with server over tcp
|
// exchangeTCP exchange with server over tcp
|
||||||
func (c *Client) exchangeTCP(rc net.Conn, reqBytes []byte) ([]byte, error) {
|
func (c *Client) exchangeTCP(rc net.Conn, reqBytes []byte) ([]byte, error) {
|
||||||
defer rc.Close()
|
|
||||||
|
|
||||||
if _, err := rc.Write(reqBytes); err != nil {
|
if _, err := rc.Write(reqBytes); err != nil {
|
||||||
log.F("[dns] failed to write req message: %v", err)
|
log.F("[dns] failed to write req message: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -168,8 +167,6 @@ func (c *Client) exchangeTCP(rc net.Conn, reqBytes []byte) ([]byte, error) {
|
|||||||
|
|
||||||
// exchangeUDP exchange with server over udp
|
// exchangeUDP exchange with server over udp
|
||||||
func (c *Client) exchangeUDP(rc net.Conn, reqBytes []byte) ([]byte, error) {
|
func (c *Client) exchangeUDP(rc net.Conn, reqBytes []byte) ([]byte, error) {
|
||||||
defer rc.Close()
|
|
||||||
|
|
||||||
if _, err := rc.Write(reqBytes[2:]); err != nil {
|
if _, err := rc.Write(reqBytes[2:]); err != nil {
|
||||||
log.F("[dns] failed to write req message: %v", err)
|
log.F("[dns] failed to write req message: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -185,12 +182,12 @@ func (c *Client) exchangeUDP(rc net.Conn, reqBytes []byte) ([]byte, error) {
|
|||||||
return reqBytes[:2+n], nil
|
return reqBytes[:2+n], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetServer .
|
// SetServer sets a upstream dns server for the given domain
|
||||||
func (c *Client) SetServer(domain string, servers ...string) {
|
func (c *Client) SetServer(domain string, servers ...string) {
|
||||||
c.upServerMap[domain] = append(c.upServerMap[domain], servers...)
|
c.upServerMap[domain] = append(c.upServerMap[domain], servers...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetServers .
|
// GetServers gets upstream dns servers for the given domain
|
||||||
func (c *Client) GetServers(domain string) []string {
|
func (c *Client) GetServers(domain string) []string {
|
||||||
domainParts := strings.Split(domain, ".")
|
domainParts := strings.Split(domain, ".")
|
||||||
length := len(domainParts)
|
length := len(domainParts)
|
||||||
@ -202,11 +199,10 @@ func (c *Client) GetServers(domain string) []string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO:
|
|
||||||
return c.upServers
|
return c.upServers
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddHandler .
|
// AddHandler adds a custom handler to handle the resolved result (A and AAAA)
|
||||||
func (c *Client) AddHandler(h HandleFunc) {
|
func (c *Client) AddHandler(h HandleFunc) {
|
||||||
c.handlers = append(c.handlers, h)
|
c.handlers = append(c.handlers, h)
|
||||||
}
|
}
|
||||||
@ -232,7 +228,7 @@ func (c *Client) AddRecord(record string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenResponse .
|
// GenResponse generates a dns response message for the given domani an ip address
|
||||||
func (c *Client) GenResponse(domain string, ip string) (*Message, error) {
|
func (c *Client) GenResponse(domain string, ip string) (*Message, error) {
|
||||||
ipb := net.ParseIP(ip)
|
ipb := net.ParseIP(ip)
|
||||||
if ipb == nil {
|
if ipb == nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user