Handle errors on ping
b/11030802
We now handle server errors > 100.
Change-Id: I7103035fb43e708b0dabd87266e8fb8ad92d069f
diff --git a/src/com/android/exchange/CommandStatusException.java b/src/com/android/exchange/CommandStatusException.java
index 53f3ecd..ccfa542 100644
--- a/src/com/android/exchange/CommandStatusException.java
+++ b/src/com/android/exchange/CommandStatusException.java
@@ -33,6 +33,8 @@
public static class CommandStatus {
+ public static final int STATUS_MAX = 177;
+
// Fatal user/provisioning issues (put on security hold)
public static final int USER_DISABLED_FOR_SYNC = 126;
public static final int USERS_DISABLED_FOR_SYNC = 127;
diff --git a/src/com/android/exchange/adapter/PingParser.java b/src/com/android/exchange/adapter/PingParser.java
index 0c9dbc7..4134884 100644
--- a/src/com/android/exchange/adapter/PingParser.java
+++ b/src/com/android/exchange/adapter/PingParser.java
@@ -16,6 +16,7 @@
package com.android.exchange.adapter;
+import com.android.exchange.CommandStatusException.CommandStatus;
import com.android.exchange.Eas;
import com.android.mail.utils.LogUtils;
@@ -193,7 +194,7 @@
while (nextTag(START_DOCUMENT) != END_DOCUMENT) {
if (tag == Tags.PING_STATUS) {
mPingStatus = getValue("Status", mPingStatus, STATUS_EXPIRED,
- STATUS_SERVER_ERROR);
+ CommandStatus.STATUS_MAX);
} else if (tag == Tags.PING_MAX_FOLDERS) {
mMaxFolders = getValue("MaxFolders", mMaxFolders);
} else if (tag == Tags.PING_FOLDERS) {
diff --git a/src/com/android/exchange/eas/EasPing.java b/src/com/android/exchange/eas/EasPing.java
index 73f75ba..07c62de 100644
--- a/src/com/android/exchange/eas/EasPing.java
+++ b/src/com/android/exchange/eas/EasPing.java
@@ -29,6 +29,7 @@
import com.android.emailcommon.provider.EmailContent.AccountColumns;
import com.android.emailcommon.provider.EmailContent.MailboxColumns;
import com.android.emailcommon.provider.Mailbox;
+import com.android.exchange.CommandStatusException.CommandStatus;
import com.android.exchange.Eas;
import com.android.exchange.EasResponse;
import com.android.exchange.adapter.PingParser;
@@ -228,6 +229,43 @@
case PingParser.STATUS_SERVER_ERROR:
LogUtils.i(TAG, "Server error for account %d", mAccountId);
break;
+ case CommandStatus.SERVER_ERROR_RETRY:
+ // Try again later.
+ LogUtils.i(TAG, "Retryable server error for account %d", mAccountId);
+ return RESULT_RESTART;
+
+ // These errors should not happen.
+ case CommandStatus.USER_DISABLED_FOR_SYNC:
+ case CommandStatus.USERS_DISABLED_FOR_SYNC:
+ case CommandStatus.USER_ON_LEGACY_SERVER_CANT_SYNC:
+ case CommandStatus.DEVICE_QUARANTINED:
+ case CommandStatus.ACCESS_DENIED:
+ case CommandStatus.USER_ACCOUNT_DISABLED:
+ case CommandStatus.NOT_PROVISIONABLE_PARTIAL:
+ case CommandStatus.NOT_PROVISIONABLE_LEGACY_DEVICE:
+ case CommandStatus.TOO_MANY_PARTNERSHIPS:
+ LogUtils.e(TAG, "Unexpected error %d on ping", pingStatus);
+ return RESULT_AUTHENTICATION_ERROR;
+
+ // These errors should not happen.
+ case CommandStatus.SYNC_STATE_NOT_FOUND:
+ case CommandStatus.SYNC_STATE_LOCKED:
+ case CommandStatus.SYNC_STATE_CORRUPT:
+ case CommandStatus.SYNC_STATE_EXISTS:
+ case CommandStatus.SYNC_STATE_INVALID:
+ case CommandStatus.NEEDS_PROVISIONING_WIPE:
+ case CommandStatus.NEEDS_PROVISIONING:
+ case CommandStatus.NEEDS_PROVISIONING_REFRESH:
+ case CommandStatus.NEEDS_PROVISIONING_INVALID:
+ case CommandStatus.WTF_INVALID_COMMAND:
+ case CommandStatus.WTF_INVALID_PROTOCOL:
+ case CommandStatus.WTF_DEVICE_CLAIMS_EXTERNAL_MANAGEMENT:
+ case CommandStatus.WTF_UNKNOWN_ITEM_TYPE:
+ case CommandStatus.WTF_REQUIRES_PROXY_WITHOUT_SSL:
+ case CommandStatus.ITEM_NOT_FOUND:
+ LogUtils.e(TAG, "Unexpected error %d on ping", pingStatus);
+ return RESULT_OTHER_FAILURE;
+
default:
break;
}
diff --git a/src/com/android/exchange/service/EasServerConnection.java b/src/com/android/exchange/service/EasServerConnection.java
index 7275e24..b5abe82 100644
--- a/src/com/android/exchange/service/EasServerConnection.java
+++ b/src/com/android/exchange/service/EasServerConnection.java
@@ -176,6 +176,7 @@
HttpConnectionParams.setSoTimeout(params, (int)(timeout));
HttpConnectionParams.setSocketBufferSize(params, 8192);
mClient = new DefaultHttpClient(getClientConnectionManager(), params) {
+ @Override
protected BasicHttpProcessor createHttpProcessor() {
final BasicHttpProcessor processor = super.createHttpProcessor();
processor.addRequestInterceptor(new CurlLogger());
diff --git a/src/com/android/exchange/service/EmailSyncAdapterService.java b/src/com/android/exchange/service/EmailSyncAdapterService.java
index 26a3144..4e1eab5 100644
--- a/src/com/android/exchange/service/EmailSyncAdapterService.java
+++ b/src/com/android/exchange/service/EmailSyncAdapterService.java
@@ -539,7 +539,7 @@
public void onPerformSync(final android.accounts.Account acct, final Bundle extras,
final String authority, final ContentProviderClient provider,
final SyncResult syncResult) {
- LogUtils.i(TAG, "performSync: %s, %s", acct.toString(), extras.toString());
+ LogUtils.i(TAG, "onPerformSync: %s, %s", acct.toString(), extras.toString());
TempDirectory.setTempDirectory(EmailSyncAdapterService.this);
// TODO: Perform any connectivity checks, bail early if we don't have proper network