Просмотр исходного кода

Explicit timeouts for server API HTTPS requests

Rod Hynes 11 лет назад
Родитель
Сommit
92017cdd1b
3 измененных файлов с 10 добавлено и 7 удалено
  1. 1 0
      psiphon/defaults.go
  2. 1 0
      psiphon/httpProxy.go
  3. 8 7
      psiphon/serverApi.go

+ 1 - 0
psiphon/defaults.go

@@ -36,5 +36,6 @@ const (
 	FETCH_REMOTE_SERVER_LIST_RETRY_TIMEOUT   = 5 * time.Second
 	FETCH_REMOTE_SERVER_LIST_STALE_TIMEOUT   = 6 * time.Hour
 	PSIPHON_API_CLIENT_SESSION_ID_LENGTH     = 16
+	PSIPHON_API_SERVER_TIMEOUT               = 15 * time.Second
 	HTTP_PROXY_MAX_IDLE_CONNECTIONS_PER_HOST = 50
 )

+ 1 - 0
psiphon/httpProxy.go

@@ -45,6 +45,7 @@ func NewHttpProxy(tunnel *Tunnel, failureSignal chan bool) (proxy *HttpProxy, er
 		return nil, err
 	}
 	tunnelledDialer := func(_, targetAddress string) (conn net.Conn, err error) {
+		// TODO: connect timeout?
 		return tunnel.sshClient.Dial("tcp", targetAddress)
 	}
 	transport := &http.Transport{

+ 8 - 7
psiphon/serverApi.go

@@ -262,18 +262,19 @@ func makePsiphonHttpsClient(tunnel *Tunnel, localHttpProxyAddress string) (https
 	if err != nil {
 		return nil, ContextError(err)
 	}
-	dialer := func(network, addr string) (net.Conn, error) {
+	customDialer := func(network, addr string) (net.Conn, error) {
 		customTLSConfig := &CustomTLSConfig{
 			sendServerName:          false,
 			verifyLegacyCertificate: certificate,
 			httpProxyAddress:        localHttpProxyAddress,
 		}
-		return CustomTLSDial(network, addr, customTLSConfig)
+		return CustomTLSDialWithDialer(
+			&net.Dialer{Timeout: PSIPHON_API_SERVER_TIMEOUT},
+			network, addr, customTLSConfig)
+	}
+	transport := &http.Transport{
+		Dial: customDialer,
+		ResponseHeaderTimeout: PSIPHON_API_SERVER_TIMEOUT,
 	}
-	// Copy default transport for its timeout values
-	transport := new(http.Transport)
-	*transport = *http.DefaultTransport.(*http.Transport)
-	transport.Dial = dialer
-	transport.Proxy = nil
 	return &http.Client{Transport: transport}, nil
 }