package com.fsck.k9.mail.store.webdav; import com.fsck.k9.mail.K9MailLib; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import timber.log.Timber; import java.net.URI; import static com.fsck.k9.mail.K9MailLib.DEBUG_PROTOCOL_WEBDAV; import static com.fsck.k9.mail.helper.UrlEncodingHelper.decodeUtf8; import static com.fsck.k9.mail.helper.UrlEncodingHelper.encodeUtf8; /** * New HTTP Method that allows changing of the method and generic handling Needed for WebDAV custom methods such as * SEARCH and PROPFIND */ public class HttpGeneric extends HttpEntityEnclosingRequestBase { public String METHOD_NAME = "POST"; public HttpGeneric() { super(); } public HttpGeneric(final URI uri) { super(); setURI(uri); } /** * @throws IllegalArgumentException * if the uri is invalid. */ public HttpGeneric(final String uri) { super(); Timber.v("Starting uri = '%s'", uri); String[] urlParts = uri.split("/"); int length = urlParts.length; String end = urlParts[length - 1]; String url = ""; /** * We have to decode, then encode the URL because Exchange likes to not properly encode all characters */ try { if (length > 3) { end = decodeUtf8(end); end = encodeUtf8(end); end = end.replaceAll("\\+", "%20"); } } catch (IllegalArgumentException iae) { Timber.e(iae, "IllegalArgumentException caught in HttpGeneric(String uri): %s", end); } for (int i = 0; i < length - 1; i++) { if (i != 0) { url = url + "/" + urlParts[i]; } else { url = urlParts[i]; } } if (K9MailLib.isDebug() && DEBUG_PROTOCOL_WEBDAV) { Timber.v("url = '%s' length = %s, end = '%s' length = %s", url, url.length(), end, end.length()); } url = url + "/" + end; Timber.d("url = %s", url); setURI(URI.create(url)); } @Override public String getMethod() { return METHOD_NAME; } public void setMethod(String method) { if (method != null) { METHOD_NAME = method; } } }