lib/dialer: Register dialer for socks URL scheme (fixes #4515)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4579
This commit is contained in:
parent
8fd2937a58
commit
ece1defb2f
|
@ -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)
|
proxyDialer proxy.Dialer
|
||||||
usingProxy = proxyDialer != proxy.Direct
|
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")
|
||||||
|
|
Loading…
Reference in New Issue