| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.exchange; |
| |
| /** |
| * ActiveSync command error status definitions (EAS 14.0 and later); these are in addition to the |
| * command-specific errors defined for earlier protocol versions |
| */ |
| public class CommandStatusException extends EasException { |
| private static final long serialVersionUID = 1L; |
| |
| // A status response to an EAS account. Responses < 16 correspond to command-specific errors as |
| // reported by EAS versions < 14.0; responses > 100 correspond to generic errors as reported |
| // by EAS versions 14.0 and greater |
| public final int mStatus; |
| // If the error refers to a specific data item, that item's id (as provided by the server) is |
| // stored here |
| public final String mItemId; |
| |
| public static class CommandStatus { |
| private static final long serialVersionUID = 1L; |
| |
| // 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; |
| public static final int USER_ON_LEGACY_SERVER_CANT_SYNC = 128; |
| public static final int DEVICE_QUARANTINED = 129; |
| public static final int ACCESS_DENIED = 130; |
| public static final int USER_ACCOUNT_DISABLED = 131; |
| public static final int NOT_PROVISIONABLE_PARTIAL = 139; |
| public static final int NOT_PROVISIONABLE_LEGACY_DEVICE = 141; |
| public static final int TOO_MANY_PARTNERSHIPS = 177; |
| |
| // Sync state problems (bad key, multiple client conflict, etc.) |
| public static final int SYNC_STATE_LOCKED = 133; |
| public static final int SYNC_STATE_CORRUPT = 134; |
| public static final int SYNC_STATE_EXISTS = 135; |
| public static final int SYNC_STATE_INVALID = 136; |
| |
| // Soft provisioning errors, we need to send Provision command |
| public static final int NEEDS_PROVISIONING_WIPE = 140; |
| public static final int NEEDS_PROVISIONING = 142; |
| public static final int NEEDS_PROVISIONING_REFRESH = 143; |
| public static final int NEEDS_PROVISIONING_INVALID = 144; |
| |
| // WTF issues (really shouldn't happen in our implementation) |
| public static final int WTF_INVALID_COMMAND = 137; |
| public static final int WTF_INVALID_PROTOCOL = 138; |
| public static final int WTF_DEVICE_CLAIMS_EXTERNAL_MANAGEMENT = 145; |
| public static final int WTF_UNKNOWN_ITEM_TYPE = 147; |
| public static final int WTF_REQUIRES_PROXY_WITHOUT_SSL = 148; |
| |
| // For SmartReply/SmartForward |
| public static final int ITEM_NOT_FOUND = 150; |
| |
| // Transient or possibly transient errors |
| public static final int SERVER_ERROR_RETRY = 111; |
| public static final int SYNC_STATE_NOT_FOUND = 132; |
| |
| // String version of error status codes (for logging only) |
| private static final int STATUS_TEXT_START = 101; |
| private static final int STATUS_TEXT_END = 150; |
| private static final String[] STATUS_TEXT = { |
| "InvalidContent", "InvalidWBXML", "InvalidXML", "InvalidDateTime", "InvalidIDCombo", |
| "InvalidIDs", "InvalidMIME", "DeviceIdError", "DeviceTypeError", "ServerError", |
| "ServerErrorRetry", "ADAccessDenied", "Quota", "ServerOffline", "SendQuota", |
| "RecipientUnresolved", "ReplyNotAllowed", "SentPreviously", "NoRecipient", "SendFailed", |
| "ReplyFailed", "AttsTooLarge", "NoMailbox", "CantBeAnonymous", "UserNotFound", |
| "UserDisabled", "NewMailbox", "LegacyMailbox", "DeviceBlocked", "AccessDenied", |
| "AcctDisabled", "SyncStateNF", "SyncStateLocked", "SyncStateCorrupt", "SyncStateExists", |
| "SyncStateInvalid", "BadCommand", "BadVersion", "NotFullyProvisionable", "RemoteWipe", |
| "LegacyDevice", "NotProvisioned", "PolicyRefresh", "BadPolicyKey", "ExternallyManaged", |
| "NoRecurrence", "UnexpectedClass", "RemoteHasNoSSL", "InvalidRequest", "ItemNotFound" |
| }; |
| |
| public static boolean isNeedsProvisioning(int status) { |
| return (status == CommandStatus.NEEDS_PROVISIONING || |
| status == CommandStatus.NEEDS_PROVISIONING_REFRESH || |
| status == CommandStatus.NEEDS_PROVISIONING_INVALID || |
| status == CommandStatus.NEEDS_PROVISIONING_WIPE); |
| } |
| |
| public static boolean isBadSyncKey(int status) { |
| return (status == CommandStatus.SYNC_STATE_CORRUPT || |
| status == CommandStatus.SYNC_STATE_INVALID); |
| } |
| |
| public static boolean isDeniedAccess(int status) { |
| return (status == CommandStatus.USER_DISABLED_FOR_SYNC || |
| status == CommandStatus.USERS_DISABLED_FOR_SYNC || |
| status == CommandStatus.USER_ON_LEGACY_SERVER_CANT_SYNC || |
| status == CommandStatus.DEVICE_QUARANTINED || |
| status == CommandStatus.ACCESS_DENIED || |
| status == CommandStatus.USER_ACCOUNT_DISABLED || |
| status == CommandStatus.NOT_PROVISIONABLE_LEGACY_DEVICE || |
| status == CommandStatus.NOT_PROVISIONABLE_PARTIAL || |
| status == CommandStatus.TOO_MANY_PARTNERSHIPS); |
| } |
| |
| public static boolean isTransientError(int status) { |
| return status == CommandStatus.SYNC_STATE_NOT_FOUND || |
| status == CommandStatus.SERVER_ERROR_RETRY; |
| } |
| |
| public static String toString(int status) { |
| StringBuilder sb = new StringBuilder(); |
| sb.append(status); |
| sb.append(" ("); |
| if (status < STATUS_TEXT_START || status > STATUS_TEXT_END) { |
| sb.append("unknown"); |
| } else { |
| int offset = status - STATUS_TEXT_START; |
| if (offset <= STATUS_TEXT.length) { |
| sb.append(STATUS_TEXT[offset]); |
| } |
| } |
| sb.append(")"); |
| return sb.toString(); |
| } |
| } |
| |
| public CommandStatusException(int status) { |
| mStatus = status; |
| mItemId = null; |
| } |
| |
| public CommandStatusException(int status, String itemId) { |
| mStatus = status; |
| mItemId = itemId; |
| } |
| } |