github.com/Cloud-Foundations/Dominator@v0.3.4/lib/net/proxy/common.go (about) 1 package proxy 2 3 import ( 4 "errors" 5 "net" 6 "net/url" 7 ) 8 9 var ( 10 errorUnsupportedProxy = errors.New("unsupported proxy") 11 ) 12 13 func newDialer(proxy string, dialer *net.Dialer) (Dialer, error) { 14 if dialer == nil { 15 dialer = new(net.Dialer) 16 } 17 if proxy == "" { 18 return dialer, nil 19 } 20 if parsedProxy, err := url.Parse(proxy); err != nil { 21 return nil, err 22 } else { 23 switch parsedProxy.Scheme { 24 case "socks": // Assume SOCKS 5 25 return &socksDialer{ 26 dialer: dialer, 27 proxyAddress: parsedProxy.Host, 28 proxyDNS: true, 29 udpSupported: true, 30 }, nil 31 case "socks4": 32 return &socksDialer{ 33 dialer: dialer, 34 proxyAddress: parsedProxy.Host, 35 }, nil 36 case "socks4a": 37 return &socksDialer{ 38 dialer: dialer, 39 proxyAddress: parsedProxy.Host, 40 proxyDNS: true, 41 }, nil 42 case "socks5": 43 return &socksDialer{ 44 dialer: dialer, 45 proxyAddress: parsedProxy.Host, 46 proxyDNS: true, 47 udpSupported: true, 48 }, nil 49 default: 50 return nil, errorUnsupportedProxy 51 } 52 } 53 }