From 2db1b113e0b5d3bbce8b6592cb692602c56efd10 Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Wed, 29 Apr 2020 13:45:50 +0200 Subject: [PATCH] fix: correct timeouts according to spec --- pkg/pmapi/clientmanager.go | 4 ++++ pkg/pmapi/dialer.go | 2 +- pkg/pmapi/proxy.go | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/pmapi/clientmanager.go b/pkg/pmapi/clientmanager.go index 708c7756..853f3702 100644 --- a/pkg/pmapi/clientmanager.go +++ b/pkg/pmapi/clientmanager.go @@ -245,6 +245,10 @@ func (cm *ClientManager) switchToReachableServer() (proxy string, err error) { if cm.host == rootURL { go func() { <-time.After(cm.proxyUseDuration) + + cm.hostLocker.Lock() + defer cm.hostLocker.Unlock() + cm.host = rootURL }() } diff --git a/pkg/pmapi/dialer.go b/pkg/pmapi/dialer.go index c3b725e1..421842ac 100644 --- a/pkg/pmapi/dialer.go +++ b/pkg/pmapi/dialer.go @@ -42,7 +42,7 @@ func NewBasicTLSDialer() *BasicTLSDialer { // DialTLS returns a connection to the given address using the given network. func (b *BasicTLSDialer) DialTLS(network, address string) (conn net.Conn, err error) { - dialer := &net.Dialer{Timeout: 10 * time.Second} + dialer := &net.Dialer{Timeout: 30 * time.Second} // Alternative Routes spec says this should be a 30s timeout. var tlsConfig *tls.Config = nil diff --git a/pkg/pmapi/proxy.go b/pkg/pmapi/proxy.go index 5a36bb05..c4a67c74 100644 --- a/pkg/pmapi/proxy.go +++ b/pkg/pmapi/proxy.go @@ -30,8 +30,8 @@ import ( const ( proxyUseDuration = 24 * time.Hour - proxySearchTimeout = 30 * time.Second - proxyQueryTimeout = 10 * time.Second + proxySearchTimeout = 20 * time.Second + proxyQueryTimeout = 20 * time.Second proxyLookupWait = 5 * time.Second proxyQuery = "dMFYGSLTQOJXXI33ONVQWS3BOMNUA.protonpro.xyz" ) @@ -144,12 +144,12 @@ func (p *proxyProvider) canReach(url string) bool { url = "https://" + url } - pinningDialer := NewPinningTLSDialer(NewBasicTLSDialer()) + dialer := NewPinningTLSDialer(NewBasicTLSDialer()) pinger := resty.New(). SetHostURL(url). SetTimeout(p.lookupTimeout). - SetTransport(CreateTransportWithDialer(pinningDialer)) + SetTransport(CreateTransportWithDialer(dialer)) if _, err := pinger.R().Get("/tests/ping"); err != nil { logrus.WithField("proxy", url).WithError(err).Warn("Failed to ping proxy")