Browse Source

Use native dialer to communicate with fronting domain

tags/v2.2.0^2^2
9seconds 1 month ago
parent
commit
62cba24071

+ 5
- 0
internal/testlib/mtglib_network_mock.go View File

2
 
2
 
3
 import (
3
 import (
4
 	"context"
4
 	"context"
5
+	"net"
5
 	"net/http"
6
 	"net/http"
6
 
7
 
7
 	"github.com/9seconds/mtg/v2/essentials"
8
 	"github.com/9seconds/mtg/v2/essentials"
24
 	return args.Get(0).(essentials.Conn), args.Error(1) //nolint: wrapcheck, forcetypeassert
25
 	return args.Get(0).(essentials.Conn), args.Error(1) //nolint: wrapcheck, forcetypeassert
25
 }
26
 }
26
 
27
 
28
+func (m *MtglibNetworkMock) NativeDialer() *net.Dialer {
29
+	return m.Called().Get(0).(*net.Dialer)
30
+}
31
+
27
 func (m *MtglibNetworkMock) MakeHTTPClient(dialFunc func(ctx context.Context,
32
 func (m *MtglibNetworkMock) MakeHTTPClient(dialFunc func(ctx context.Context,
28
 	network, address string) (essentials.Conn, error),
33
 	network, address string) (essentials.Conn, error),
29
 ) *http.Client {
34
 ) *http.Client {

+ 4
- 1
mtglib/proxy.go View File

279
 	p.eventStream.Send(p.ctx, NewEventDomainFronting(ctx.streamID))
279
 	p.eventStream.Send(p.ctx, NewEventDomainFronting(ctx.streamID))
280
 	conn.Rewind()
280
 	conn.Rewind()
281
 
281
 
282
-	frontConn, err := p.network.DialContext(ctx, "tcp", p.DomainFrontingAddress())
282
+	nativeDialer := p.network.NativeDialer()
283
+	fConn, err := nativeDialer.DialContext(ctx, "tcp", p.DomainFrontingAddress())
283
 	if err != nil {
284
 	if err != nil {
284
 		p.logger.WarningError("cannot dial to the fronting domain", err)
285
 		p.logger.WarningError("cannot dial to the fronting domain", err)
285
 
286
 
286
 		return
287
 		return
287
 	}
288
 	}
288
 
289
 
290
+	frontConn := essentials.WrapNetConn(fConn)
291
+
289
 	if p.domainFrontingProxyProtocol {
292
 	if p.domainFrontingProxyProtocol {
290
 		frontConn = newConnProxyProtocol(ctx.clientConn, frontConn)
293
 		frontConn = newConnProxyProtocol(ctx.clientConn, frontConn)
291
 	}
294
 	}

+ 2
- 1
network/v2/base_network_test.go View File

4
 	"context"
4
 	"context"
5
 	"testing"
5
 	"testing"
6
 
6
 
7
+	"github.com/9seconds/mtg/v2/mtglib"
7
 	"github.com/9seconds/mtg/v2/network/v2"
8
 	"github.com/9seconds/mtg/v2/network/v2"
8
 	"github.com/stretchr/testify/assert"
9
 	"github.com/stretchr/testify/assert"
9
 	"github.com/stretchr/testify/suite"
10
 	"github.com/stretchr/testify/suite"
12
 type BaseNetworkTestSuite struct {
13
 type BaseNetworkTestSuite struct {
13
 	EchoServerTestSuite
14
 	EchoServerTestSuite
14
 
15
 
15
-	net network.Network
16
+	net mtglib.Network
16
 }
17
 }
17
 
18
 
18
 func (suite *BaseNetworkTestSuite) SetupSuite() {
19
 func (suite *BaseNetworkTestSuite) SetupSuite() {

+ 3
- 2
network/v2/socks_proxy_test.go View File

6
 	"sync"
6
 	"sync"
7
 	"testing"
7
 	"testing"
8
 
8
 
9
+	"github.com/9seconds/mtg/v2/mtglib"
9
 	"github.com/9seconds/mtg/v2/network/v2"
10
 	"github.com/9seconds/mtg/v2/network/v2"
10
 	"github.com/stretchr/testify/assert"
11
 	"github.com/stretchr/testify/assert"
11
 	"github.com/stretchr/testify/require"
12
 	"github.com/stretchr/testify/require"
17
 	EchoServerTestSuite
18
 	EchoServerTestSuite
18
 
19
 
19
 	wg          sync.WaitGroup
20
 	wg          sync.WaitGroup
20
-	baseNetwork network.Network
21
+	baseNetwork mtglib.Network
21
 
22
 
22
 	noAuthURL *url.URL
23
 	noAuthURL *url.URL
23
 	authURL   *url.URL
24
 	authURL   *url.URL
85
 
86
 
86
 	for name, proxies := range testData {
87
 	for name, proxies := range testData {
87
 		suite.T().Run(name, func(t *testing.T) {
88
 		suite.T().Run(name, func(t *testing.T) {
88
-			proxyNetworks := []network.Network{}
89
+			proxyNetworks := []mtglib.Network{}
89
 
90
 
90
 			for _, u := range proxies {
91
 			for _, u := range proxies {
91
 				value, err := network.NewProxyNetwork(suite.baseNetwork, u)
92
 				value, err := network.NewProxyNetwork(suite.baseNetwork, u)

Loading…
Cancel
Save