1345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein/* 2345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Copyright (C) 2008 The Android Open Source Project 3345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 4345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Licensed under the Apache License, Version 2.0 (the "License"); 5345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * you may not use this file except in compliance with the License. 6345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * You may obtain a copy of the License at 7345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 8345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * http://www.apache.org/licenses/LICENSE-2.0 9345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 10345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Unless required by applicable law or agreed to in writing, software 11345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * distributed under the License is distributed on an "AS IS" BASIS, 12345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * See the License for the specific language governing permissions and 14345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * limitations under the License. 15345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 16345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 17345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sappersteinpackage com.android.emailcommon.mail; 18345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 19345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 20345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein/** 21345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * This exception is used for most types of failures that occur during server interactions. 22345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 23345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Data passed through this exception should be considered non-localized. Any strings should 24345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * either be internal-only (for debugging) or server-generated. 25345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 26345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * TO DO: Does it make sense to further collapse AuthenticationFailedException and 27345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * CertificateValidationException and any others into this? 28345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 29345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sappersteinpublic class MessagingException extends Exception { 30345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final long serialVersionUID = -1; 31345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 32345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int NO_ERROR = -1; 33345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Any exception that does not specify a specific issue */ 34345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int UNSPECIFIED_EXCEPTION = 0; 35345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Connection or IO errors */ 36345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int IOERROR = 1; 37345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** The configuration requested TLS but the server did not support it. */ 38345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int TLS_REQUIRED = 2; 39345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Authentication is required but the server did not support it. */ 40345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int AUTH_REQUIRED = 3; 41345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** General security failures */ 42345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int GENERAL_SECURITY = 4; 43345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Authentication failed */ 44345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int AUTHENTICATION_FAILED = 5; 45345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Attempt to create duplicate account */ 46345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int DUPLICATE_ACCOUNT = 6; 47345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Required security policies reported - advisory only */ 48345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int SECURITY_POLICIES_REQUIRED = 7; 49345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Required security policies not supported */ 50345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int SECURITY_POLICIES_UNSUPPORTED = 8; 51345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** The protocol (or protocol version) isn't supported */ 52345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int PROTOCOL_VERSION_UNSUPPORTED = 9; 53345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** The server's SSL certificate couldn't be validated */ 54345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int CERTIFICATE_VALIDATION_ERROR = 10; 55345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Authentication failed during autodiscover */ 56345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int AUTODISCOVER_AUTHENTICATION_FAILED = 11; 57345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Autodiscover completed with a result (non-error) */ 58345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int AUTODISCOVER_AUTHENTICATION_RESULT = 12; 59345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** Ambiguous failure; server error or bad credentials */ 60345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int AUTHENTICATION_FAILED_OR_SERVER_ERROR = 13; 61345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** The server refused access */ 62345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int ACCESS_DENIED = 14; 63345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** The server refused access */ 64345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int ATTACHMENT_NOT_FOUND = 15; 65345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** A client SSL certificate is required for connections to the server */ 66345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int CLIENT_CERTIFICATE_REQUIRED = 16; 67345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** The client SSL certificate specified is invalid */ 68345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public static final int CLIENT_CERTIFICATE_ERROR = 17; 69b46db2e400ab2eae168baea4c4c7a298cdfa4fb6Martin Hibdon /** The server indicates it does not support OAuth authentication */ 70b46db2e400ab2eae168baea4c4c7a298cdfa4fb6Martin Hibdon public static final int OAUTH_NOT_SUPPORTED = 18; 7155d0725ebe4d12c7d1d02f5ee13840c1f200503dJames Lemieux /** The server indicates it experienced an internal error */ 7255d0725ebe4d12c7d1d02f5ee13840c1f200503dJames Lemieux public static final int SERVER_ERROR = 19; 73345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 74345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein protected int mExceptionType; 75345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein // Exception type-specific data 76345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein protected Object mExceptionData; 77345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 78345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public MessagingException(String message, Throwable throwable) { 79345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein this(UNSPECIFIED_EXCEPTION, message, throwable); 80345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 81345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 82345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public MessagingException(int exceptionType, String message, Throwable throwable) { 83345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein super(message, throwable); 84345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein mExceptionType = exceptionType; 85345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein mExceptionData = null; 86345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 87345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 88345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 89345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Constructs a MessagingException with an exceptionType and a null message. 90345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @param exceptionType The exception type to set for this exception. 91345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 92345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public MessagingException(int exceptionType) { 93345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein this(exceptionType, null, null); 94345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 95345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 96345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 97345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Constructs a MessagingException with a message. 98345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @param message the message for this exception 99345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 100345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public MessagingException(String message) { 101345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein this(UNSPECIFIED_EXCEPTION, message, null); 102345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 103345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 104345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 105345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Constructs a MessagingException with an exceptionType and a message. 106345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @param exceptionType The exception type to set for this exception. 107345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 108345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public MessagingException(int exceptionType, String message) { 109345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein this(exceptionType, message, null); 110345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 111345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 112345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 113345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Constructs a MessagingException with an exceptionType, a message, and data 114345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @param exceptionType The exception type to set for this exception. 115345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @param message the message for the exception (or null) 116345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @param data exception-type specific data for the exception (or null) 117345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 118345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public MessagingException(int exceptionType, String message, Object data) { 119345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein super(message); 120345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein mExceptionType = exceptionType; 121345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein mExceptionData = data; 122345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 123345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 124345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 125345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Return the exception type. Will be OTHER_EXCEPTION if not explicitly set. 126345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 127345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @return Returns the exception type. 128345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 129345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public int getExceptionType() { 130345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein return mExceptionType; 131345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 132345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 133345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Return the exception data. Will be null if not explicitly set. 134345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 135345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @return Returns the exception data. 136345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 137345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public Object getExceptionData() { 138345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein return mExceptionData; 139345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 140345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein}