private static bool TryGetSmsSyncDeviceLastSyncTime(SyncStateStorage syncStateStorage, E164Number smsSyncPhoneNumber, out ExDateTime lastSyncTime, out string deviceName)
 {
     lastSyncTime = ExDateTime.MinValue;
     deviceName   = null;
     using (CustomSyncState customSyncState = syncStateStorage.GetCustomSyncState(new GlobalSyncStateInfo
     {
         ReadOnly = true
     }, new PropertyDefinition[0]))
     {
         if (customSyncState == null)
         {
             return(false);
         }
         if (!customSyncState.GetData <BooleanData, bool>("DeviceEnableOutboundSMS", false))
         {
             return(false);
         }
         string data = customSyncState.GetData <StringData, string>("DevicePhoneNumber", null);
         if (string.IsNullOrEmpty(data))
         {
             return(false);
         }
         E164Number e164Number = null;
         if (!E164Number.TryParse(data, out e164Number))
         {
             return(false);
         }
         if (!e164Number.Equals(smsSyncPhoneNumber, true))
         {
             return(false);
         }
         deviceName = customSyncState.GetData <StringData, string>("DeviceFriendlyName", null);
     }
     lastSyncTime = syncStateStorage.CreationTime;
     using (CustomSyncState customSyncState2 = syncStateStorage.GetCustomSyncState(new SyncStatusSyncStateInfo
     {
         ReadOnly = true
     }, new PropertyDefinition[0]))
     {
         if (customSyncState2 != null)
         {
             lastSyncTime = customSyncState2.GetData <DateTimeData, ExDateTime>("LastSyncAttemptTime", ExDateTime.MinValue);
             if (ExDateTime.MinValue == lastSyncTime)
             {
                 lastSyncTime = customSyncState2.GetData <DateTimeData, ExDateTime>("LastSyncSuccessTime", syncStateStorage.CreationTime);
             }
         }
     }
     return(true);
 }
示例#2
0
        // Token: 0x0600038D RID: 909 RVA: 0x000154F8 File Offset: 0x000136F8
        public static AutdStatusData Load(SyncStateStorage syncStateStorage, bool readOnly, bool createIfMissing)
        {
            AutdStatusData autdStatusData = null;
            bool           flag           = false;

            try
            {
                autdStatusData = new AutdStatusData();
                AutdSyncStateInfo autdSyncStateInfo = new AutdSyncStateInfo();
                autdSyncStateInfo.ReadOnly         = readOnly;
                autdStatusData.autdStatusSyncState = syncStateStorage.GetCustomSyncState(autdSyncStateInfo, new PropertyDefinition[0]);
                if (autdStatusData.autdStatusSyncState == null)
                {
                    if (!createIfMissing)
                    {
                        return(null);
                    }
                    autdStatusData.autdStatusSyncState = syncStateStorage.CreateCustomSyncState(autdSyncStateInfo);
                }
                autdStatusData.dirty = false;
                flag = true;
            }
            finally
            {
                if (!flag && autdStatusData != null)
                {
                    autdStatusData.Dispose();
                    autdStatusData = null;
                }
            }
            return(autdStatusData);
        }
示例#3
0
        // Token: 0x06000CCE RID: 3278 RVA: 0x00044804 File Offset: 0x00042A04
        public static MeetingOrganizerSyncState LoadFromMailbox(MailboxSession mailboxSession, SyncStateStorage syncStateStorage, ProtocolLogger protocolLogger)
        {
            if (mailboxSession == null)
            {
                throw new ArgumentNullException("mailboxSession");
            }
            if (syncStateStorage == null)
            {
                throw new ArgumentNullException("syncStateStorage");
            }
            bool flag = false;
            MeetingOrganizerSyncState meetingOrganizerSyncState = null;
            CustomSyncState           customSyncState           = null;
            MeetingOrganizerSyncState result;

            try
            {
                MeetingOrganizerSyncStateInfo meetingOrganizerSyncStateInfo = new MeetingOrganizerSyncStateInfo();
                bool flag2 = false;
                ExTraceGlobals.FaultInjectionTracer.TraceTest <bool>(3104189757U, ref flag2);
                if (flag2)
                {
                    throw new CorruptSyncStateException(meetingOrganizerSyncStateInfo.UniqueName, new LocalizedString("FaultInjection"));
                }
                bool isDirty = false;
                customSyncState = syncStateStorage.GetCustomSyncState(meetingOrganizerSyncStateInfo, new PropertyDefinition[0]);
                if (customSyncState == null)
                {
                    customSyncState = syncStateStorage.CreateCustomSyncState(meetingOrganizerSyncStateInfo);
                    isDirty         = true;
                }
                else if (customSyncState.BackendVersion != null && customSyncState.BackendVersion.Value != customSyncState.Version)
                {
                    isDirty = true;
                }
                meetingOrganizerSyncState         = new MeetingOrganizerSyncState(customSyncState);
                meetingOrganizerSyncState.IsDirty = isDirty;
                flag   = true;
                result = meetingOrganizerSyncState;
            }
            finally
            {
                if (!flag)
                {
                    if (meetingOrganizerSyncState != null)
                    {
                        meetingOrganizerSyncState.Dispose();
                    }
                    else if (customSyncState != null)
                    {
                        customSyncState.Dispose();
                    }
                }
            }
            return(result);
        }
        // Token: 0x06000884 RID: 2180 RVA: 0x000323A8 File Offset: 0x000305A8
        public static bool FolderSyncRequired(SyncStateStorage syncStateStorage, HierarchySyncOperations folderHierarchyChanges, SyncState folderIdMappingSyncState = null)
        {
            bool flag = folderIdMappingSyncState == null;

            try
            {
                if (folderIdMappingSyncState == null)
                {
                    folderIdMappingSyncState = syncStateStorage.GetCustomSyncState(new FolderIdMappingSyncStateInfo(), new PropertyDefinition[0]);
                    if (folderIdMappingSyncState == null)
                    {
                        return(true);
                    }
                }
                FolderTree folderTree = (FolderTree)folderIdMappingSyncState[CustomStateDatumType.FullFolderTree];
                if (folderTree == null)
                {
                    return(true);
                }
                for (int i = 0; i < folderHierarchyChanges.Count; i++)
                {
                    HierarchySyncOperation hierarchySyncOperation = folderHierarchyChanges[i];
                    MailboxSyncItemId      folderId  = MailboxSyncItemId.CreateForNewItem(hierarchySyncOperation.ItemId);
                    MailboxSyncItemId      folderId2 = MailboxSyncItemId.CreateForNewItem(hierarchySyncOperation.ParentId);
                    if (!folderTree.Contains(folderId2))
                    {
                        return(true);
                    }
                    if (!folderTree.Contains(folderId))
                    {
                        if (!folderTree.IsHidden(folderId2))
                        {
                            return(true);
                        }
                    }
                    else if (!folderTree.IsHidden(folderId) || (folderTree.IsHiddenDueToParent(folderId) && !folderTree.IsHidden(folderId2)))
                    {
                        return(true);
                    }
                }
            }
            finally
            {
                if (flag && folderIdMappingSyncState != null)
                {
                    folderIdMappingSyncState.Dispose();
                }
            }
            return(false);
        }
        // Token: 0x06000AAA RID: 2730 RVA: 0x0003B168 File Offset: 0x00039368
        public static GlobalInfo LoadFromMailbox(MailboxSession mailboxSession, SyncStateStorage syncStateStorage, ProtocolLogger protocolLogger, out bool updateUserHasPartnership)
        {
            if (mailboxSession == null)
            {
                throw new ArgumentNullException("mailboxSession");
            }
            if (syncStateStorage == null)
            {
                throw new ArgumentNullException("syncStateStorage");
            }
            updateUserHasPartnership = false;
            CustomSyncState customSyncState         = null;
            GlobalInfo      globalInfo              = null;
            bool            isDirty                 = false;
            bool            hasNewSyncData          = false;
            bool            hasNewAutdData          = false;
            bool            isSyncStateJustUpgraded = false;
            bool            flag = false;
            GlobalInfo      result;

            try
            {
                GlobalSyncStateInfo syncStateInfo = new GlobalSyncStateInfo();
                customSyncState = syncStateStorage.GetCustomSyncState(syncStateInfo, GlobalInfo.ExtraGlobalInfoPropertiesToFetch);
                if (customSyncState == null)
                {
                    isDirty = true;
                    using (CustomSyncState customSyncState2 = syncStateStorage.GetCustomSyncState(new FolderIdMappingSyncStateInfo(), new PropertyDefinition[0]))
                    {
                        if (customSyncState2 == null)
                        {
                            updateUserHasPartnership = true;
                            syncStateStorage.DeleteAllSyncStates();
                        }
                    }
                    customSyncState = syncStateStorage.CreateCustomSyncState(syncStateInfo);
                    isDirty         = true;
                }
                else
                {
                    try
                    {
                        object obj = customSyncState.StoreObject.TryGetProperty(AirSyncStateSchema.LastSyncAttemptTime);
                        hasNewSyncData = (obj != null && !(obj is PropertyError));
                    }
                    catch (Exception arg)
                    {
                        AirSyncDiagnostics.TraceError <Exception>(ExTraceGlobals.RequestsTracer, null, "[GlobalInfo.LoadFromMailbox] Encountered exception when checking for new syncStatus properties.  Exception: {0}", arg);
                    }
                    try
                    {
                        object obj2 = customSyncState.StoreObject.TryGetProperty(AirSyncStateSchema.LastPingHeartbeatInterval);
                        hasNewAutdData = (obj2 != null && !(obj2 is PropertyError));
                    }
                    catch (Exception arg2)
                    {
                        AirSyncDiagnostics.TraceError <Exception>(ExTraceGlobals.RequestsTracer, null, "[GlobalInfo.LoadFromMailbox] Encountered exception when checking for new syncStatus properties.  Exception: {0}", arg2);
                    }
                    if (customSyncState.BackendVersion != null && customSyncState.BackendVersion.Value != customSyncState.Version)
                    {
                        isDirty = true;
                        isSyncStateJustUpgraded = true;
                        if (protocolLogger != null)
                        {
                            protocolLogger.SetValue(ProtocolLoggerData.Ssu, "2007");
                        }
                    }
                }
                globalInfo                         = new GlobalInfo(customSyncState);
                globalInfo.IsDirty                 = isDirty;
                globalInfo.HasNewSyncData          = hasNewSyncData;
                globalInfo.HasNewAutdData          = hasNewAutdData;
                globalInfo.IsSyncStateJustUpgraded = isSyncStateJustUpgraded;
                if (Command.CurrentCommand != null)
                {
                    globalInfo.WriteNewSyncData = Command.CurrentCommand.User.Features.IsEnabled(EasFeature.SyncStatusOnGlobalInfo);
                }
                flag   = true;
                result = globalInfo;
            }
            finally
            {
                if (!flag)
                {
                    if (globalInfo != null)
                    {
                        globalInfo.Dispose();
                    }
                    else if (customSyncState != null)
                    {
                        customSyncState.Dispose();
                    }
                }
            }
            return(result);
        }
        public override void OpenSyncState(bool autoLoadFilterAndSyncKey, SyncStateStorage syncStateStorage)
        {
            if (!(base.StoreSession is MailboxSession))
            {
                throw new InvalidOperationException();
            }
            RecipientInfoCacheSyncProviderFactory recipientInfoCacheSyncProviderFactory = (RecipientInfoCacheSyncProviderFactory)base.SyncProviderFactory;

            if (base.SyncKey != 0U || autoLoadFilterAndSyncKey)
            {
                base.SyncState = syncStateStorage.GetFolderSyncState(base.SyncProviderFactory, base.CollectionId);
                if (base.SyncState == null)
                {
                    if (autoLoadFilterAndSyncKey)
                    {
                        base.Status          = SyncBase.ErrorCodeStatus.InvalidSyncKey;
                        base.ResponseSyncKey = base.SyncKey;
                        throw new AirSyncPermanentException(false)
                              {
                                  ErrorStringForProtocolLogger = "NoSyncStateInRICacheSync"
                              };
                    }
                    using (CustomSyncState customSyncState = syncStateStorage.GetCustomSyncState(new FolderIdMappingSyncStateInfo(), new PropertyDefinition[0]))
                    {
                        if (customSyncState == null || customSyncState[CustomStateDatumType.IdMapping] == null)
                        {
                            base.Status = SyncBase.ErrorCodeStatus.InvalidCollection;
                            throw new AirSyncPermanentException(false)
                                  {
                                      ErrorStringForProtocolLogger = "BadFolderMapTreeInRICacheSync"
                                  };
                        }
                    }
                    base.Status          = SyncBase.ErrorCodeStatus.InvalidSyncKey;
                    base.ResponseSyncKey = base.SyncKey;
                    throw new AirSyncPermanentException(false)
                          {
                              ErrorStringForProtocolLogger = "Sk0ErrorInRICacheSync"
                          };
                }
                else
                {
                    base.CheckProtocolVersion();
                    if (autoLoadFilterAndSyncKey)
                    {
                        if (!base.SyncState.Contains(CustomStateDatumType.SyncKey))
                        {
                            base.Status          = SyncBase.ErrorCodeStatus.InvalidSyncKey;
                            base.ResponseSyncKey = base.SyncKey;
                            throw new AirSyncPermanentException(false)
                                  {
                                      ErrorStringForProtocolLogger = "NoSyncStateKeyInRICacheSync"
                                  };
                        }
                        base.SyncKey = ((UInt32Data)base.SyncState[CustomStateDatumType.SyncKey]).Data;
                        if (base.SyncState.Contains(CustomStateDatumType.RecoverySyncKey))
                        {
                            base.RecoverySyncKey = ((UInt32Data)base.SyncState[CustomStateDatumType.RecoverySyncKey]).Data;
                        }
                        base.FilterType = (AirSyncV25FilterTypes)base.SyncState.GetData <Int32Data, int>(CustomStateDatumType.FilterType, 0);
                        base.SyncState[CustomStateDatumType.MaxItems] = new Int32Data(base.MaxItems);
                    }
                }
            }
            if (base.SyncKey == 0U)
            {
                SyncState syncState = null;
                try
                {
                    syncState = syncStateStorage.GetCustomSyncState(new FolderIdMappingSyncStateInfo(), new PropertyDefinition[0]);
                    if ((FolderIdMapping)syncState[CustomStateDatumType.IdMapping] == null)
                    {
                        base.Status          = SyncBase.ErrorCodeStatus.ServerError;
                        base.ResponseSyncKey = 0U;
                        AirSyncDiagnostics.TraceError(ExTraceGlobals.RequestsTracer, this, "Id Mapping not created on SK0-returning ServerError on RI collection");
                        throw new AirSyncPermanentException(false)
                              {
                                  ErrorStringForProtocolLogger = "NoIdMappingInRICacheSync"
                              };
                    }
                }
                finally
                {
                    if (syncState != null)
                    {
                        syncState.Dispose();
                    }
                }
                syncStateStorage.DeleteFolderSyncState(base.CollectionId);
                base.SyncState = syncStateStorage.CreateFolderSyncState(base.SyncProviderFactory, base.CollectionId);
                base.SyncState.RegisterColdDataKey("IdMapping");
                base.SyncState.RegisterColdDataKey("CustomCalendarSyncFilter");
                base.SyncState[CustomStateDatumType.IdMapping] = new ItemIdMapping(base.CollectionId);
                base.ClassType = "RecipientInfoCache";
                base.SyncState[CustomStateDatumType.AirSyncClassType] = new ConstStringData(StaticStringPool.Instance.Intern(base.ClassType));
            }
            else
            {
                object obj = base.SyncState[CustomStateDatumType.AirSyncClassType];
                if (obj == null || string.IsNullOrEmpty(((ConstStringData)obj).Data))
                {
                    AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "ClassType for RI folder was null in sync state");
                    base.ClassType = "RecipientInfoCache";
                }
                else
                {
                    if (!string.Equals("RecipientInfoCache", ((ConstStringData)obj).Data, StringComparison.OrdinalIgnoreCase))
                    {
                        base.Status = SyncBase.ErrorCodeStatus.ObjectNotFound;
                        string text = string.Format("Invalid Class Type in RI sync state: {0}", ((ConstStringData)obj).Data);
                        AirSyncDiagnostics.TraceError(ExTraceGlobals.RequestsTracer, this, text);
                        throw new AirSyncPermanentException(StatusCode.Sync_InvalidSyncKey, new LocalizedString(text), false)
                              {
                                  ErrorStringForProtocolLogger = "BadClassStateInRICacheSync"
                              };
                    }
                    base.ClassType = ((ConstStringData)obj).Data;
                }
            }
            if (base.SyncState.CustomVersion != null && base.SyncState.CustomVersion.Value > 9)
            {
                throw new AirSyncPermanentException(HttpStatusCode.InternalServerError, StatusCode.SyncStateVersionInvalid, EASServerStrings.MismatchSyncStateError, true)
                      {
                          ErrorStringForProtocolLogger = "MismatchedSyncStateInRICacheSync"
                      };
            }
            base.SyncState[CustomStateDatumType.AirSyncProtocolVersion] = new Int32Data(base.ProtocolVersion);
        }