Home | History | Annotate | Download | only in nettrace
      1 // Copyright 2016 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 // Package nettrace contains internal hooks for tracing activity in
      6 // the net package. This package is purely internal for use by the
      7 // net/http/httptrace package and has no stable API exposed to end
      8 // users.
      9 package nettrace
     10 
     11 // TraceKey is a context.Context Value key. Its associated value should
     12 // be a *Trace struct.
     13 type TraceKey struct{}
     14 
     15 // LookupIPAltResolverKey is a context.Context Value key used by tests to
     16 // specify an alternate resolver func.
     17 // It is not exposed to outsider users. (But see issue 12503)
     18 // The value should be the same type as lookupIP:
     19 //     func lookupIP(ctx context.Context, host string) ([]IPAddr, error)
     20 type LookupIPAltResolverKey struct{}
     21 
     22 // Trace contains a set of hooks for tracing events within
     23 // the net package. Any specific hook may be nil.
     24 type Trace struct {
     25 	// DNSStart is called with the hostname of a DNS lookup
     26 	// before it begins.
     27 	DNSStart func(name string)
     28 
     29 	// DNSDone is called after a DNS lookup completes (or fails).
     30 	// The coalesced parameter is whether singleflight de-dupped
     31 	// the call. The addrs are of type net.IPAddr but can't
     32 	// actually be for circular dependency reasons.
     33 	DNSDone func(netIPs []interface{}, coalesced bool, err error)
     34 
     35 	// ConnectStart is called before a Dial, excluding Dials made
     36 	// during DNS lookups. In the case of DualStack (Happy Eyeballs)
     37 	// dialing, this may be called multiple times, from multiple
     38 	// goroutines.
     39 	ConnectStart func(network, addr string)
     40 
     41 	// ConnectStart is called after a Dial with the results, excluding
     42 	// Dials made during DNS lookups. It may also be called multiple
     43 	// times, like ConnectStart.
     44 	ConnectDone func(network, addr string, err error)
     45 }
     46