|
|
|
@ -322,16 +322,18 @@ func (f *forwarder) sendDoH(ctx context.Context, urlBase string, c *http.Client,
|
|
|
|
|
// iOS and we want the number of pending DNS lookups to be bursty
|
|
|
|
|
// without too much associated goroutine/memory cost.
|
|
|
|
|
func (f *forwarder) send(ctx context.Context, txidOut txid, closeOnCtxDone *closePool, packet []byte, dst netaddr.IPPort) ([]byte, error) {
|
|
|
|
|
ip := dst.IP()
|
|
|
|
|
|
|
|
|
|
// Upgrade known DNS IPs to DoH (DNS-over-HTTPs).
|
|
|
|
|
if urlBase, dc, ok := f.getDoHClient(dst.IP()); ok {
|
|
|
|
|
if urlBase, dc, ok := f.getDoHClient(ip); ok {
|
|
|
|
|
res, err := f.sendDoH(ctx, urlBase, dc, packet)
|
|
|
|
|
if err == nil || ctx.Err() != nil {
|
|
|
|
|
return res, err
|
|
|
|
|
}
|
|
|
|
|
f.logf("DoH error from %v: %v", dst.IP, err)
|
|
|
|
|
f.logf("DoH error from %v: %v", ip, err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ln, err := f.packetListener(dst.IP())
|
|
|
|
|
ln, err := f.packetListener(ip)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|