// Token: 0x060009C1 RID: 2497 RVA: 0x00039668 File Offset: 0x00037868
 private void LoadSyncState()
 {
     this.folderIdMappingSyncState = base.SyncStateStorage.GetCustomSyncState(new FolderIdMappingSyncStateInfo(), new PropertyDefinition[0]);
     if (this.folderIdMappingSyncState == null || this.folderIdMappingSyncState[CustomStateDatumType.IdMapping] == null)
     {
         CustomSyncState customSyncState = base.SyncStateStorage.GetCustomSyncState(new GlobalSyncStateInfo(), new PropertyDefinition[0]);
         if (customSyncState == null)
         {
             base.SyncStateStorage.DeleteAllSyncStates();
         }
         else
         {
             customSyncState.Dispose();
             using (AutdStatusData autdStatusData = AutdStatusData.Load(base.SyncStateStorage, true, false))
             {
                 if (autdStatusData != null)
                 {
                     base.SyncStateStorage.DeleteAllSyncStates();
                 }
             }
         }
         this.folderIdMappingSyncState = base.SyncStateStorage.CreateCustomSyncState(new FolderIdMappingSyncStateInfo());
         this.folderIdMappingSyncState[CustomStateDatumType.IdMapping]              = new FolderIdMapping();
         this.folderIdMappingSyncState[CustomStateDatumType.FullFolderTree]         = new FolderTree();
         this.folderIdMappingSyncState[CustomStateDatumType.RecoveryFullFolderTree] = this.folderIdMappingSyncState[CustomStateDatumType.FullFolderTree];
     }
 }
Exemple #2
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: 0x06000299 RID: 665 RVA: 0x0000EF00 File Offset: 0x0000D100
        public static AirSyncRootInfo LoadFromMailbox(MailboxSession mailboxSession, SyncStateRootStorage syncStateRootStorage)
        {
            ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession);
            ArgumentValidator.ThrowIfNull("syncStateRootStorage", syncStateRootStorage);
            AirSyncRootInfo airSyncRootInfo = null;
            CustomSyncState customSyncState = null;
            bool            flag            = false;
            AirSyncRootInfo result;

            try
            {
                bool isDirty = false;
                AirSyncRootSyncStateInfo syncStateInfo = new AirSyncRootSyncStateInfo();
                customSyncState = syncStateRootStorage.GetCustomSyncState(syncStateInfo);
                if (customSyncState == null)
                {
                    AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, null, "[AirSyncRootInfo.LoadFromMailbox] Had to create root sync state.");
                    customSyncState = syncStateRootStorage.CreateCustomSyncState(syncStateInfo);
                    isDirty         = true;
                }
                airSyncRootInfo         = new AirSyncRootInfo(customSyncState);
                airSyncRootInfo.IsDirty = isDirty;
                flag   = true;
                result = airSyncRootInfo;
            }
            finally
            {
                if (!flag)
                {
                    if (airSyncRootInfo != null)
                    {
                        airSyncRootInfo.Dispose();
                    }
                    else if (customSyncState != null)
                    {
                        customSyncState.Dispose();
                    }
                }
            }
            return(result);
        }
        // Token: 0x0600088E RID: 2190 RVA: 0x00032DC8 File Offset: 0x00030FC8
        private void LoadSyncState(int syncKey)
        {
            FolderIdMappingSyncStateInfo syncStateInfo = new FolderIdMappingSyncStateInfo();

            if (syncKey == 0)
            {
                base.SendServerUpgradeHeader  = true;
                this.folderIdMappingSyncState = base.SyncStateStorage.GetCustomSyncState(syncStateInfo, new PropertyDefinition[0]);
                if (this.folderIdMappingSyncState == null || this.folderIdMappingSyncState[CustomStateDatumType.IdMapping] == null)
                {
                    CustomSyncState customSyncState = base.SyncStateStorage.GetCustomSyncState(new GlobalSyncStateInfo(), new PropertyDefinition[0]);
                    if (customSyncState == null)
                    {
                        AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "Could not find policy sync state.  Deleting all sync states.");
                        base.SyncStateStorage.DeleteAllSyncStates();
                    }
                    else
                    {
                        customSyncState.Dispose();
                        using (FolderHierarchySyncState folderHierarchySyncState = base.SyncStateStorage.GetFolderHierarchySyncState())
                        {
                            if (folderHierarchySyncState != null)
                            {
                                AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "Deleting all sync states.");
                                base.SyncStateStorage.DeleteAllSyncStates();
                            }
                        }
                    }
                    this.folderIdMappingSyncState = base.SyncStateStorage.CreateCustomSyncState(syncStateInfo);
                    this.folderIdMappingSyncState[CustomStateDatumType.IdMapping] = new FolderIdMapping();
                    this.folderHierarchySyncState = base.SyncStateStorage.CreateFolderHierarchySyncState();
                }
                else
                {
                    AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "Deleting folder hierarchy sync state.");
                    base.SyncStateStorage.DeleteFolderHierarchySyncState();
                    this.folderHierarchySyncState = base.SyncStateStorage.CreateFolderHierarchySyncState();
                    ((FolderIdMapping)this.folderIdMappingSyncState[CustomStateDatumType.IdMapping]).CommitChanges();
                }
                this.folderIdMappingSyncState[CustomStateDatumType.FullFolderTree]         = new FolderTree();
                this.folderIdMappingSyncState[CustomStateDatumType.RecoveryFullFolderTree] = this.folderIdMappingSyncState[CustomStateDatumType.FullFolderTree];
                base.InitializeSyncStatusSyncState();
                base.SyncStatusSyncData.ClearClientCategoryHash();
                this.shouldSaveSyncStatus = true;
                Interlocked.Exchange(ref this.validToCommitSyncStatusSyncState, 1);
            }
            else
            {
                this.folderIdMappingSyncState = base.SyncStateStorage.GetCustomSyncState(syncStateInfo, new PropertyDefinition[0]);
                this.folderHierarchySyncState = base.SyncStateStorage.GetFolderHierarchySyncState();
                if (this.folderHierarchySyncState == null || this.folderIdMappingSyncState == null || this.folderIdMappingSyncState[CustomStateDatumType.IdMapping] == null)
                {
                    base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "NoHierarchyState");
                    throw new AirSyncPermanentException(StatusCode.Sync_OutOfDisk, this.ConstructErrorXml(StatusCode.Sync_OutOfDisk), null, false);
                }
                FolderIdMapping   folderIdMapping = (FolderIdMapping)this.folderIdMappingSyncState[CustomStateDatumType.IdMapping];
                StoreObjectId     defaultFolderId = base.MailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox);
                MailboxSyncItemId mailboxId       = MailboxSyncItemId.CreateForNewItem(defaultFolderId);
                if (!folderIdMapping.Contains(mailboxId))
                {
                    base.SyncStateStorage.DeleteAllSyncStates();
                    base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "InboxStoreObjectIdChanged");
                    throw new AirSyncPermanentException(HttpStatusCode.InternalServerError, StatusCode.SyncStateCorrupt, new LocalizedString("The sync state is corrupt.  It is most likely due to a recent mailbox migration."), false);
                }
            }
            if (this.folderHierarchySyncState.CustomVersion != null && this.folderHierarchySyncState.CustomVersion.Value > 5)
            {
                base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "SyncStateVersionMismatch");
                throw new AirSyncPermanentException(HttpStatusCode.InternalServerError, StatusCode.SyncStateVersionInvalid, EASServerStrings.MismatchSyncStateError, true);
            }
        }
        // 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);
        }