Skip to content

Commit 2dc9c23

Browse files
authored
Merge pull request #40 from blacknon/develop
debug.
2 parents ba7a4cf + a827828 commit 2dc9c23

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

proxy.go

+31-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,33 @@ import (
1717
"golang.org/x/net/proxy"
1818
)
1919

20+
type ContextDialer struct {
21+
dialer proxy.Dialer
22+
}
23+
24+
func (c *ContextDialer) DialContext(ctx context.Context, network, addr string) (net.Conn, error) {
25+
connChan := make(chan net.Conn, 1)
26+
errChan := make(chan error, 1)
27+
28+
go func() {
29+
conn, err := c.dialer.Dial(network, addr)
30+
if err != nil {
31+
errChan <- err
32+
return
33+
}
34+
connChan <- conn
35+
}()
36+
37+
select {
38+
case conn := <-connChan:
39+
return conn, nil
40+
case err := <-errChan:
41+
return nil, err
42+
case <-ctx.Done():
43+
return nil, ctx.Err()
44+
}
45+
}
46+
2047
type Proxy struct {
2148
// Type set proxy type.
2249
// Can specify `http`, `https`, `socks`, `socks5`, `command`.
@@ -49,7 +76,8 @@ type Proxy struct {
4976
}
5077

5178
// CreateProxyDialer retrun proxy.Dialer.
52-
func (p *Proxy) CreateProxyDialer() (proxyDialer proxy.Dialer, err error) {
79+
func (p *Proxy) CreateProxyDialer() (proxyContextDialer proxy.ContextDialer, err error) {
80+
var proxyDialer proxy.Dialer
5381
switch p.Type {
5482
case "http", "https":
5583
proxyDialer, err = p.CreateHttpProxyDialer()
@@ -59,6 +87,8 @@ func (p *Proxy) CreateProxyDialer() (proxyDialer proxy.Dialer, err error) {
5987
proxyDialer, err = p.CreateProxyCommandProxyDialer()
6088
}
6189

90+
proxyContextDialer = &ContextDialer{dialer: proxyDialer}
91+
6292
return
6393
}
6494

0 commit comments

Comments
 (0)