private static MessageStatus ProcessExchangeDataException(ExchangeDataException exchangeDataException, IMessageConverter converter) { MessageStatus messageStatus = StorageExceptionHandler.GetMessageStatus(converter, exchangeDataException); if (messageStatus.Action == MessageAction.NDR) { converter.LogMessage(exchangeDataException); } return(messageStatus); }
private static MessageStatus GetMessageStatus(IMessageConverter converter, DataSourceOperationException dataSourceOperationException) { if (dataSourceOperationException is ADInvalidCredentialException) { ADTransientException unavailableException = new ADTransientException(dataSourceOperationException.LocalizedString, dataSourceOperationException); return(StorageExceptionHandler.GetMessageStatus(converter, unavailableException)); } StorageExceptionHandler.LogException(converter, dataSourceOperationException); return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, dataSourceOperationException, true), dataSourceOperationException)); }
private static MessageStatus GetMessageStatus(IMessageConverter converter, StorageTransientException storageException) { StorageExceptionHandler.LogException(converter, storageException); if (storageException is MailboxInSiteFailoverException) { return(new MessageStatus(converter.IsOutbound ? MessageAction.Skip : MessageAction.Reroute, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false), storageException)); } if (storageException.InnerException != null) { MapiPermanentException ex = storageException.InnerException as MapiPermanentException; if (ex != null) { return(StorageExceptionHandler.GetMessageStatus <StorageTransientException>(converter, ex, storageException)); } MapiRetryableException ex2 = storageException.InnerException as MapiRetryableException; if (ex2 != null) { return(StorageExceptionHandler.GetMessageStatus <StorageTransientException>(converter, ex2, storageException)); } } return(new MessageStatus(MessageAction.Retry, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false), storageException)); }
private static MessageStatus GetMessageStatus(IMessageConverter converter, StoragePermanentException storageException) { StorageExceptionHandler.LogException(converter, storageException); ConversionFailedException ex = storageException as ConversionFailedException; if (ex != null) { return(StorageExceptionHandler.GetMessageStatus(converter, ex)); } if (storageException is MailboxCrossSiteFailoverException || storageException is MailboxInfoStaleException) { return(new MessageStatus(converter.IsOutbound ? MessageAction.Skip : MessageAction.Reroute, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException)); } if (storageException is UnableToFindServerForDatabaseException || storageException is IllegalCrossServerConnectionException) { return(new MessageStatus(converter.IsOutbound ? MessageAction.Skip : MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false), storageException)); } if (storageException.InnerException is CannotGetSiteInfoException) { return(new MessageStatus(converter.IsOutbound ? MessageAction.RetryMailboxServer : MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException.InnerException, true), storageException)); } if (storageException.InnerException != null) { MapiPermanentException ex2 = storageException.InnerException as MapiPermanentException; if (ex2 != null) { return(StorageExceptionHandler.GetMessageStatus <StoragePermanentException>(converter, ex2, storageException)); } MapiRetryableException ex3 = storageException.InnerException as MapiRetryableException; if (ex3 != null) { return(StorageExceptionHandler.GetMessageStatus <StoragePermanentException>(converter, ex3, storageException)); } } return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException)); }
private static MessageStatus RunUnderExplicitExceptionHandler(IMessageConverter converter, StoreDriverDelegate workerFunction) { MessageStatus messageStatus = MessageStatus.Success; StorageExceptionHandler.diag = converter.Tracer; try { workerFunction(); } catch (StoreDriverAgentRaisedException ex) { if (ex.InnerException == null) { TraceHelper.TraceFail(StorageExceptionHandler.diag, 0L, "StoreDriverAgentRaisedException's InnerException is null. It is expected to contain the actual exception that the agent has thrown. StoreDriverAgentRaisedException.Message: {0}; StoreDriverAgentRaisedException.StackTrace: {1}.", new object[] { ex.Message, ex.StackTrace }); throw; } if (ex.InnerException is StoreDriverAgentTransientException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, (StoreDriverAgentTransientException)ex.InnerException); } else if (ex.InnerException is SmtpResponseException) { messageStatus = StorageExceptionHandler.ProcessSmtpResponseException((SmtpResponseException)ex.InnerException, converter); } else if (ex.InnerException is ADTransientException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, (ADTransientException)ex.InnerException); } else if (ex.InnerException is DataValidationException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, (DataValidationException)ex.InnerException); } else if (ex.InnerException is DataSourceOperationException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, (DataSourceOperationException)ex.InnerException); } else if (ex.InnerException is StorageTransientException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, (StorageTransientException)ex.InnerException); } else if (ex.InnerException is StoragePermanentException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, (StoragePermanentException)ex.InnerException); } else if (ex.InnerException is ExchangeDataException) { messageStatus = StorageExceptionHandler.ProcessExchangeDataException((ExchangeDataException)ex.InnerException, converter); } else { if (!(ex.InnerException is IOException)) { throw; } messageStatus = StorageExceptionHandler.GetMessageStatus(converter, (IOException)ex.InnerException); } if (messageStatus.Action == MessageAction.Throw) { throw; } } catch (StoreDriverAgentTransientException storeDriverAgentTransientException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, storeDriverAgentTransientException); } catch (SmtpResponseException smtpResponseException) { messageStatus = StorageExceptionHandler.ProcessSmtpResponseException(smtpResponseException, converter); } catch (ADTransientException unavailableException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, unavailableException); if (messageStatus.Action == MessageAction.Throw) { throw; } } catch (DataValidationException invalidDataException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, invalidDataException); if (messageStatus.Action == MessageAction.Throw) { throw; } } catch (DataSourceOperationException dataSourceOperationException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, dataSourceOperationException); if (messageStatus.Action == MessageAction.Throw) { throw; } } catch (StorageTransientException storageException) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, storageException); if (messageStatus.Action == MessageAction.Throw) { throw; } } catch (StoragePermanentException storageException2) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, storageException2); if (messageStatus.Action == MessageAction.Throw) { throw; } } catch (ExchangeDataException exchangeDataException) { messageStatus = StorageExceptionHandler.ProcessExchangeDataException(exchangeDataException, converter); if (messageStatus.Action == MessageAction.Throw) { throw; } } catch (IOException e) { messageStatus = StorageExceptionHandler.GetMessageStatus(converter, e); if (messageStatus.Action == MessageAction.Throw) { throw; } } return(messageStatus); }