|
|
@@ -2,6 +2,7 @@ package network
|
|
2
|
2
|
|
|
3
|
3
|
import (
|
|
4
|
4
|
"context"
|
|
|
5
|
+ "fmt"
|
|
5
|
6
|
"math/rand"
|
|
6
|
7
|
"net"
|
|
7
|
8
|
"net/url"
|
|
|
@@ -31,19 +32,12 @@ func (l loadBalancedDialer) DialContext(ctx context.Context, network, address st
|
|
31
|
32
|
}
|
|
32
|
33
|
|
|
33
|
34
|
func NewLoadBalancedDialer(baseDialer Dialer, proxyURLs []*url.URL) (Dialer, error) {
|
|
34
|
|
- switch len(proxyURLs) {
|
|
35
|
|
- case 0:
|
|
36
|
|
- return baseDialer, nil
|
|
37
|
|
- case 1:
|
|
38
|
|
- return NewSocks5Dialer(baseDialer, proxyURLs[0])
|
|
39
|
|
- }
|
|
40
|
|
-
|
|
41
|
|
- dialers := []Dialer{}
|
|
|
35
|
+ var dialers []Dialer
|
|
42
|
36
|
|
|
43
|
37
|
for _, u := range proxyURLs {
|
|
44
|
38
|
dialer, err := NewSocks5Dialer(newProxyDialer(baseDialer, u), u)
|
|
45
|
39
|
if err != nil {
|
|
46
|
|
- return nil, err
|
|
|
40
|
+ return nil, fmt.Errorf("cannot build dialer for %s: %w", u.String(), err)
|
|
47
|
41
|
}
|
|
48
|
42
|
|
|
49
|
43
|
dialers = append(dialers, dialer)
|