|
@@ -21,8 +21,8 @@ import (
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
l = logger.DefaultLogger.NewFacility("dialer", "Dialing connections")
|
|
l = logger.DefaultLogger.NewFacility("dialer", "Dialing connections")
|
|
|
- proxyDialer = getDialer(proxy.Direct)
|
|
|
|
|
- usingProxy = proxyDialer != proxy.Direct
|
|
|
|
|
|
|
+ proxyDialer proxy.Dialer
|
|
|
|
|
+ usingProxy bool
|
|
|
noFallback = os.Getenv("ALL_PROXY_NO_FALLBACK") != ""
|
|
noFallback = os.Getenv("ALL_PROXY_NO_FALLBACK") != ""
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -30,6 +30,11 @@ type dialFunc func(network, addr string) (net.Conn, error)
|
|
|
|
|
|
|
|
func init() {
|
|
func init() {
|
|
|
l.SetDebug("dialer", strings.Contains(os.Getenv("STTRACE"), "dialer") || os.Getenv("STTRACE") == "all")
|
|
l.SetDebug("dialer", strings.Contains(os.Getenv("STTRACE"), "dialer") || os.Getenv("STTRACE") == "all")
|
|
|
|
|
+
|
|
|
|
|
+ proxy.RegisterDialerType("socks", socksDialerFunction)
|
|
|
|
|
+ proxyDialer = getDialer(proxy.Direct)
|
|
|
|
|
+ usingProxy = proxyDialer != proxy.Direct
|
|
|
|
|
+
|
|
|
if usingProxy {
|
|
if usingProxy {
|
|
|
http.DefaultTransport = &http.Transport{
|
|
http.DefaultTransport = &http.Transport{
|
|
|
Dial: Dial,
|
|
Dial: Dial,
|
|
@@ -78,6 +83,20 @@ func dialWithFallback(proxyDialFunc dialFunc, fallbackDialFunc dialFunc, network
|
|
|
return conn, err
|
|
return conn, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// This is a rip off of proxy.FromURL for "socks" URL scheme
|
|
|
|
|
+func socksDialerFunction(u *url.URL, forward proxy.Dialer) (proxy.Dialer, error) {
|
|
|
|
|
+ var auth *proxy.Auth
|
|
|
|
|
+ if u.User != nil {
|
|
|
|
|
+ auth = new(proxy.Auth)
|
|
|
|
|
+ auth.User = u.User.Username()
|
|
|
|
|
+ if p, ok := u.User.Password(); ok {
|
|
|
|
|
+ auth.Password = p
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return proxy.SOCKS5("tcp", u.Host, auth, forward)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// This is a rip off of proxy.FromEnvironment with a custom forward dialer
|
|
// This is a rip off of proxy.FromEnvironment with a custom forward dialer
|
|
|
func getDialer(forward proxy.Dialer) proxy.Dialer {
|
|
func getDialer(forward proxy.Dialer) proxy.Dialer {
|
|
|
allProxy := os.Getenv("all_proxy")
|
|
allProxy := os.Getenv("all_proxy")
|