1d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian/* 2d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Copyright (C) 2015 The Android Open Source Project 3d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 4d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * you may not use this file except in compliance with the License. 6d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * You may obtain a copy of the License at 7d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 8d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 10d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * See the License for the specific language governing permissions and 14d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * limitations under the License. 15d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 16d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 17d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpackage com.android.voicemail.impl.mail; 18d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 19d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian/** 20d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * This exception is used for most types of failures that occur during server interactions. 21d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 22d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>Data passed through this exception should be considered non-localized. Any strings should 23d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * either be internal-only (for debugging) or server-generated. 24d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 25d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>TO DO: Does it make sense to further collapse AuthenticationFailedException and 26d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * CertificateValidationException and any others into this? 27d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 28d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpublic class MessagingException extends Exception { 29d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final long serialVersionUID = -1; 30d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 31d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int NO_ERROR = -1; 32d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Any exception that does not specify a specific issue */ 33d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int UNSPECIFIED_EXCEPTION = 0; 34d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Connection or IO errors */ 35d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int IOERROR = 1; 36d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The configuration requested TLS but the server did not support it. */ 37d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int TLS_REQUIRED = 2; 38d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Authentication is required but the server did not support it. */ 39d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int AUTH_REQUIRED = 3; 40d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** General security failures */ 41d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int GENERAL_SECURITY = 4; 42d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Authentication failed */ 43d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int AUTHENTICATION_FAILED = 5; 44d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Attempt to create duplicate account */ 45d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int DUPLICATE_ACCOUNT = 6; 46d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Required security policies reported - advisory only */ 47d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int SECURITY_POLICIES_REQUIRED = 7; 48d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Required security policies not supported */ 49d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int SECURITY_POLICIES_UNSUPPORTED = 8; 50d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The protocol (or protocol version) isn't supported */ 51d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int PROTOCOL_VERSION_UNSUPPORTED = 9; 52d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The server's SSL certificate couldn't be validated */ 53d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int CERTIFICATE_VALIDATION_ERROR = 10; 54d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Authentication failed during autodiscover */ 55d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int AUTODISCOVER_AUTHENTICATION_FAILED = 11; 56d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Autodiscover completed with a result (non-error) */ 57d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int AUTODISCOVER_AUTHENTICATION_RESULT = 12; 58d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Ambiguous failure; server error or bad credentials */ 59d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int AUTHENTICATION_FAILED_OR_SERVER_ERROR = 13; 60d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The server refused access */ 61d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int ACCESS_DENIED = 14; 62d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The server refused access */ 63d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int ATTACHMENT_NOT_FOUND = 15; 64d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** A client SSL certificate is required for connections to the server */ 65d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int CLIENT_CERTIFICATE_REQUIRED = 16; 66d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The client SSL certificate specified is invalid */ 67d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int CLIENT_CERTIFICATE_ERROR = 17; 68d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The server indicates it does not support OAuth authentication */ 69d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int OAUTH_NOT_SUPPORTED = 18; 70d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The server indicates it experienced an internal error */ 71d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final int SERVER_ERROR = 19; 72d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 73d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian protected int mExceptionType; 74d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian // Exception type-specific data 75d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian protected Object mExceptionData; 76d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 77d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public MessagingException(String message, Throwable throwable) { 78d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian this(UNSPECIFIED_EXCEPTION, message, throwable); 79d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 80d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 81d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public MessagingException(int exceptionType, String message, Throwable throwable) { 82d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian super(message, throwable); 83d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mExceptionType = exceptionType; 84d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mExceptionData = null; 85d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 86d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 87d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 88d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Constructs a MessagingException with an exceptionType and a null message. 89d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 90d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param exceptionType The exception type to set for this exception. 91d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 92d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public MessagingException(int exceptionType) { 93d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian this(exceptionType, null, null); 94d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 95d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 96d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 97d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Constructs a MessagingException with a message. 98d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 99d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param message the message for this exception 100d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 101d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public MessagingException(String message) { 102d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian this(UNSPECIFIED_EXCEPTION, message, null); 103d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 104d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 105d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 106d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Constructs a MessagingException with an exceptionType and a message. 107d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 108d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param exceptionType The exception type to set for this exception. 109d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 110d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public MessagingException(int exceptionType, String message) { 111d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian this(exceptionType, message, null); 112d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 113d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 114d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 115d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Constructs a MessagingException with an exceptionType, a message, and data 116d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 117d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param exceptionType The exception type to set for this exception. 118d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param message the message for the exception (or null) 119d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param data exception-type specific data for the exception (or null) 120d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 121d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public MessagingException(int exceptionType, String message, Object data) { 122d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian super(message); 123d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mExceptionType = exceptionType; 124d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mExceptionData = data; 125d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 126d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 127d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 128d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Return the exception type. Will be OTHER_EXCEPTION if not explicitly set. 129d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 130d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @return Returns the exception type. 131d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 132d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public int getExceptionType() { 133d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mExceptionType; 134d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 135d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 136d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Return the exception data. Will be null if not explicitly set. 137d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 138d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @return Returns the exception data. 139d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 140d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Object getExceptionData() { 141d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mExceptionData; 142d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 143d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian} 144