Skip to content

Commit

Permalink
Merge pull request #3 from cuonglm/cuonglm/custom-dial
Browse files Browse the repository at this point in the history
pkg/resolvers: allow custom dialer from Lookup1
  • Loading branch information
alexelisenko committed Sep 7, 2022
2 parents 396f82b + 8ffe8c3 commit e1d6673
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion pkg/resolvers/doq.go
Expand Up @@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"io"
"net"
"os"
"time"

Expand Down Expand Up @@ -138,7 +139,20 @@ func (r *DOQResolver) Lookup1(question dns.Question) ([]dns.Msg, error) {
messages := prepareMessages(question, r.resolverOptions.Ndots, r.resolverOptions.SearchList)
resp := make([]dns.Msg, 0, len(messages))

session, err := quic.DialAddr(r.server, r.tls, nil)
network := "udp"
if isIPv6(r.server) || question.Qtype == dns.TypeAAAA {
network = "udp6"
}
udpAddr, err := net.ResolveUDPAddr(network, r.server)
if err != nil {
return nil, err
}
udpConn, err := net.ListenPacket(network, "")
if err != nil {
return nil, err
}

session, err := quic.Dial(udpConn, udpAddr, r.server, r.tls, nil)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -200,3 +214,12 @@ func (r *DOQResolver) Lookup1(question dns.Question) ([]dns.Msg, error) {
}
return resp, nil
}

func isIPv6(ip string) bool {
justIP, _, err := net.SplitHostPort(ip)
if err != nil {
justIP = ip
}
parsedIP := net.ParseIP(justIP)
return parsedIP != nil && parsedIP.To4() == nil && parsedIP.To16() != nil
}

0 comments on commit e1d6673

Please sign in to comment.