protected RemotePermanentException(SerializationInfo info, StreamingContext context) : base(info, context)
 {
     RemotePermanentException.Deserialize(info, context, out this.originalFailureType, out this.mapiLowLevelError, out this.wkeClasses, out this.remoteStackTrace);
 }
 public override void GetObjectData(SerializationInfo info, StreamingContext context)
 {
     base.GetObjectData(info, context);
     RemotePermanentException.Serialize(info, context, this.originalFailureType, this.mapiLowLevelError, this.wkeClasses, this.remoteStackTrace);
 }
        private Exception Reconstruct(VersionInformation serverVersion)
        {
            LocalizedException ex             = null;
            Exception          innerException = (this.InnerException != null) ? this.InnerException.Reconstruct(serverVersion) : null;

            if (this.MrsErrorType == MailboxReplicationServiceFault.MRSErrorType.ProxyThrottlingLimitReached)
            {
                ex = new MRSProxyConnectionLimitReachedTransientException(this.Message, innerException);
            }
            else
            {
                WellKnownException ex2 = this.MatchWellKnownException(new WellKnownException[]
                {
                    WellKnownException.StaticCapacityExceededReservation,
                    WellKnownException.WlmCapacityExceededReservation,
                    WellKnownException.WlmResourceUnhealthy
                });
                if (ex2 != WellKnownException.None)
                {
                    switch (ex2)
                    {
                    case WellKnownException.StaticCapacityExceededReservation:
                        ex = new StaticCapacityExceededReservationException(this.ResourceName, this.ResourceType, this.Capacity);
                        break;

                    case WellKnownException.WlmCapacityExceededReservation:
                        ex = new WlmCapacityExceededReservationException(this.ResourceName, this.ResourceType, this.WlmResourceKey, this.WlmResourceMetricType, this.Capacity);
                        break;

                    case WellKnownException.WlmResourceUnhealthy:
                        ex = new WlmResourceUnhealthyException(this.ResourceName, this.ResourceType, this.WlmResourceKey, this.WlmResourceMetricType, this.LoadRatio, this.LoadState, this.LoadMetric);
                        break;
                    }
                }
                if (ex == null)
                {
                    if (this.MrsErrorType == MailboxReplicationServiceFault.MRSErrorType.Transient)
                    {
                        ex = new RemoteTransientException(this.Message, innerException);
                    }
                    else
                    {
                        ex = new RemotePermanentException(this.Message, innerException);
                    }
                }
            }
            IMRSRemoteException ex3 = ex as IMRSRemoteException;

            if (ex3 != null)
            {
                ex3.OriginalFailureType = this.ExceptionType;
                ex3.MapiLowLevelError   = this.MapiLowLevelError;
                ex3.RemoteStackTrace    = this.StackTrace;
                if (this.WKEClasses != null)
                {
                    ex3.WKEClasses = new WellKnownException[this.WKEClasses.Length + 1];
                    for (int i = 0; i < this.WKEClasses.Length; i++)
                    {
                        ex3.WKEClasses[i] = (WellKnownException)this.WKEClasses[i];
                    }
                    ex3.WKEClasses[this.WKEClasses.Length] = WellKnownException.MRSRemote;
                }
                else
                {
                    ex3.WKEClasses = CommonUtils.ClassifyException(ex);
                }
                if (serverVersion != null && !serverVersion[17])
                {
                    if (!CommonUtils.ExceptionIs(ex, new WellKnownException[]
                    {
                        WellKnownException.MRSMailboxIsLocked
                    }) && (MailboxReplicationServiceFault.DownlevelMailboxIsLockedFailureTypes.Contains(ex3.OriginalFailureType) || this.Message.StringId == MrsStrings.DestMailboxAlreadyBeingMoved.StringId || this.Message.StringId == MrsStrings.SourceMailboxAlreadyBeingMoved.StringId))
                    {
                        ex3.WKEClasses = new List <WellKnownException>(ex3.WKEClasses)
                        {
                            WellKnownException.MRSMailboxIsLocked
                        }.ToArray();
                    }
                    if (!CommonUtils.ExceptionIs(ex, new WellKnownException[]
                    {
                        WellKnownException.MapiNotFound
                    }) && ex3.OriginalFailureType == "MapiExceptionNotFound")
                    {
                        ex3.WKEClasses = new List <WellKnownException>(ex3.WKEClasses)
                        {
                            WellKnownException.MapiNotFound
                        }.ToArray();
                    }
                }
            }
            ex.ErrorCode = this.ErrorCode;
            return(ex);
        }