MCPcopy Create free account
hub / github.com/SenseUnit/dumbproxy / LookupNetIP

Method LookupNetIP

dialer/rescache.go:48–89  ·  view source on GitHub ↗
(ctx context.Context, network, host string)

Source from the content-addressed store, hash-verified

46}
47
48func (r *CachingResolver) LookupNetIP(ctx context.Context, network, host string) ([]netip.Addr, error) {
49 if addr, err := netip.ParseAddr(host); err == nil {
50 // literal IP address, just do unmapping
51 return r.next.LookupNetIP(ctx, network, addr.Unmap().String())
52 }
53
54 host = strings.ToLower(host)
55 key := resolverCacheKey{
56 network: network,
57 host: host,
58 }
59
60 res, ok := r.cache.GetValidOrDelete(key)
61 if !ok {
62 v, _, _ := r.sf.Do(key.network+":"+key.host, func() (any, error) {
63 ctx, cl := context.WithTimeout(context.Background(), r.timeout)
64 defer cl()
65 res, err := r.next.LookupNetIP(ctx, key.network, key.host)
66 for i := range res {
67 res[i] = res[i].Unmap()
68 }
69 setTTL := r.negTTL
70 if err == nil {
71 setTTL = r.posTTL
72 }
73 item := &resolverCacheValue{
74 expires: time.Now().Add(setTTL),
75 addrs: res,
76 err: err,
77 }
78 r.cache.Set(key, item)
79 return item, nil
80 })
81 res = v.(*resolverCacheValue)
82 }
83
84 if res.err != nil {
85 return nil, res.err
86 }
87
88 return res.addrs, nil
89}
90
91var _ Resolver = new(CachingResolver)

Callers

nothing calls this directly

Calls 3

LookupNetIPMethod · 0.65
StringMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected