// Token: 0x060004A2 RID: 1186 RVA: 0x00021FA8 File Offset: 0x000201A8
        public bool IsEventInteresting(MapiEvent mapiEvent)
        {
            ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "MapiEvent is dispatched: {0}", mapiEvent);
            if (!this.IsEventRelevant(mapiEvent))
            {
                return(false);
            }
            CachedState cachedState = AssistantsService.CachedObjectsList.GetCachedState(mapiEvent.MailboxGuid);
            UserRetentionPolicyCache userRetentionPolicyCache = RetentionPolicyCheck.QuickCheckForRetentionPolicy(mapiEvent, cachedState);

            if (userRetentionPolicyCache == null || userRetentionPolicyCache.UnderRetentionPolicy)
            {
                bool flag = RetentionPolicyCheck.IsEventConfigChange(mapiEvent);
                if (flag)
                {
                    RetentionPolicyCheck.UpdateStateForPendingFaiEvent(mapiEvent.EventCounter, cachedState);
                    ElcEventBasedAssistant.Tracer.TraceDebug <object, MapiEvent>((long)this.GetHashCode(), "{0}: this event is interesting because it is a change to our FAI: {1}", TraceContext.Get(), mapiEvent);
                    return(true);
                }
                if (RetentionPolicyCheck.IsAutoTagFai(mapiEvent))
                {
                    ElcEventBasedAssistant.Tracer.TraceDebug <object, MapiEvent>((long)this.GetHashCode(), "{0}: this event is interesting because it is a change to an Autotag FAI: {1}", TraceContext.Get(), mapiEvent);
                    return(true);
                }
                MapiEventTypeFlags mapiEventTypeFlags = MapiEventTypeFlags.ObjectCreated | MapiEventTypeFlags.ObjectModified | MapiEventTypeFlags.ObjectMoved | MapiEventTypeFlags.ObjectCopied;
                if ((mapiEvent.EventMask & mapiEventTypeFlags) != (MapiEventTypeFlags)0)
                {
                    if (mapiEvent.ClientType == MapiEventClientTypes.Transport && userRetentionPolicyCache != null && !this.InSentItems(userRetentionPolicyCache, mapiEvent))
                    {
                        ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Event is from transport and item not in SentItems. Ignoring from IsEventInteresting. Mapievent: {0}", mapiEvent);
                        return(false);
                    }
                    if (userRetentionPolicyCache != null && !this.IsEventOnRelevantFolder(userRetentionPolicyCache, mapiEvent))
                    {
                        return(false);
                    }
                    if (userRetentionPolicyCache != null && TagAssistantHelper.IsConflictableItem(mapiEvent.ObjectClass, mapiEvent.ParentEntryId, userRetentionPolicyCache.DeletedItemsId))
                    {
                        return(false);
                    }
                    MapiEventTypeFlags mapiEventTypeFlags2 = MapiEventTypeFlags.ObjectMoved | MapiEventTypeFlags.ObjectCopied;
                    if (mapiEvent.ItemType == ObjectType.MAPI_FOLDER && (mapiEvent.EventMask & mapiEventTypeFlags2) != (MapiEventTypeFlags)0)
                    {
                        ElcEventBasedAssistant.Tracer.TraceDebug <object, MapiEvent>((long)this.GetHashCode(), "{0}: this event is interesting because is a moved folder: {1}", TraceContext.Get(), mapiEvent);
                        return(true);
                    }
                    if (mapiEvent.ItemType == ObjectType.MAPI_MESSAGE)
                    {
                        ElcEventBasedAssistant.Tracer.TraceDebug <object, MapiEvent>((long)this.GetHashCode(), "{0}: this event is interesting because is a message: {1}", TraceContext.Get(), mapiEvent);
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 2
0
        // Token: 0x060001E0 RID: 480 RVA: 0x00009D48 File Offset: 0x00007F48
        public EventController(DatabaseInfo databaseInfo, EventBasedAssistantCollection assistants, PoisonEventControl poisonControl, PerformanceCountersPerDatabaseInstance databaseCounters, ThrottleGovernor serverGovernor, MapiEventTypeFlags moreEvents)
        {
            this.databaseInfo     = databaseInfo;
            this.databaseCounters = databaseCounters;
            this.assistants       = assistants;
            this.shutdownState    = 0;
            this.poisonControl    = poisonControl;
            MapiEventTypeFlags mapiEventTypeFlags = this.assistants.EventMask | moreEvents;

            this.filter      = (((MapiEventTypeFlags)(-1) == mapiEventTypeFlags) ? null : Restriction.BitMaskNonZero(PropTag.EventMask, (int)mapiEventTypeFlags));
            this.governor    = new DatabaseGovernor("event processing on '" + databaseInfo.DisplayName + "'", serverGovernor, new Throttle("EventDatabase", serverGovernor.Throttle.OpenThrottleValue, serverGovernor.Throttle));
            this.eventAccess = EventAccess.Create(this.DatabaseInfo, this.assistants);
        }
Exemplo n.º 3
0
 private static bool HasFreeBusyChanged(string messageClass, MapiEventTypeFlags mapiEventType, MapiExtendedEventFlags mapiExtendedEventFlags)
 {
     if (messageClass == "IPM.Appointment")
     {
         if (mapiEventType == MapiEventTypeFlags.ObjectModified)
         {
             bool flag = (mapiExtendedEventFlags & MapiExtendedEventFlags.AppointmentFreeBusyNotModified) != MapiExtendedEventFlags.AppointmentFreeBusyNotModified;
             if (flag)
             {
                 return(true);
             }
             flag = ((mapiExtendedEventFlags & MapiExtendedEventFlags.AppointmentTimeNotModified) != MapiExtendedEventFlags.AppointmentTimeNotModified);
             if (flag)
             {
                 return(true);
             }
         }
         else if (mapiEventType == MapiEventTypeFlags.ObjectCreated || mapiEventType == MapiEventTypeFlags.ObjectDeleted || mapiEventType == MapiEventTypeFlags.ObjectMoved)
         {
             return(true);
         }
     }
     return(false);
 }
        // Token: 0x060004A4 RID: 1188 RVA: 0x00022330 File Offset: 0x00020530
        private bool IsEventRelevant(MapiEvent mapiEvent)
        {
            if ((mapiEvent.ExtendedEventFlags & MapiExtendedEventFlags.NonIPMFolder) == MapiExtendedEventFlags.NonIPMFolder)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Non IPM Folder events are not relevant. MapiEvent: {0}", mapiEvent);
                return(false);
            }
            if ((mapiEvent.EventFlags & MapiEventFlags.SearchFolder) == MapiEventFlags.SearchFolder)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "SearchFolder events are not relevant. MapiEvent: {0}", mapiEvent);
                return(false);
            }
            if ((mapiEvent.EventFlags & MapiEventFlags.ContentOnly) == MapiEventFlags.ContentOnly)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "ContentOnly events are not relevant. MapiEvent: {0}", mapiEvent);
                return(false);
            }
            if (ObjectClass.IsCalendarItem(mapiEvent.ObjectClass) || ObjectClass.IsTask(mapiEvent.ObjectClass))
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Calendar and task items are not relevent. Mapievent: {0}", mapiEvent);
                return(false);
            }
            if (mapiEvent.ClientType == MapiEventClientTypes.Transport)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Skip events from Transport. Mapievent: {0}", mapiEvent);
                return(false);
            }
            MapiEventTypeFlags mapiEventTypeFlags = MapiEventTypeFlags.ObjectCreated | MapiEventTypeFlags.ObjectModified | MapiEventTypeFlags.ObjectMoved | MapiEventTypeFlags.ObjectCopied;

            if ((mapiEvent.EventMask & mapiEventTypeFlags) == (MapiEventTypeFlags)0)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "No interesting MapiEventTypeFlags. Skip. Mapievent: {0}", mapiEvent);
                return(false);
            }
            if ((mapiEvent.EventMask & MapiEventTypeFlags.ObjectModified) != (MapiEventTypeFlags)0 && (mapiEvent.EventFlags & MapiEventFlags.FolderAssociated) == MapiEventFlags.None && mapiEvent.ItemType == ObjectType.MAPI_MESSAGE && (mapiEvent.ExtendedEventFlags & MapiExtendedEventFlags.RetentionTagModified) == MapiExtendedEventFlags.None && (mapiEvent.ExtendedEventFlags & MapiExtendedEventFlags.RetentionPropertiesModified) == MapiExtendedEventFlags.None)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Item was modified. Either the property modified is not relevent to us . Mapievent: {0}", mapiEvent);
                return(false);
            }
            if (mapiEvent.ClientType == MapiEventClientTypes.TimeBasedAssistants && !RetentionPolicyCheck.IsEventConfigChange(mapiEvent) && !RetentionPolicyCheck.IsAutoTagFai(mapiEvent))
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Event is from Time Based Assistant and not FAI related. Ignoring. Mapievent: {0}", mapiEvent);
                return(false);
            }
            if (mapiEvent.ClientType == MapiEventClientTypes.EventBasedAssistants)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Event is from this assistant. Ignoring. Mapievent: {0}", mapiEvent);
                return(false);
            }
            if ((mapiEvent.EventFlags & MapiEventFlags.FolderAssociated) != MapiEventFlags.None && !RetentionPolicyCheck.IsEventConfigChange(mapiEvent) && !RetentionPolicyCheck.IsAutoTagFai(mapiEvent))
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "FAI we don't care about. Ignoring. Mapievent: {0}", mapiEvent);
                return(false);
            }
            if (mapiEvent.ItemType != ObjectType.MAPI_MESSAGE && mapiEvent.ItemType != ObjectType.MAPI_FOLDER)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Not a message or a folder. Ignoring. Mapievent: {0}", mapiEvent);
                return(false);
            }
            if ((mapiEvent.EventMask & MapiEventTypeFlags.ObjectDeleted) != (MapiEventTypeFlags)0)
            {
                ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "Item Deleted. Ignoring. Mapievent: {0}", mapiEvent);
                return(false);
            }
            ElcEventBasedAssistant.Tracer.TraceDebug <MapiEvent>((long)this.GetHashCode(), "IsEventRelevant is true. Mapievent: {0}", mapiEvent);
            return(true);
        }
Exemplo n.º 5
0
 // Token: 0x06000577 RID: 1399 RVA: 0x0001B49E File Offset: 0x0001969E
 internal static bool Contains(this MapiEventTypeFlags eventMask, MapiEventTypeFlags eventFlag)
 {
     return((eventMask & eventFlag) != (MapiEventTypeFlags)0);
 }
Exemplo n.º 6
0
        internal bool IsEventRelevant(Guid mailboxGuid, MapiEventTypeFlags mapiEventType, ObjectType mapiObjectType, MapiEventFlags mapiEventFlags, MapiExtendedEventFlags mapiExtendedEventFlags, byte[] entryId, byte[] parentEntryId, byte[] oldParentEntryId, string messageClass, string containerClass)
        {
            EnumValidator.AssertValid <ObjectType>(mapiObjectType);
            EnumValidator.AssertValid <MapiEventTypeFlags>(mapiEventType);
            if (mailboxGuid != this.mailboxGuid)
            {
                return(false);
            }
            if (this.condition.EventType != EventType.None && ((this.condition.EventType & EventType.FreeBusyChanged) != EventType.FreeBusyChanged || !EventSink.HasFreeBusyChanged(messageClass, mapiEventType, mapiExtendedEventFlags)) && (mapiEventType & this.mapiEventTypes) == (MapiEventTypeFlags)0)
            {
                return(false);
            }
            if (this.condition.ObjectType != EventObjectType.None)
            {
                switch (this.condition.ObjectType)
                {
                case EventObjectType.Item:
                    if (mapiObjectType != ObjectType.MAPI_MESSAGE)
                    {
                        return(false);
                    }
                    break;

                case EventObjectType.Folder:
                    if (mapiObjectType != ObjectType.MAPI_FOLDER)
                    {
                        return(false);
                    }
                    break;
                }
            }
            if (this.condition.EventSubtree != EventSubtreeFlag.All)
            {
                if (this.condition.EventSubtree == EventSubtreeFlag.NonIPMSubtree && (mapiExtendedEventFlags & MapiExtendedEventFlags.NonIPMFolder) != MapiExtendedEventFlags.NonIPMFolder)
                {
                    return(false);
                }
                if (this.condition.EventSubtree == EventSubtreeFlag.IPMSubtree && (mapiExtendedEventFlags & (MapiExtendedEventFlags)(-2147483648)) != (MapiExtendedEventFlags)(-2147483648))
                {
                    return(false);
                }
            }
            if (this.condition.EventFlags != EventFlags.None)
            {
                EventFlags eventFlags = ((mapiExtendedEventFlags & MapiExtendedEventFlags.NoReminderPropertyModified) == MapiExtendedEventFlags.NoReminderPropertyModified) ? EventFlags.None : EventFlags.ReminderPropertiesModified;
                if ((mapiExtendedEventFlags & MapiExtendedEventFlags.TimerEventFired) == MapiExtendedEventFlags.TimerEventFired)
                {
                    eventFlags |= EventFlags.TimerEventFired;
                }
                if ((eventFlags & this.condition.EventFlags) != this.condition.EventFlags)
                {
                    return(false);
                }
            }
            if ((mapiEventFlags & MapiEventFlags.SoftDeleted) == MapiEventFlags.SoftDeleted)
            {
                return(false);
            }
            if (this.parentEntryIds.Length != 0 || this.objectEntryIds.Length != 0)
            {
                bool flag  = false;
                bool flag2 = (mapiEventType & MapiEventTypeFlags.ObjectMoved) == MapiEventTypeFlags.ObjectMoved;
                IEqualityComparer <byte[]> comparer = ArrayComparer <byte> .Comparer;
                foreach (byte[] x in this.parentEntryIds)
                {
                    if (comparer.Equals(x, parentEntryId))
                    {
                        flag = true;
                        break;
                    }
                    if (flag2 && comparer.Equals(x, oldParentEntryId))
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    foreach (byte[] x2 in this.objectEntryIds)
                    {
                        if (comparer.Equals(x2, entryId))
                        {
                            flag = true;
                            break;
                        }
                    }
                    if (!flag)
                    {
                        return(false);
                    }
                }
            }
            if (this.considerClassNames)
            {
                string text;
                if (mapiObjectType == ObjectType.MAPI_FOLDER)
                {
                    text = containerClass;
                }
                else
                {
                    text = messageClass;
                }
                foreach (string b in this.expectedClassNameExactMatches)
                {
                    if (text == b)
                    {
                        return(true);
                    }
                }
                foreach (string value in this.expectedClassNamePrefixes)
                {
                    if (text.StartsWith(value))
                    {
                        return(true);
                    }
                }
                return(false);
            }
            return(true);
        }
        // Token: 0x060015EB RID: 5611 RVA: 0x0007B4C4 File Offset: 0x000796C4
        public bool IsEventInteresting(IMapiEvent mapiEvent)
        {
            MapiEventTypeFlags mapiEventTypeFlags = MapiEventTypeFlags.MailboxMoveSucceeded;

            return((mapiEvent.EventMask & mapiEventTypeFlags) == mapiEventTypeFlags);
        }
Exemplo n.º 8
0
 // Token: 0x060000C9 RID: 201 RVA: 0x00005386 File Offset: 0x00003586
 internal static bool IsEventOfType(IMapiEvent mapiEvent, MapiEventTypeFlags eventType)
 {
     return((mapiEvent.EventMask & eventType) == eventType);
 }