// Token: 0x06001561 RID: 5473 RVA: 0x00079BAC File Offset: 0x00077DAC public MailboxProcessorMailboxData(DatabaseInfo databaseInfo, Guid mailboxGuid, int mailboxNumber, PropValue[] row) : base(mailboxGuid, mailboxNumber, databaseInfo.Guid) { MailboxProcessorAssistantType.TraceInformation(0L, "Retrieving mailbox information for database {0}", new object[] { databaseInfo.Guid }); this.DatabaseName = databaseInfo.DatabaseName; PropValue mailboxProperty = MailboxTableQuery.GetMailboxProperty(row, PropTag.MailboxMiscFlags); if (mailboxProperty.PropTag == PropTag.MailboxMiscFlags) { MailboxMiscFlags @int = (MailboxMiscFlags)mailboxProperty.GetInt(); this.IsMoveDestination = ((@int & MailboxMiscFlags.CreatedByMove) == MailboxMiscFlags.CreatedByMove); this.IsArchive = ((@int & MailboxMiscFlags.ArchiveMailbox) == MailboxMiscFlags.ArchiveMailbox); } else { MailboxProcessorAssistantType.TraceInformation(0L, "Cannot retrieve property MailboxMiscFlags for Mailbox with GUID {0}", new object[] { mailboxGuid }); this.IsMoveDestination = false; this.IsArchive = false; } PropValue mailboxProperty2 = MailboxTableQuery.GetMailboxProperty(row, PropTag.PersistableTenantPartitionHint); this.TenantPartitionHint = null; if (mailboxProperty2.PropTag == PropTag.PersistableTenantPartitionHint) { byte[] bytes = mailboxProperty2.GetBytes(); if (bytes != null && bytes.Length != 0) { this.TenantPartitionHint = TenantPartitionHint.FromPersistablePartitionHint(bytes); } } else { MailboxProcessorAssistantType.TraceInformation(0L, "Cannot retrieve property PersistableTenantPartitionHint for Mailbox with GUID {0}", new object[] { mailboxGuid }); } MailboxProcessorAssistantType.TraceInformation(0L, "Found mailbox with GUID {0}. Is archive: {1}", new object[] { mailboxGuid, this.IsArchive }); }
// Token: 0x06001558 RID: 5464 RVA: 0x00079684 File Offset: 0x00077884 bool IMailboxIssueDetector.IsMailboxProblemDetected(MailboxProcessorMailboxData mailboxData) { if (!mailboxData.IsMoveDestination) { return(false); } ADUser aduserFromMailboxGuid; try { aduserFromMailboxGuid = ADHelper.GetADUserFromMailboxGuid(mailboxData.MailboxGuid, mailboxData.TenantPartitionHint); } catch (NonUniqueRecipientException) { MailboxProcessorAssistantType.Tracer.TraceError <Guid>((long)this.GetHashCode(), "Got AD duplicate by GUID: {0}", mailboxData.MailboxGuid); return(false); } catch (ADTransientException) { return(false); } if (aduserFromMailboxGuid == null || (mailboxData.IsArchive && aduserFromMailboxGuid.ArchiveDatabase == null) || aduserFromMailboxGuid.Database == null) { return(false); } Guid a = mailboxData.IsArchive ? aduserFromMailboxGuid.ArchiveDatabase.ObjectGuid : aduserFromMailboxGuid.Database.ObjectGuid; if (a != mailboxData.DatabaseGuid) { MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox {0} is on the different database than AD user {1}. Not eligible for unlocking.", new object[] { mailboxData.MailboxGuid, aduserFromMailboxGuid.Guid }); return(false); } if (aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.Completed && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.CompletedWithWarning && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.None && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.Failed) { MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox with GUID {0} is being moved and not yet completed or not yet failed.", new object[] { mailboxData.MailboxGuid }); return(false); } ExchangePrincipal mailboxOwner = ExchangePrincipal.FromMailboxGuid(aduserFromMailboxGuid.Session.SessionSettings, mailboxData.MailboxGuid, mailboxData.DatabaseGuid, RemotingOptions.LocalConnectionsOnly, null, false); try { string clientInfoString = string.Format("{0};Action={1}", "Client=TBA", base.GetType().Name); using (MailboxSession.OpenAsAdmin(mailboxOwner, CultureInfo.InvariantCulture, clientInfoString, true)) { MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox {0} is not locked. No repair needed.", new object[] { mailboxData.MailboxGuid }); } } catch (MailboxInTransitException) { MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Found illegally locked mailbox with GUID {0}", new object[] { mailboxData.MailboxGuid }); this.AddMailboxToStatesCache(mailboxData); return(true); } catch (LocalizedException ex) { MailboxProcessorAssistantType.Tracer.TraceError((long)this.GetHashCode(), "{0} threw an exception of type {1} with message {2}. Was processing mailbox {3} on database {4}.", new object[] { base.GetType().ToString(), ex.GetType().ToString(), ex.Message, mailboxData.MailboxGuid, mailboxData.DatabaseName }); } return(false); }