Merge branch 'fixed_permanent_redirections' into refresh_folder_contents_when_browsed_into

This commit is contained in:
David A. Velasco 2013-10-03 12:38:09 +02:00
commit 8a27bf186a

View file

@ -24,12 +24,14 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.HttpVersion;
import org.apache.commons.httpclient.URI;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthPolicy;
import org.apache.commons.httpclient.auth.AuthScope;
@ -48,6 +50,8 @@ import com.owncloud.android.network.BearerCredentials;
import android.net.Uri;
public class WebdavClient extends HttpClient {
private static final int MAX_REDIRECTIONS_COUNT = 3;
private Uri mUri;
private Credentials mCredentials;
private boolean mFollowRedirects;
@ -160,15 +164,39 @@ public class WebdavClient extends HttpClient {
@Override
public int executeMethod(HttpMethod method) throws IOException, HttpException {
boolean customRedirectionNeeded = false;
try {
method.setFollowRedirects(mFollowRedirects);
} catch (Exception e) {
Log_OC.d(TAG, "setFollowRedirects failed for " + method.getName() + " method, custom redirection will be used");
customRedirectionNeeded = true;
}
if (mSsoSessionCookie != null && mSsoSessionCookie.length() > 0) {
method.setRequestHeader("Cookie", mSsoSessionCookie);
}
return super.executeMethod(method);
int status = super.executeMethod(method);
int redirectionsCount = 0;
while (mFollowRedirects &&
redirectionsCount < MAX_REDIRECTIONS_COUNT &&
customRedirectionNeeded &&
( status == HttpStatus.SC_MOVED_PERMANENTLY ||
status == HttpStatus.SC_MOVED_TEMPORARILY ||
status == HttpStatus.SC_TEMPORARY_REDIRECT)
) {
Header location = method.getResponseHeader("Location");
if (location != null) {
Log_OC.d(TAG, "Location to redirect: " + location.getValue());
method.setURI(new URI(location.getValue(), true));
status = super.executeMethod(method);
redirectionsCount++;
} else {
Log_OC.d(TAG, "No location to redirect!");
status = HttpStatus.SC_NOT_FOUND;
}
}
return status;
}