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

Method specifyUpstream

proxy/upstreams.go:258–291  ·  view source on GitHub ↗

specifyUpstream specifies the upstream for domains.

(domains []string, u string, idx int)

Source from the content-addressed store, hash-verified

256
257// specifyUpstream specifies the upstream for domains.
258func (p *configParser) specifyUpstream(domains []string, u string, idx int) (err error) {
259 dnsUpstream, ok := p.upstreamsIndex[u]
260 // TODO(e.burkov): Improve identifying duplicate upstreams.
261 if !ok {
262 // create an upstream
263 dnsUpstream, err = upstream.AddressToUpstream(u, p.options.Clone())
264 if err != nil {
265 return fmt.Errorf("cannot prepare the upstream: %s", err)
266 }
267
268 // save to the index
269 p.upstreamsIndex[u] = dnsUpstream
270 }
271
272 addr := dnsUpstream.Address()
273 if len(domains) == 0 {
274 // TODO(s.chzhen): Handle duplicates.
275 p.upstreams = append(p.upstreams, dnsUpstream)
276
277 // TODO(s.chzhen): Logs without index.
278 p.logger.Debug("set upstream", "idx", idx, "addr", addr)
279 } else {
280 p.includeToReserved(dnsUpstream, domains)
281
282 p.logger.Debug(
283 "upstream is reserved",
284 "idx", idx,
285 "addr", addr,
286 "domains_num", len(domains),
287 )
288 }
289
290 return nil
291}
292
293// excludeFromReserved excludes more specific domains from reserved upstreams
294// querying.

Callers 1

parseLineMethod · 0.95

Calls 4

includeToReservedMethod · 0.95
AddressToUpstreamFunction · 0.92
CloneMethod · 0.80
AddressMethod · 0.65

Tested by

no test coverage detected