Ejemplo n.º 1
0
        // Token: 0x060009A1 RID: 2465 RVA: 0x00040844 File Offset: 0x0003EA44
        public static MailboxData UpdateCache(ref MailboxData mailboxData)
        {
            if (mailboxData == null)
            {
                throw new ArgumentNullException("mailboxData");
            }
            MailboxData mailboxData2 = null;

            using (MailboxData.CachedStateWriter cachedStateWriter = new MailboxData.CachedStateWriter(mailboxData.MailboxGuid))
            {
                mailboxData2 = cachedStateWriter.Get();
                if (mailboxData2 == null)
                {
                    mailboxData2 = mailboxData;
                    mailboxData  = null;
                }
                else
                {
                    using (mailboxData.CreateReadLock())
                    {
                        using (mailboxData2.CreateWriteLock())
                        {
                            mailboxData2.CopyExcludingActionsFrom(mailboxData);
                        }
                    }
                }
                cachedStateWriter.Set(mailboxData2);
            }
            return(mailboxData2);
        }
        // Token: 0x06000A39 RID: 2617 RVA: 0x00043718 File Offset: 0x00041918
        public bool IsEventInteresting(MapiEvent mapiEvent)
        {
            if (ObjectType.MAPI_MESSAGE != mapiEvent.ItemType)
            {
                return(false);
            }
            if (((MapiEventTypeFlags.ObjectCreated | MapiEventTypeFlags.ObjectModified | MapiEventTypeFlags.ObjectMoved | MapiEventTypeFlags.ObjectCopied) & mapiEvent.EventMask) == (MapiEventTypeFlags)0)
            {
                return(false);
            }
            if (!ObjectClass.IsSmsMessage(mapiEvent.ObjectClass))
            {
                return(false);
            }
            MailboxData fromCache = MailboxData.GetFromCache(mapiEvent.MailboxGuid);

            if (fromCache == null)
            {
                return(true);
            }
            StoreObjectId storeObjectId = null;

            using (fromCache.CreateReadLock())
            {
                storeObjectId = fromCache.DefaultOutboxFolderId;
            }
            if (storeObjectId == null)
            {
                return(false);
            }
            StoreObjectId objB  = (mapiEvent.ParentEntryId == null || mapiEvent.ParentEntryId.Length == 0) ? null : StoreObjectId.FromProviderSpecificId(mapiEvent.ParentEntryId);
            StoreObjectId objB2 = (mapiEvent.OldParentEntryId == null || mapiEvent.OldParentEntryId.Length == 0) ? null : StoreObjectId.FromProviderSpecificId(mapiEvent.OldParentEntryId);

            return((((MapiEventTypeFlags.ObjectCreated | MapiEventTypeFlags.ObjectModified | MapiEventTypeFlags.ObjectCopied) & mapiEvent.EventMask) == (MapiEventTypeFlags)0 || object.Equals(storeObjectId, objB)) && ((MapiEventTypeFlags.ObjectMoved & mapiEvent.EventMask) == (MapiEventTypeFlags)0 || object.Equals(storeObjectId, objB2) || object.Equals(storeObjectId, objB)));
        }
Ejemplo n.º 3
0
 // Token: 0x060009E3 RID: 2531 RVA: 0x00041404 File Offset: 0x0003F604
 public bool IsEventInteresting(MapiEvent mapiEvent)
 {
     if (this.IsMailboxCreatedOrConnected(mapiEvent) || this.IsMailboxDeletedOrDisconnected(mapiEvent))
     {
         return(true);
     }
     if (ObjectType.MAPI_MESSAGE != mapiEvent.ItemType)
     {
         return(false);
     }
     if (this.OwaUserOptionConfigurationObjectClass.Equals(mapiEvent.ObjectClass, StringComparison.InvariantCultureIgnoreCase) || this.TextMessagingAccountConfigurationObjectClass.Equals(mapiEvent.ObjectClass, StringComparison.InvariantCultureIgnoreCase) || this.TextNotificationConfigurationObjectClass.Equals(mapiEvent.ObjectClass, StringComparison.InvariantCultureIgnoreCase) || this.VoiceNotificationConfigurationObjectClass.Equals(mapiEvent.ObjectClass, StringComparison.InvariantCultureIgnoreCase))
     {
         return(true);
     }
     if (this.WorkingHoursConfigurationObjectClass.Equals(mapiEvent.ObjectClass, StringComparison.InvariantCultureIgnoreCase))
     {
         MailboxData fromCache = MailboxData.GetFromCache(mapiEvent.MailboxGuid);
         if (fromCache == null || fromCache.DefaultCalendarFolderId == null)
         {
             return(true);
         }
         using (fromCache.CreateReadLock())
         {
             if (object.Equals(StoreObjectId.DummyId, fromCache.DefaultCalendarFolderId))
             {
                 return(true);
             }
             return(ArrayComparer <byte> .Comparer.Equals(mapiEvent.ParentEntryId, fromCache.DefaultCalendarFolderId.ProviderLevelItemId));
         }
         return(false);
     }
     return(false);
 }
Ejemplo n.º 4
0
        // Token: 0x06000988 RID: 2440 RVA: 0x0003FF74 File Offset: 0x0003E174
        private static void UpdateCacheAndInitiateEmittings(ref MailboxData mailboxData, ExDateTime userNow)
        {
            MailboxData mailboxData2 = MailboxData.UpdateCache(ref mailboxData);

            using (mailboxData2.CreateReadLock())
            {
                using (mailboxData2.Actions.SyncObj.CreateWriteLock())
                {
                    CalendarNotificationInitiator.InitiateEmittingReminder(userNow, mailboxData2);
                    CalendarNotificationInitiator.InitiateEmittingSummary(userNow, mailboxData2);
                }
            }
        }
Ejemplo n.º 5
0
 // Token: 0x06000987 RID: 2439 RVA: 0x0003FE34 File Offset: 0x0003E034
 private static void NotificationStillEnabled(UserSettings settings, InfoFromUserMailboxSession info)
 {
     try
     {
         ExDateTime  userNow     = settings.TimeZone.ExTimeZone.ConvertDateTime(ExDateTime.Now);
         MailboxData mailboxData = MailboxData.CreateFromUserSettings(settings, info);
         if (mailboxData != null)
         {
             try
             {
                 MailboxData fromCache = MailboxData.GetFromCache(mailboxData.MailboxGuid);
                 if (fromCache == null)
                 {
                     CalendarNotificationInitiator.EnableUser(ref mailboxData, userNow);
                     return;
                 }
                 if (Utils.AreInterestedFieldsEqual(mailboxData.Settings, fromCache.Settings))
                 {
                     return;
                 }
                 using (fromCache.CreateReadLock())
                 {
                     using (fromCache.Actions.SyncObj.CreateWriteLock())
                     {
                         CalendarNotificationInitiator.StopEmittingReminder(fromCache);
                         CalendarNotificationInitiator.StopEmittingSummary(fromCache);
                     }
                 }
                 CalendarNotificationInitiator.UpdateCacheAndInitiateEmittings(ref mailboxData, userNow);
             }
             finally
             {
                 if (mailboxData != null)
                 {
                     mailboxData.Dispose();
                     mailboxData = null;
                 }
             }
         }
         ExTraceGlobals.AssistantTracer.TraceDebug <string>((long)typeof(CalendarNotificationInitiator).GetHashCode(), "notif changed, user: {0}", settings.LegacyDN);
     }
     catch (Exception ex)
     {
         if (!CalendarNotificationAssistant.TryHandleException((long)typeof(CalendarNotificationInitiator).GetHashCode(), "handling changing", settings.LegacyDN, ex))
         {
             throw;
         }
     }
 }
        // Token: 0x0600091C RID: 2332 RVA: 0x0003D638 File Offset: 0x0003B838
        public bool IsEventInteresting(MapiEvent mapiEvent)
        {
            if (ObjectType.MAPI_MESSAGE != mapiEvent.ItemType)
            {
                return(false);
            }
            bool flag = ObjectClass.IsCalendarItemCalendarItemOccurrenceOrRecurrenceException(mapiEvent.ObjectClass);

            if (!flag && ((MapiEventTypeFlags.NewMail & mapiEvent.EventMask) == (MapiEventTypeFlags)0 || (!ObjectClass.IsMeetingRequest(mapiEvent.ObjectClass) && !ObjectClass.IsMeetingCancellation(mapiEvent.ObjectClass))))
            {
                return(false);
            }
            MailboxData fromCache = MailboxData.GetFromCache(mapiEvent.MailboxGuid);

            if (fromCache == null)
            {
                return(false);
            }
            StoreObjectId storeObjectId = null;

            using (fromCache.CreateReadLock())
            {
                if (!NotificationFactories.Instance.IsInterestedInCalendarChangeEvent(fromCache.Settings))
                {
                    ExTraceGlobals.AssistantTracer.TraceDebug <string>((long)this.GetHashCode(), "Calendar change event is uninteresting to {0}", fromCache.Settings.LegacyDN);
                    return(false);
                }
                storeObjectId = fromCache.DefaultCalendarFolderId;
                if (storeObjectId == null)
                {
                    return(false);
                }
            }
            if (flag)
            {
                if (((MapiEventTypeFlags.ObjectCreated | MapiEventTypeFlags.ObjectDeleted | MapiEventTypeFlags.ObjectModified | MapiEventTypeFlags.ObjectCopied) & mapiEvent.EventMask) != (MapiEventTypeFlags)0 && !object.Equals(storeObjectId, StoreObjectId.FromProviderSpecificId(mapiEvent.ParentEntryId)))
                {
                    return(false);
                }
                if ((MapiEventTypeFlags.ObjectMoved & mapiEvent.EventMask) != (MapiEventTypeFlags)0 && !object.Equals(storeObjectId, StoreObjectId.FromProviderSpecificId(mapiEvent.ParentEntryId)) && !object.Equals(storeObjectId, StoreObjectId.FromProviderSpecificId(mapiEvent.OldParentEntryId)))
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 7
0
 // Token: 0x06000989 RID: 2441 RVA: 0x0003FFE4 File Offset: 0x0003E1E4
 private static void DisableUser(UserSettings settings, Guid mailboxGuid)
 {
     try
     {
         MailboxData mailboxData = MailboxData.CreateFromUserSettings(settings);
         if (mailboxData != null)
         {
             try
             {
                 MailboxData mailboxData2 = MailboxData.UpdateCache(ref mailboxData);
                 using (mailboxData2.CreateReadLock())
                 {
                     using (mailboxData2.Actions.SyncObj.CreateWriteLock())
                     {
                         CalendarNotificationInitiator.StopAll(mailboxData2);
                     }
                 }
             }
             finally
             {
                 if (mailboxData != null)
                 {
                     mailboxData.Dispose();
                     mailboxData = null;
                 }
             }
         }
         ExTraceGlobals.AssistantTracer.TraceDebug <string>((long)typeof(CalendarNotificationInitiator).GetHashCode(), "notif disabled, user: {0}", settings.LegacyDN);
     }
     catch (Exception ex)
     {
         if (!CalendarNotificationAssistant.TryHandleException((long)typeof(CalendarNotificationInitiator).GetHashCode(), "handling diabling", settings.LegacyDN, ex))
         {
             throw;
         }
     }
 }
        // Token: 0x06000926 RID: 2342 RVA: 0x0003DDB4 File Offset: 0x0003BFB4
        internal void HandleEvent(MapiEvent mapiEvent, MailboxSession itemStore, StoreObject item)
        {
            MailboxData fromCache = MailboxData.GetFromCache(mapiEvent.MailboxGuid);

            if (fromCache == null)
            {
                return;
            }
            using (fromCache.CreateReadLock())
            {
                ExDateTime eventTime = new ExDateTime(fromCache.Settings.TimeZone.ExTimeZone, mapiEvent.CreateTime);
                try
                {
                    if (ObjectClass.IsMeetingMessage(mapiEvent.ObjectClass))
                    {
                        CalendarChangeProcessor.HandleMeetingEvent(eventTime, fromCache, mapiEvent, itemStore, item);
                    }
                    else if (ObjectClass.IsCalendarItemCalendarItemOccurrenceOrRecurrenceException(mapiEvent.ObjectClass))
                    {
                        CalendarChangeProcessor.HandleCalendarEvent(eventTime, fromCache, mapiEvent, itemStore, item);
                    }
                    else
                    {
                        ExTraceGlobals.AssistantTracer.TraceDebug <IExchangePrincipal, MapiEvent>((long)this.GetHashCode(), "why runs to here?! unhandled event for user {0}, event: {1}", itemStore.MailboxOwner, mapiEvent);
                    }
                }
                catch (ConnectionFailedTransientException arg)
                {
                    ExTraceGlobals.AssistantTracer.TraceDebug <IExchangePrincipal, MapiEvent, ConnectionFailedTransientException>((long)this.GetHashCode(), "Exception is caught for user {0} when processing event: {1}\n{2}", itemStore.MailboxOwner, mapiEvent, arg);
                }
                catch (AdUserNotFoundException arg2)
                {
                    ExTraceGlobals.AssistantTracer.TraceDebug <IExchangePrincipal, MapiEvent, AdUserNotFoundException>((long)this.GetHashCode(), "Exception is caught for user {0} when processing event: {1}\n{2}", itemStore.MailboxOwner, mapiEvent, arg2);
                }
            }
        }
Ejemplo n.º 9
0
        // Token: 0x060008F8 RID: 2296 RVA: 0x0003C90C File Offset: 0x0003AB0C
        private void InitializeUserSettings(long cookie)
        {
            SystemMailbox instance = SystemMailbox.GetInstance(base.Context);

            if (!instance.IsValid())
            {
                this.ReloadSystemMailbox(cookie, instance);
            }
            Dictionary <string, UserSettings> allCalendarNotificationUsers = SystemMailbox.GetInstance(base.Context).GetAllCalendarNotificationUsers();

            foreach (KeyValuePair <string, UserSettings> keyValuePair in allCalendarNotificationUsers)
            {
                UserSettings value = keyValuePair.Value;
                if (!base.ShouldContinue(cookie))
                {
                    break;
                }
                if (value.Voice != null || value.Text != null)
                {
                    MailboxData mailboxData = null;
                    try
                    {
                        mailboxData = MailboxData.CreateFromUserSettings(value);
                        if (mailboxData != null)
                        {
                            if (!base.ShouldContinue(cookie))
                            {
                                break;
                            }
                            CalendarNotificationInitiator.CountInMailbox(mailboxData.DatabaseGuid, mailboxData.MailboxGuid);
                            ExDateTime  now          = value.TimeZone.ExTimeZone.ConvertDateTime(base.ExpectedTime);
                            MailboxData mailboxData2 = null;
                            using (mailboxData.CreateReadLock())
                            {
                                mailboxData2 = MailboxData.UpdateCache(ref mailboxData);
                            }
                            using (mailboxData2.CreateReadLock())
                            {
                                using (mailboxData2.Actions.SyncObj.CreateWriteLock())
                                {
                                    CalendarNotificationInitiator.InitiateEmittingReminder(now, mailboxData2);
                                    CalendarNotificationInitiator.InitiateEmittingSummary(now, mailboxData2);
                                }
                            }
                            ExTraceGlobals.AssistantTracer.TraceDebug <string>((long)this.GetHashCode(), "notif initialized, user: {0}", value.LegacyDN);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (!CalendarNotificationAssistant.TryHandleException((long)this.GetHashCode(), "initiating", value.LegacyDN, ex))
                        {
                            throw;
                        }
                    }
                    finally
                    {
                        if (mailboxData != null)
                        {
                            mailboxData.Dispose();
                            mailboxData = null;
                        }
                    }
                }
            }
        }