mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 02:17:41 +00:00 
			
		
		
		
	update base url in active client after 301 redirect
reduce validation retry count
This commit is contained in:
		
							parent
							
								
									ce761aaec2
								
							
						
					
					
						commit
						5ca99a0e69
					
				| @ -32,7 +32,7 @@ class ConnectionValidator ( | |||||||
| 
 | 
 | ||||||
|             client.account = baseClient.account |             client.account = baseClient.account | ||||||
|             client.credentials = baseClient.credentials |             client.credentials = baseClient.credentials | ||||||
|             while (validationRetryCount < 5) { |             while (validationRetryCount < VALIDATION_RETRY_COUNT) { | ||||||
|                 Timber.d("+++++++++++++++++++++++++++++++++++++ validationRetryCout %d", validationRetryCount) |                 Timber.d("+++++++++++++++++++++++++++++++++++++ validationRetryCout %d", validationRetryCount) | ||||||
|                 var successCounter = 0 |                 var successCounter = 0 | ||||||
|                 var failCounter = 0 |                 var failCounter = 0 | ||||||
| @ -180,4 +180,8 @@ class ConnectionValidator ( | |||||||
|         } |         } | ||||||
|         return credentialsWereRefreshed |         return credentialsWereRefreshed | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     companion object { | ||||||
|  |         val VALIDATION_RETRY_COUNT = 3 | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -48,6 +48,7 @@ import java.io.InputStream; | |||||||
| import java.util.List; | import java.util.List; | ||||||
| 
 | 
 | ||||||
| import static com.owncloud.android.lib.common.http.HttpConstants.AUTHORIZATION_HEADER; | import static com.owncloud.android.lib.common.http.HttpConstants.AUTHORIZATION_HEADER; | ||||||
|  | import static com.owncloud.android.lib.common.http.HttpConstants.HTTP_MOVED_PERMANENTLY; | ||||||
| import static com.owncloud.android.lib.common.http.HttpConstants.OC_X_REQUEST_ID; | import static com.owncloud.android.lib.common.http.HttpConstants.OC_X_REQUEST_ID; | ||||||
| 
 | 
 | ||||||
| public class OwnCloudClient extends HttpClient { | public class OwnCloudClient extends HttpClient { | ||||||
| @ -77,7 +78,10 @@ public class OwnCloudClient extends HttpClient { | |||||||
| 
 | 
 | ||||||
|     private boolean mFollowRedirects = false; |     private boolean mFollowRedirects = false; | ||||||
| 
 | 
 | ||||||
|     public OwnCloudClient(Uri baseUri, ConnectionValidator connectionValidator, boolean synchronizeRequests, SingleSessionManager singleSessionManager) { |     public OwnCloudClient(Uri baseUri, | ||||||
|  |                           ConnectionValidator connectionValidator, | ||||||
|  |                           boolean synchronizeRequests, | ||||||
|  |                           SingleSessionManager singleSessionManager) { | ||||||
|         if (baseUri == null) { |         if (baseUri == null) { | ||||||
|             throw new IllegalArgumentException("Parameter 'baseUri' cannot be NULL"); |             throw new IllegalArgumentException("Parameter 'baseUri' cannot be NULL"); | ||||||
|         } |         } | ||||||
| @ -113,6 +117,10 @@ public class OwnCloudClient extends HttpClient { | |||||||
|         int repeatCounter = 0; |         int repeatCounter = 0; | ||||||
|         int status; |         int status; | ||||||
| 
 | 
 | ||||||
|  |         if(mFollowRedirects) { | ||||||
|  |             method.setFollowRedirects(true); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         boolean retry; |         boolean retry; | ||||||
|         do { |         do { | ||||||
|             repeatCounter++; |             repeatCounter++; | ||||||
| @ -128,16 +136,19 @@ public class OwnCloudClient extends HttpClient { | |||||||
|                 method.setRequestHeader(AUTHORIZATION_HEADER, mCredentials.getHeaderAuth()); |                 method.setRequestHeader(AUTHORIZATION_HEADER, mCredentials.getHeaderAuth()); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             method.setFollowRedirects(mFollowRedirects); |  | ||||||
|             status = method.execute(); |             status = method.execute(); | ||||||
|             stacklog(status, method); |             stacklog(status, method); | ||||||
| 
 | 
 | ||||||
|             if (!mFollowRedirects && |             if (!mFollowRedirects && | ||||||
|  |                     !method.getFollowRedirects() && | ||||||
|                     mConnectionValidator != null && |                     mConnectionValidator != null && | ||||||
|                     (status == HttpConstants.HTTP_MOVED_TEMPORARILY || |                     (status == HttpConstants.HTTP_MOVED_TEMPORARILY || | ||||||
|                             (!(mCredentials instanceof OwnCloudAnonymousCredentials) && |                             (!(mCredentials instanceof OwnCloudAnonymousCredentials) && | ||||||
|                                     status == HttpConstants.HTTP_UNAUTHORIZED))) { |                                     status == HttpConstants.HTTP_UNAUTHORIZED))) { | ||||||
|                 retry = mConnectionValidator.validate(this, mSingleSessionManager); // retry on success fail on no success |                 retry = mConnectionValidator.validate(this, mSingleSessionManager); // retry on success fail on no success | ||||||
|  |             } else if(method.getFollowPermanentRedirects() && status == HTTP_MOVED_PERMANENTLY) { | ||||||
|  |                 retry = true; | ||||||
|  |                 method.setFollowRedirects(true); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|         } while (retry && repeatCounter < MAX_RETRY_COUNT); |         } while (retry && repeatCounter < MAX_RETRY_COUNT); | ||||||
|  | |||||||
| @ -41,6 +41,7 @@ abstract class HttpBaseMethod constructor(url: URL) { | |||||||
|     var okHttpClient: OkHttpClient |     var okHttpClient: OkHttpClient | ||||||
|     var httpUrl: HttpUrl = url.toHttpUrlOrNull() ?: throw MalformedURLException() |     var httpUrl: HttpUrl = url.toHttpUrlOrNull() ?: throw MalformedURLException() | ||||||
|     var request: Request |     var request: Request | ||||||
|  |     private var _followPermanentRedirects = false | ||||||
|     abstract var response: Response |     abstract var response: Response | ||||||
| 
 | 
 | ||||||
|     var call: Call? = null |     var call: Call? = null | ||||||
| @ -123,6 +124,11 @@ abstract class HttpBaseMethod constructor(url: URL) { | |||||||
|         return response.body?.byteStream() |         return response.body?.byteStream() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * returns the final url after following the last redirect. | ||||||
|  |      */ | ||||||
|  |     open fun getFinalUrl() = response.request.url | ||||||
|  | 
 | ||||||
|     /************************* |     /************************* | ||||||
|      *** Connection Params *** |      *** Connection Params *** | ||||||
|      *************************/ |      *************************/ | ||||||
| @ -158,6 +164,15 @@ abstract class HttpBaseMethod constructor(url: URL) { | |||||||
|             .build() |             .build() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     open fun getFollowRedirects() = okHttpClient.followRedirects | ||||||
|  | 
 | ||||||
|  |     open fun setFollPermanentRedirects(followRedirects: Boolean) { | ||||||
|  |         _followPermanentRedirects = followRedirects | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     open fun getFollowPermanentRedirects() = _followPermanentRedirects | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     /************ |     /************ | ||||||
|      *** Call *** |      *** Call *** | ||||||
|      ************/ |      ************/ | ||||||
|  | |||||||
| @ -48,17 +48,11 @@ class GetRemoteStatusOperation : RemoteOperation<RemoteServerInfo>() { | |||||||
|         if(!usesHttpOrHttps(client.baseUri)) { |         if(!usesHttpOrHttps(client.baseUri)) { | ||||||
|             client.baseUri = buildFullHttpsUrl(client.baseUri) |             client.baseUri = buildFullHttpsUrl(client.baseUri) | ||||||
|         } |         } | ||||||
|  |         return tryToConnect(client) | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|         var result = tryToConnect(client) |     private fun updateClientBaseUrl(client:OwnCloudClient, newBaseUrl:String) { | ||||||
|         /* |         client.baseUri = Uri.parse(newBaseUrl) | ||||||
|         if (!(result.code == ResultCode.OK || result.code == ResultCode.OK_SSL) && !result.isSslRecoverableException) { |  | ||||||
|             Timber.d("Establishing secure connection failed, trying non secure connection") |  | ||||||
|             client.baseUri = client.baseUri.buildUpon().scheme(HTTP_SCHEME).build() |  | ||||||
|             result = tryToConnect(client) |  | ||||||
|         } |  | ||||||
|          */ |  | ||||||
| 
 |  | ||||||
|         return result |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun tryToConnect(client: OwnCloudClient): RemoteOperationResult<RemoteServerInfo> { |     private fun tryToConnect(client: OwnCloudClient): RemoteOperationResult<RemoteServerInfo> { | ||||||
| @ -66,7 +60,9 @@ class GetRemoteStatusOperation : RemoteOperation<RemoteServerInfo>() { | |||||||
|         return try { |         return try { | ||||||
|             val requester = StatusRequester() |             val requester = StatusRequester() | ||||||
|             val requestResult = requester.request(baseUrl, client) |             val requestResult = requester.request(baseUrl, client) | ||||||
|             requester.handleRequestResult(requestResult, baseUrl) |             val result = requester.handleRequestResult(requestResult, baseUrl) | ||||||
|  |             updateClientBaseUrl(client, result.data.baseUrl) | ||||||
|  |             return result | ||||||
|         } catch (e: JSONException) { |         } catch (e: JSONException) { | ||||||
|             RemoteOperationResult(ResultCode.INSTANCE_NOT_CONFIGURED) |             RemoteOperationResult(ResultCode.INSTANCE_NOT_CONFIGURED) | ||||||
|         } catch (e: Exception) { |         } catch (e: Exception) { | ||||||
|  | |||||||
| @ -83,8 +83,10 @@ internal class StatusRequester { | |||||||
|         var status: Int |         var status: Int | ||||||
| 
 | 
 | ||||||
|         val getMethod = getGetMethod(currentLocation) |         val getMethod = getGetMethod(currentLocation) | ||||||
|  |         getMethod.setFollPermanentRedirects(true) | ||||||
|         status = client.executeHttpMethod(getMethod) |         status = client.executeHttpMethod(getMethod) | ||||||
|         return RequestResult(getMethod, status, redirectedToUnsecureLocation, currentLocation) | 
 | ||||||
|  |         return RequestResult(getMethod, status, redirectedToUnsecureLocation, getMethod.getFinalUrl().toString()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun Int.isSuccess() = this == HttpConstants.HTTP_OK |     private fun Int.isSuccess() = this == HttpConstants.HTTP_OK | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user