コード例 #1
0
        // Token: 0x060000E2 RID: 226 RVA: 0x00003F80 File Offset: 0x00002180
        public static string GetDiagnosticInfo(Exception ex, string diagnosticInfo)
        {
            AnchorUtil.ThrowOnNullArgument(ex, "ex");
            Exception innerException = ex.InnerException;
            int       num            = 0;

            while (num < 10 && innerException != null)
            {
                MapiPermanentException ex2 = innerException as MapiPermanentException;
                MapiRetryableException ex3 = innerException as MapiRetryableException;
                string text = innerException.Message;
                if (ex2 != null)
                {
                    text = ex2.DiagCtx.ToCompactString();
                }
                else if (ex3 != null)
                {
                    text = ex3.DiagCtx.ToCompactString();
                }
                if (!string.IsNullOrEmpty(text))
                {
                    if (diagnosticInfo == null)
                    {
                        diagnosticInfo = string.Format(CultureInfo.InvariantCulture, "InnerException:{0}:{1}", new object[]
                        {
                            innerException.GetType().Name,
                            text
                        });
                    }
                    else
                    {
                        diagnosticInfo = string.Format(CultureInfo.InvariantCulture, "{0} InnerException:{1}:{2}", new object[]
                        {
                            diagnosticInfo,
                            innerException.GetType().Name,
                            text
                        });
                    }
                }
                num++;
                innerException = innerException.InnerException;
            }
            string value = string.Empty;
            MigrationPermanentException ex4 = ex as MigrationPermanentException;
            MigrationTransientException ex5 = ex as MigrationTransientException;

            if (ex4 != null)
            {
                value = ex4.InternalError + ". ";
            }
            else if (ex5 != null)
            {
                value = ex5.InternalError + ". ";
            }
            StringBuilder stringBuilder = new StringBuilder(value);

            stringBuilder.Append(diagnosticInfo);
            stringBuilder.Append(ex.ToString());
            return(AnchorLogger.SanitizeDiagnosticInfo(stringBuilder.ToString()));
        }
コード例 #2
0
        public static string GetDiagnosticContextFromException(Exception exception)
        {
            string result = string.Empty;

            for (Exception ex = exception; ex != null; ex = ex.InnerException)
            {
                DiagnosticContext      diagnosticContext = null;
                MapiPermanentException ex2 = ex as MapiPermanentException;
                MapiRetryableException ex3 = ex as MapiRetryableException;
                if (ex2 != null)
                {
                    diagnosticContext = ex2.DiagCtx;
                }
                else if (ex3 != null)
                {
                    diagnosticContext = ex3.DiagCtx;
                }
                if (diagnosticContext != null)
                {
                    result = string.Format("[e::{0}]", diagnosticContext.ToCompactString());
                    break;
                }
            }
            return(result);
        }
コード例 #3
0
        internal static string GetExceptionDiagnosticInfo(Exception exception)
        {
            StringBuilder stringBuilder = new StringBuilder((exception.InnerException == null) ? 1000 : 2000);

            stringBuilder.Append(exception.Message);
            Exception ex = (exception.InnerException == null) ? exception : exception.InnerException;
            MapiPermanentException ex2 = ex as MapiPermanentException;

            if (ex2 != null)
            {
                stringBuilder.AppendFormat(" {0}", StorageExceptionHandler.GetDiagnosticInfo(ex2));
            }
            else
            {
                MapiRetryableException ex3 = ex as MapiRetryableException;
                if (ex3 != null)
                {
                    stringBuilder.AppendFormat(" {0}", StorageExceptionHandler.GetDiagnosticInfo(ex3));
                }
                else
                {
                    stringBuilder.AppendFormat(" {0}: {1}", ex.GetType().Name, ex.Message);
                }
            }
            return(stringBuilder.ToString());
        }
コード例 #4
0
 private static string GetDiagnosticInfo(MapiPermanentException e)
 {
     if (e.DiagCtx != null)
     {
         return(e.DiagCtx.ToCompactString());
     }
     return(string.Empty);
 }
コード例 #5
0
        // Token: 0x06000B6A RID: 2922 RVA: 0x000497C4 File Offset: 0x000479C4
        public static void ThrowInnerIfMapiExceptionHandledbyAI(StoragePermanentException e)
        {
            if (e == null)
            {
                return;
            }
            MapiPermanentException ex = e.InnerException as MapiPermanentException;

            if (ex != null && MapiExceptionFilter.IsMapiPermanentExceptionHandledByAI(ex))
            {
                throw ex;
            }
        }
コード例 #6
0
        private string GetDiagnosticContext(Exception ex)
        {
            if (ex == null)
            {
                throw new ArgumentNullException("ex");
            }
            string    result           = string.Empty;
            Exception innerException   = ex.InnerException;
            MapiPermanentException ex2 = innerException as MapiPermanentException;
            MapiRetryableException ex3 = innerException as MapiRetryableException;

            if (ex2 != null)
            {
                result = ex2.DiagCtx.ToCompactString();
            }
            else if (ex3 != null)
            {
                result = ex3.DiagCtx.ToCompactString();
            }
            return(result);
        }
コード例 #7
0
        internal static string GetDiagnosticContext(Exception exception)
        {
            string result = string.Empty;

            while (exception != null)
            {
                MapiPermanentException ex = exception.InnerException as MapiPermanentException;
                if (ex != null)
                {
                    result = ex.DiagCtx.ToCompactString();
                    break;
                }
                MapiRetryableException ex2 = exception.InnerException as MapiRetryableException;
                if (ex2 != null)
                {
                    result = ex2.DiagCtx.ToCompactString();
                    break;
                }
                exception = exception.InnerException;
            }
            return(result);
        }
コード例 #8
0
 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));
 }
コード例 #9
0
        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));
        }
コード例 #10
0
 // Token: 0x06000B6C RID: 2924 RVA: 0x0004982A File Offset: 0x00047A2A
 private static bool IsMapiPermanentExceptionHandledByAI(MapiPermanentException e)
 {
     return(e != null && (e is MapiExceptionAmbiguousAlias || e is MapiExceptionJetErrorIndexNotFound || e is MapiExceptionJetErrorInstanceUnavailableDueToFatalLogDiskFull || e is MapiExceptionJetErrorLogDiskFull || e is MapiExceptionJetErrorReadVerifyFailure || e is MapiExceptionMdbOffline));
 }
コード例 #11
0
        private static MessageStatus GetMessageStatus <T>(IMessageConverter converter, MapiPermanentException mapiException, T storageException) where T : Exception
        {
            string        name = mapiException.GetType().Name;
            string        key;
            MessageStatus messageStatus;

            switch (key = name)
            {
            case "MapiExceptionJetErrorLogDiskFull":
                return(new MessageStatus(MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, AckReason.MailboxDiskFull), storageException));

            case "MapiExceptionADDuplicateEntry":
                return(new MessageStatus(converter.IsOutbound ? MessageAction.RetryMailboxServer : MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, "Duplicated AD entries found"), storageException));

            case "MapiExceptionNoMoreConnections":
                messageStatus = new MessageStatus(converter.IsOutbound ? MessageAction.RetryMailboxServer : MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, SmtpResponse.TooManyConnectionsPerSource), storageException);
                messageStatus.RetryInterval = new TimeSpan?(StorageExceptionHandler.MailboxDeliveryFastQueueRetryInterval);
                return(messageStatus);

            case "MapiExceptionUnknownUser":
                return(new MessageStatus(converter.IsOutbound ? MessageAction.Retry : MessageAction.Reroute, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException));

            case "MapiExceptionNoReplicaHere":
            case "MapiExceptionWrongServer":
            case "MapiExceptionWrongMailbox":
                return(new MessageStatus(converter.IsOutbound ? MessageAction.Skip : MessageAction.Reroute, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException));

            case "MapiExceptionClientVersionDisallowed":
                return(new MessageStatus(MessageAction.Reroute, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException));

            case "MapiExceptionDuplicateDelivery":
                return(new MessageStatus(MessageAction.LogDuplicate, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException));

            case "MapiExceptionMaxTimeExpired":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, null, "4.4.1", "connection timed out", true), storageException));

            case "MapiExceptionUnableToComplete":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, null, "4.4.1", "connection timed out", true), storageException));

            case "MapiExceptionMessageTooBig":
            case "MapiExceptionTooComplex":
            case "MapiExceptionTooBig":
            case "MapiExceptionMaxAttachmentExceeded":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, null, "5.3.4", "message exceeds fixed system limits", true), storageException));

            case "MapiExceptionTooManyRecips":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, null, "5.3.3", "too many recipients", true), storageException));

            case "MapiExceptionQuotaExceeded":
            case "MapiExceptionShutoffQuotaExceeded":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, null, "5.2.2", "mailbox full", true), storageException));

            case "MapiExceptionNoReplicaAvailable":
            case "MapiExceptionFolderDisabled":
            case "MapiExceptionMailboxDisabled":
            case "MapiExceptionAccountDisabled":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, null, "5.2.1", "mailbox disabled", true), storageException));

            case "MapiExceptionMdbOffline":
                return(new MessageStatus(MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, AckReason.MDBOffline), storageException));

            case "MapiExceptionMaxObjsExceeded":
            case "MapiExceptionRpcBufferTooSmall":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, null, "4.3.2", "mailbox busy", true), storageException));

            case "MapiExceptionNoAccess":
                return(new MessageStatus(MessageAction.Retry, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false, AckReason.MapiNoAccessFailure), storageException));

            case "MapiExceptionJetErrorPageNotInitialized":
                return(new MessageStatus(MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true, "Database page not initialized"), storageException));

            case "MapiExceptionOutOfMemory":
            case "MapiExceptionTooManyMountedDatabases":
                return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException));

            case "MapiExceptionUnconfigured":
                return(new MessageStatus(MessageAction.Retry, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false), storageException));
            }
            messageStatus = new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException);
            return(messageStatus);
        }