MCPcopy
hub / github.com/AdguardTeam/dnsproxy / ServeDNS

Method ServeDNS

proxy/serverdnscrypt.go:119–138  ·  view source on GitHub ↗

ServeDNS implements the [dnscrypt.Handler] interface for *dnsCryptHandler.

(
	ctx context.Context,
	rw dnscrypt.ResponseWriter,
	req *dns.Msg,
)

Source from the content-addressed store, hash-verified

117
118// ServeDNS implements the [dnscrypt.Handler] interface for *dnsCryptHandler.
119func (h *dnsCryptHandler) ServeDNS(
120 ctx context.Context,
121 rw dnscrypt.ResponseWriter,
122 req *dns.Msg,
123) (err error) {
124 addr := netutil.NetAddrToAddrPort(rw.RemoteAddr())
125 d := h.proxy.newDNSContext(ProtoDNSCrypt, req, addr)
126 d.DNSCryptResponseWriter = rw
127
128 ctx, cancel := h.proxy.reqCtx.New(ctx)
129 defer cancel()
130
131 err = h.reqSema.Acquire(ctx)
132 if err != nil {
133 return fmt.Errorf("dnsproxy: dnscrypt: acquiring semaphore: %w", err)
134 }
135 defer h.reqSema.Release()
136
137 return h.proxy.handleDNSRequest(ctx, d)
138}
139
140// respondDNSCrypt writes a response to the client using the DNSCrypt response
141// writer. d must not be nil.

Callers

nothing calls this directly

Calls 2

newDNSContextMethod · 0.80
handleDNSRequestMethod · 0.80

Tested by

no test coverage detected