diff --git a/mtglib/internal/doppel/init.go b/mtglib/internal/doppel/init.go index 9baa193..15bcfd8 100644 --- a/mtglib/internal/doppel/init.go +++ b/mtglib/internal/doppel/init.go @@ -2,6 +2,7 @@ package doppel import ( "context" + "net" "net/http" "time" @@ -28,11 +29,15 @@ type Network interface { // Dial establishes context-free TCP connections. Dial(network, address string) (essentials.Conn, error) - // DialContext dials using a context. This is a preferrable way of + // DialContext dials using a context. This is a preferable way of // establishing TCP connections. DialContext(ctx context.Context, network, address string) (essentials.Conn, error) // MakeHTTPClient build an HTTP client with given dial function. If nothing is // provided, then DialContext of this interface is going to be used. MakeHTTPClient(func(ctx context.Context, network, address string) (essentials.Conn, error)) *http.Client + + // NativeDialer returns a configured instance of native dialer that + // skips proxy connections or any other irrelevant settings. + NativeDialer() *net.Dialer } diff --git a/mtglib/internal/doppel/init_test.go b/mtglib/internal/doppel/init_test.go index 8723959..7f8fc98 100644 --- a/mtglib/internal/doppel/init_test.go +++ b/mtglib/internal/doppel/init_test.go @@ -30,6 +30,10 @@ func (s SimpleNetwork) DialContext(ctx context.Context, network, address string) return conn.(*net.TCPConn), nil } +func (s SimpleNetwork) NativeDialer() *net.Dialer { + return &net.Dialer{} +} + func (s SimpleNetwork) MakeHTTPClient(dialFunc func(ctx context.Context, network, address string) (essentials.Conn, error)) *http.Client { if dialFunc == nil { dialFunc = s.DialContext diff --git a/mtglib/internal/doppel/scout.go b/mtglib/internal/doppel/scout.go index 88a478b..e6650c8 100644 --- a/mtglib/internal/doppel/scout.go +++ b/mtglib/internal/doppel/scout.go @@ -79,18 +79,19 @@ func (s Scout) learn(ctx context.Context, url string) ([]time.Duration, error) { } func (s Scout) makeClient() (*http.Client, *ScoutConnCollected) { + dialer := s.network.NativeDialer() collected := NewScoutConnCollected() client := s.network.MakeHTTPClient(func( ctx context.Context, network string, address string, ) (essentials.Conn, error) { - conn, err := s.network.DialContext(ctx, network, address) + conn, err := dialer.DialContext(ctx, network, address) if err != nil { return nil, err } - return NewScoutConn(conn, collected), nil + return NewScoutConn(essentials.WrapNetConn(conn), collected), nil }) return client, collected