// Token: 0x06000774 RID: 1908 RVA: 0x00034760 File Offset: 0x00032960 private bool IsMessageInteresting(MapiEvent mapiEvent) { bool flag = ResourceCheck.IsEventConfigChange(mapiEvent); if (ObjectClass.IsMiddleTierRulesMessage(mapiEvent.ObjectClass) && !flag) { return(true); } if (!CalendarAssistant.ShouldProcessMessageClass(mapiEvent) && !flag) { return(false); } CachedState cachedState = AssistantsService.CachedObjectsList.GetCachedState(mapiEvent.MailboxGuid); bool? flag2 = ResourceCheck.QuickCheckForAutomatedBooking(mapiEvent, cachedState); if (flag2 == null) { return(true); } if (flag2 == false) { cachedState.LockForRead(); CalendarConfiguration calendarConfiguration; try { calendarConfiguration = (cachedState.State[0] as CalendarConfiguration); } finally { cachedState.ReleaseReaderLock(); } return(!calendarConfiguration.SkipProcessing); } return(false); }
// Token: 0x060007B1 RID: 1969 RVA: 0x0003701C File Offset: 0x0003521C private static bool ShouldIgnoreFolder(MailboxSession itemStore, StoreObjectId folderId) { foreach (DefaultFolderType defaultFolderType in OldMessageDeletion.FoldersToIgnore) { StoreObjectId defaultFolderId = itemStore.GetDefaultFolderId(defaultFolderType); if (defaultFolderId != null && defaultFolderId.Equals(folderId)) { return(true); } } return(CalendarAssistant.IsDumpsterFolder(itemStore, folderId)); }
// Token: 0x06000783 RID: 1923 RVA: 0x0003546C File Offset: 0x0003366C private static bool ShouldIgnoreMessage(MailboxSession itemStore, StoreObjectId folderId, MeetingMessage mtgMessage) { foreach (DefaultFolderType defaultFolderType in CalendarAssistant.FoldersToIgnore) { StoreObjectId defaultFolderId = itemStore.GetDefaultFolderId(defaultFolderType); if (defaultFolderId != null && defaultFolderId.Equals(folderId)) { return(true); } } StoreObjectId defaultFolderId2 = itemStore.GetDefaultFolderId(DefaultFolderType.DeletedItems); if (defaultFolderId2 != null && defaultFolderId2.Equals(folderId) && mtgMessage != null && mtgMessage is MeetingRequest) { return(!OldMessageDeletion.IsSelfForwardedEvent(mtgMessage, itemStore)); } return(CalendarAssistant.IsDumpsterFolder(itemStore, folderId)); }
// Token: 0x06000790 RID: 1936 RVA: 0x00035684 File Offset: 0x00033884 public void ProcessMeetingMessage(MailboxSession itemStore, MeetingMessage mtgMessage, ref CalendarItemBase originalCalItem, CalendarConfiguration mailboxConfig, IEnumerable <VersionedId> duplicates, bool performOmd, bool honorExternalMeetingMessageProcessingConfig) { bool isProcessed = mtgMessage.IsProcessed; bool flag = this.PreProcessMessage(itemStore, mtgMessage, isProcessed, mtgMessage.CalendarProcessed); bool flag2 = false; if (!flag) { flag2 = CalendarProcessing.IsAutoAcceptanceProcessingRequired(itemStore, mtgMessage, originalCalItem); } if (flag || flag2) { int num = mailboxConfig.DefaultReminderTime; if (num < 0 || num > 2629800) { num = CalendarProcessing.DefaultReminderMinutesBeforeStart; } int num2 = 3; int i = num2; if (this.honorProcessingConfiguration && originalCalItem == null && !mailboxConfig.AddNewRequestsTentatively && !mtgMessage.IsRepairUpdateMessage) { CalendarProcessing.ProcessingTracer.TraceDebug((long)mtgMessage.GetHashCode(), "{0}: Skipping processing because user settings for adding new items is false.", new object[] { TraceContext.Get() }); return; } if (honorExternalMeetingMessageProcessingConfig && mtgMessage.SkipMessage(mailboxConfig.ProcessExternalMeetingMessages, originalCalItem)) { CalendarProcessing.ProcessingTracer.TraceDebug <object, bool>((long)mtgMessage.GetHashCode(), "{0}: Skipping processing because user settings for processing external items is false. IsRepairUpdateMessage: {1}", TraceContext.Get(), mtgMessage.IsRepairUpdateMessage); return; } while (i > 0) { try { if (flag) { if (!this.DoProcessingLogic(itemStore, mtgMessage, ref originalCalItem, num, ref i)) { this.TraceDebugAndPfd(mtgMessage.GetHashCode(), string.Format("{0}: completedProcessing = {1}", TraceContext.Get(), false)); continue; } flag = false; this.TraceDebugAndPfd(mtgMessage.GetHashCode(), string.Format("{0}: completedProcessing = {1}", TraceContext.Get(), true)); flag2 = CalendarProcessing.IsAutoAcceptanceProcessingRequired(itemStore, mtgMessage, originalCalItem); } if (flag2) { CalendarProcessing.AutoAcceptEvents(itemStore, originalCalItem); flag2 = false; } if (!flag && !flag2) { break; } } catch (ObjectExistedException exception) { this.TraceAndLogException(exception, itemStore, mtgMessage, i); i--; } catch (SaveConflictException ex) { this.TraceAndLogException(ex, itemStore, mtgMessage, i); i--; if (originalCalItem != null) { originalCalItem.Dispose(); originalCalItem = null; } if (!CalendarAssistant.GetCalendarItem(mtgMessage, CalendarProcessing.UnexpectedPathTracer, ref originalCalItem, duplicates != null, out duplicates)) { throw new SkipException(Strings.descSkipExceptionFailedToLoadCalItem, ex); } if (originalCalItem != null) { originalCalItem.OpenAsReadWrite(); } } catch (QuotaExceededException exception2) { this.TraceAndLogException(exception2, itemStore, mtgMessage, i); i = -1; } catch (ObjectNotFoundException ex2) { this.TraceAndLogException(ex2, itemStore, mtgMessage, i); throw new SkipException(ex2); } catch (VirusDetectedException exception3) { this.TraceAndLogException(exception3, itemStore, mtgMessage, i); i = -1; } catch (VirusMessageDeletedException exception4) { this.TraceAndLogException(exception4, itemStore, mtgMessage, i); i = -1; } catch (DataValidationException ex3) { this.TraceAndLogException(ex3, itemStore, mtgMessage, i); throw new SkipException(ex3); } catch (RecurrenceException ex4) { this.TraceAndLogException(ex4, itemStore, mtgMessage, i); throw new SkipException(ex4); } } if (flag && i == 0) { string internetMessageId = mtgMessage.InternetMessageId; CalendarProcessing.ProcessingTracer.TraceDebug <object, string>((long)mtgMessage.GetHashCode(), "{0}: Attempting a third time to process message, but without the catch blocks: {1}", TraceContext.Get(), internetMessageId); this.DoProcessingLogic(itemStore, mtgMessage, ref originalCalItem, num, ref i); } } if (ObjectClass.IsMeetingCancellationSeries(mtgMessage.ClassName) || ObjectClass.IsMeetingRequestSeries(mtgMessage.ClassName)) { this.TryUnparkInstanceMessages(itemStore, mtgMessage.GetValueOrDefault <string>(MeetingMessageSchema.SeriesId), mtgMessage.GetValueOrDefault <int>(MeetingMessageSchema.SeriesSequenceNumber)); } if (performOmd) { this.OldMessageDeletion.PerformCleanUp(itemStore, mtgMessage, mailboxConfig, originalCalItem, duplicates); } }
// Token: 0x06000780 RID: 1920 RVA: 0x000351F4 File Offset: 0x000333F4 internal static bool GetCalendarItem(MeetingMessage mtgMessage, Trace tracer, ref CalendarItemBase originalCalItem, bool shouldDetectDuplicateIds, out IEnumerable <VersionedId> detectedDuplicatesIds) { Exception ex; return(CalendarAssistant.GetCalendarItem(mtgMessage, tracer, ref originalCalItem, shouldDetectDuplicateIds, out detectedDuplicatesIds, out ex)); }
// Token: 0x06000779 RID: 1913 RVA: 0x00034A3C File Offset: 0x00032C3C private void HandleMeetingMessage(MapiEvent mapiEvent, MailboxSession itemStore, StoreObject item, List <KeyValuePair <string, object> > customDataToLog) { if (item == null) { string objectClass = mapiEvent.ObjectClass; } else { string className = item.ClassName; } if (itemStore.GetDefaultFolderId(DefaultFolderType.Calendar) == null) { CalendarAssistant.GeneralTracer.TraceDebug((long)this.GetHashCode(), "{0}: Calendar folder does not exist. Skipping processing.", new object[] { TraceContext.Get() }); CalendarAssistantLog.LogEntry(itemStore, "Could not get default folder id", new object[0]); return; } if (item == null) { return; } MeetingMessage meetingMessage = item as MeetingMessage; if (meetingMessage != null && meetingMessage.IsArchiveMigratedMessage) { CalendarAssistant.CachedStateTracer.TraceDebug((long)this.GetHashCode(), "{0}: Skipping the processing of the meeting item as this is an EHA migration traffic.", new object[] { TraceContext.Get() }); return; } CachedState cachedState = AssistantsService.CachedObjectsList.GetCachedState(mapiEvent.MailboxGuid); bool flag = ResourceCheck.DetailedCheckForAutomatedBooking(mapiEvent, itemStore, item, cachedState); if (itemStore != null) { string legacyDn = itemStore.MailboxOwner.LegacyDn; } if (flag) { CalendarAssistant.CachedStateTracer.TraceDebug((long)this.GetHashCode(), "{0}: Updated the cachedState object, but this is a resource mailbox.", new object[] { TraceContext.Get() }); return; } cachedState.LockForRead(); CalendarConfiguration calendarConfiguration; try { calendarConfiguration = (cachedState.State[0] as CalendarConfiguration); } finally { cachedState.ReleaseReaderLock(); } if (calendarConfiguration.SkipProcessing) { CalendarAssistant.CachedStateTracer.TraceDebug((long)this.GetHashCode(), "{0}: SkipProcessing is set.", new object[] { TraceContext.Get() }); return; } if (CalendarAssistant.ShouldIgnoreMessage(itemStore, item.ParentId, meetingMessage)) { return; } string text = (string)Utils.SafeGetProperty(item, ItemSchema.InternetMessageId, "<null>"); if (CalendarAssistant.ShouldProcessMessageClass(mapiEvent) && CalendarAssistant.ShouldProcessSeriesMessages(mapiEvent, itemStore)) { bool flag2 = false; DateTime utcNow = DateTime.UtcNow; if (meetingMessage != null) { CalendarItemBase calendarItemBase = null; try { if (meetingMessage.IsDelegated()) { this.calProcessor.OldMessageDeletion.PerformCleanUp(itemStore, item, calendarConfiguration, calendarItemBase, null); } else { IEnumerable <VersionedId> duplicates; bool calendarItem = CalendarAssistant.GetCalendarItem(meetingMessage, CalendarAssistant.UnexpectedPathTracer, ref calendarItemBase, true, out duplicates); if (calendarItem) { this.calProcessor.ProcessMeetingMessage(itemStore, meetingMessage, ref calendarItemBase, calendarConfiguration, duplicates, true, itemStore.MailboxOwner.IsResource.Value); } } } catch (OccurrenceCrossingBoundaryException ex) { CalendarAssistant.ProcessingTracer.TraceDebug <object, VersionedId>((long)meetingMessage.GetHashCode(), "{0}: Found an overlapping occurrence while processing message ID={1}. Cleaning things up and retrying", TraceContext.Get(), meetingMessage.Id); StringBuilder stringBuilder = new StringBuilder(1024); stringBuilder.AppendFormat("Found an overlapping occurrence while processing message ID={0}.", meetingMessage.Id); if (ex.OccurrenceInfo == null) { CalendarAssistant.UnexpectedPathTracer.TraceError((long)this.GetHashCode(), "{0}: Unexpected: Handling OccurrenceCrossingBoundaryException, the OccurrenceInfo is null.", new object[] { TraceContext.Get() }); stringBuilder.Append("Unexpected: Handling OccurrenceCrossingBoundaryException, the OccurrenceInfo is null."); } else { VersionedId versionedId = ex.OccurrenceInfo.VersionedId; AggregateOperationResult aggregateOperationResult = meetingMessage.Session.Delete(DeleteItemFlags.MoveToDeletedItems, new StoreId[] { versionedId }); CalendarAssistant.ProcessingTracer.TraceDebug <object, OperationResult>((long)this.GetHashCode(), "{0}: Deleting the occurrence when handling an OccurrenceCrossingBoundaryException, returned:{1}", TraceContext.Get(), aggregateOperationResult.OperationResult); stringBuilder.AppendFormat("Deleting the occurrence when handling an OccurrenceCrossingBoundaryException, returned: {0}", aggregateOperationResult.OperationResult); } CalendarAssistantLog.LogEntry(itemStore, ex, false, stringBuilder.ToString(), new object[0]); } catch (CorruptDataException ex2) { CalendarAssistant.ProcessingTracer.TraceDebug <object, CorruptDataException>((long)this.GetHashCode(), "{0}: Got a corrupt message, exception data:{1}", TraceContext.Get(), ex2); CalendarAssistantLog.LogEntry(itemStore, ex2, false, "Got a corrupt message ID = {0}.", new object[] { meetingMessage.Id }); } finally { if (calendarItemBase != null) { calendarItemBase.Dispose(); calendarItemBase = null; } } flag2 = true; } else if (item is MeetingInquiryMessage) { MeetingInquiryMessage meetingInquiryMessage = (MeetingInquiryMessage)item; try { this.calProcessor.ProcessMeetingInquiryMessage(this.cvsGateway, itemStore, meetingInquiryMessage); } catch (CalendarVersionStoreNotPopulatedException ex3) { CalendarAssistant.ProcessingTracer.TraceWarning <object, CalendarVersionStoreNotPopulatedException>((long)this.GetHashCode(), "{0}: Failed to process an inquiry message, because the CVS is not populated yet. {1}", TraceContext.Get(), ex3); CalendarAssistantLog.LogEntry(itemStore, ex3, false, "Failed to process an inquiry message ID = {0}, because the CVS is not populated yet.", new object[] { meetingInquiryMessage.Id }); } this.calProcessor.OldMessageDeletion.DeleteMessage(itemStore, item); flag2 = true; } else { CalendarAssistant.UnexpectedPathTracer.TraceError((long)this.GetHashCode(), "{0}: Unexpected: Message class matched, but is not the correct object type. Ignoring message.", new object[] { TraceContext.Get() }); CalendarAssistantLog.LogEntry(itemStore, "Unexpected: Message class matched, but is not the correct object type. Ignoring message ID = {0}.", new object[] { item.Id }); } if (flag2) { TimeSpan timeSpan = DateTime.UtcNow.Subtract(utcNow); CalendarAssistantPerformanceCounters.LastCalAssistantProcessingTime.RawValue = (long)timeSpan.TotalMilliseconds; CalendarAssistantPerformanceCounters.AverageCalAssistantProcessingTime.IncrementBy((long)timeSpan.TotalMilliseconds); CalendarAssistantPerformanceCounters.AverageCalAssistantProcessingTimeBase.Increment(); CalendarAssistantPerformanceCounters.MeetingMessagesProcessed.Increment(); } CalendarAssistant.GeneralTracer.TraceDebug <object, string>((long)this.GetHashCode(), "{0}: Finished processing message. InternetMessgeID = {1}", TraceContext.Get(), text); CalendarAssistant.TracerPfd.TracePfd <int, object, string>((long)this.GetHashCode(), "PFD IWC {0} {1}: Finished processing message. InternetMessgeID = {2}", 21655, TraceContext.Get(), text); } }