// Token: 0x0600155D RID: 5469 RVA: 0x00079AD0 File Offset: 0x00077CD0 private void RemoveMailboxFromStatesCache(MailboxProcessorMailboxData mailboxData) { Hashtable hashtable; if (AssistantsService.MailboxesStates.TryGetValue(WorkloadType.MailboxProcessorAssistant, out hashtable) && hashtable.ContainsKey(mailboxData.MailboxGuid)) { AssistantsService.MailboxesStates[WorkloadType.MailboxProcessorAssistant].Remove(mailboxData.MailboxGuid); } }
// Token: 0x06001557 RID: 5463 RVA: 0x00079650 File Offset: 0x00077850 void IMailboxProcessor.ProcessSingleMailbox(MailboxData mailboxData) { MailboxProcessorMailboxData mailboxData2 = mailboxData as MailboxProcessorMailboxData; if (((IMailboxIssueDetector)this).IsMailboxProblemDetected(mailboxData2)) { ((IMailboxIssueDetector)this).SubmitToRepair(((IMailboxIssueDetector)this).GetMailboxInformation(mailboxData2)); return; } this.RemoveMailboxFromStatesCache(mailboxData2); }
// Token: 0x0600155E RID: 5470 RVA: 0x00079B1C File Offset: 0x00077D1C private int GetMailboxRetyCountFromStateCache(MailboxProcessorMailboxData mailboxData) { int result = 0; Hashtable hashtable; if (AssistantsService.MailboxesStates.TryGetValue(WorkloadType.MailboxProcessorAssistant, out hashtable) && hashtable.ContainsKey(mailboxData.MailboxGuid)) { result = (int)hashtable[mailboxData.MailboxGuid]; } return(result); }
// Token: 0x0600155C RID: 5468 RVA: 0x00079A4C File Offset: 0x00077C4C private void AddMailboxToStatesCache(MailboxProcessorMailboxData mailboxData) { int num = 1; Hashtable hashtable; if (AssistantsService.MailboxesStates.TryGetValue(WorkloadType.MailboxProcessorAssistant, out hashtable)) { if (hashtable.ContainsKey(mailboxData.MailboxGuid)) { num = (int)hashtable[mailboxData.MailboxGuid]; num++; } } else { AssistantsService.MailboxesStates.Add(WorkloadType.MailboxProcessorAssistant, new Hashtable()); } AssistantsService.MailboxesStates[WorkloadType.MailboxProcessorAssistant][mailboxData.MailboxGuid] = num; }
// 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); }
// Token: 0x06001559 RID: 5465 RVA: 0x00079920 File Offset: 0x00077B20 MailboxProcessorNotificationEntry IMailboxIssueDetector.GetMailboxInformation(MailboxProcessorMailboxData mailboxData) { Guid externalDirectoryOrganizationId = (mailboxData.TenantPartitionHint != null) ? mailboxData.TenantPartitionHint.GetExternalDirectoryOrganizationId() : TenantPartitionHint.ExternalDirectoryOrganizationIdForRootOrg; return(new MailboxProcessorNotificationEntry(mailboxData.MailboxGuid, mailboxData.DatabaseGuid, externalDirectoryOrganizationId, this.GetMailboxRetyCountFromStateCache(mailboxData))); }