public static bool DoesTypeExistWithThisId(ushort typeId) { List <ICustomSerializableBuilder> builderTableFromTypeId = SyncStateTypeFactory.GetBuilderTableFromTypeId(typeId); ushort num = SyncStateTypeFactory.TypeIndexFromTypeId(typeId); return((int)num < builderTableFromTypeId.Count && builderTableFromTypeId[(int)num].TypeId == typeId); }
private void InternalRegisterBuilder(ICustomSerializableBuilder typeBuilder, ushort typeMask) { List <ICustomSerializableBuilder> builderTableFromTypeId = SyncStateTypeFactory.GetBuilderTableFromTypeId(typeMask); builderTableFromTypeId.Add(typeBuilder); typeBuilder.TypeId = (ushort)(builderTableFromTypeId.Count | (int)typeMask); }
public ICustomSerializable BuildObject(ushort typeId) { if (!SyncStateTypeFactory.DoesTypeExistWithThisId(typeId)) { throw new CustomSerializationException(ServerStrings.ExSyncStateCorrupted("typeId " + typeId)); } return(SyncStateTypeFactory.GetBuilderTableFromTypeId(typeId)[(int)SyncStateTypeFactory.TypeIndexFromTypeId(typeId)].BuildObject()); }
private static List <ICustomSerializableBuilder> GetBuilderTableFromTypeId(ushort typeId) { if (!SyncStateTypeFactory.IsExternalType(typeId)) { return(SyncStateTypeFactory.GetInstance().internalBuilderTable); } return(SyncStateTypeFactory.GetInstance().externalBuilderTable); }
public static SyncStateStorage Create(MailboxSession mailboxSession, DeviceIdentity deviceIdentity, StateStorageFeatures features, bool onlySetPropsIfAlreadyExists, ISyncLogger syncLogger = null) { if (syncLogger == null) { syncLogger = TracingLogger.Singleton; } EnumValidator.ThrowIfInvalid <StateStorageFeatures>(features, "features"); SyncStateTypeFactory.GetInstance().RegisterInternalBuilders(); UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger); DeviceSyncStateMetadata deviceSyncStateMetadata = userSyncStateMetadata.GetDevice(mailboxSession, deviceIdentity, syncLogger); SyncStateStorage syncStateStorage = (deviceSyncStateMetadata == null) ? null : SyncStateStorage.GetSyncStateStorage(mailboxSession, deviceSyncStateMetadata, syncLogger); if (syncStateStorage == null || onlySetPropsIfAlreadyExists) { Folder folder = null; SyncStateStorage syncStateStorage2 = null; bool flag = false; try { folder = SyncStateStorage.CreateAndSaveFolder(mailboxSession, mailboxSession.GetDefaultFolderId(DefaultFolderType.SyncRoot), CreateMode.OpenIfExists, deviceIdentity.CompositeKey, null, (syncStateStorage == null) ? null : syncStateStorage.folder, syncLogger); if (deviceSyncStateMetadata != null && deviceSyncStateMetadata.DeviceFolderId != folder.Id.ObjectId) { userSyncStateMetadata.TryRemove(deviceSyncStateMetadata.Id, syncLogger); deviceSyncStateMetadata = null; } if (deviceSyncStateMetadata == null) { deviceSyncStateMetadata = new DeviceSyncStateMetadata(mailboxSession, folder.Id.ObjectId, syncLogger); deviceSyncStateMetadata = userSyncStateMetadata.GetOrAdd(deviceSyncStateMetadata); } syncStateStorage2 = new SyncStateStorage(folder, deviceSyncStateMetadata, syncLogger); flag = true; return(syncStateStorage2); } finally { if (!flag) { if (syncStateStorage2 != null) { syncStateStorage2.Dispose(); syncStateStorage2 = null; } if (folder != null) { folder.Dispose(); folder = null; } } } return(syncStateStorage); } return(syncStateStorage); }
private void AssertTypeRegisteredWithSyncStateFactory(RefT data) { if (data == null) { return; } if (!SyncStateTypeFactory.IsTypeRegistered(data)) { "Type not registered. Please call: SyncStateTypeFactory.GetInstance().RegisterBuilder(new " + data.GetType().ToString() + "()) before attempting to serialize this type through DeriveData."; } }
public static bool DeleteSyncStateStorage(MailboxSession mailboxSession, StoreObjectId deviceFolderId, DeviceIdentity deviceIdentity, ISyncLogger syncLogger = null) { if (syncLogger == null) { syncLogger = TracingLogger.Singleton; } ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession); ArgumentValidator.ThrowIfNull("folderId", deviceFolderId); bool result = false; SyncStateTypeFactory.GetInstance().RegisterInternalBuilders(); UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger); AggregateOperationResult aggregateOperationResult = mailboxSession.Delete(DeleteItemFlags.SoftDelete, new StoreId[] { deviceFolderId }); syncLogger.Information <string>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Result = {0}", aggregateOperationResult.OperationResult.ToString()); userSyncStateMetadata.TryRemove(deviceIdentity, syncLogger); List <DeviceSyncStateMetadata> allDevices = userSyncStateMetadata.GetAllDevices(mailboxSession, false, syncLogger); if (allDevices != null) { foreach (DeviceSyncStateMetadata deviceSyncStateMetadata in allDevices) { syncLogger.Information <DeviceIdentity, DeviceIdentity>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Found device folder '{0}', Looking for folder '{1}'", deviceSyncStateMetadata.Id, deviceIdentity); if (deviceSyncStateMetadata.Id.Equals(deviceIdentity)) { try { aggregateOperationResult = mailboxSession.Delete(DeleteItemFlags.SoftDelete, new StoreId[] { deviceSyncStateMetadata.DeviceFolderId }); syncLogger.Information <DeviceIdentity, DeviceIdentity, string>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. try Deleting SyncState folder again.folderName:{0}, originalFolder:{1}, result:{2}", deviceSyncStateMetadata.Id, deviceIdentity, aggregateOperationResult.OperationResult.ToString()); continue; } catch { syncLogger.Information(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Error deleting the sync state folder."); continue; } } if (deviceSyncStateMetadata.Id.IsProtocol("AirSync")) { result = true; break; } } } return(result); }
public static SyncStateStorage Bind(MailboxSession mailboxSession, DeviceIdentity deviceIdentity, ISyncLogger syncLogger = null) { if (syncLogger == null) { syncLogger = TracingLogger.Singleton; } ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession); SyncStateTypeFactory.GetInstance().RegisterInternalBuilders(); UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger); DeviceSyncStateMetadata device = userSyncStateMetadata.GetDevice(mailboxSession, deviceIdentity, syncLogger); if (device != null) { return(SyncStateStorage.GetSyncStateStorage(mailboxSession, device, syncLogger)); } return(null); }
public override void DeserializeData(BinaryReader reader, ComponentDataPool componentDataPool) { if (reader.ReadBoolean()) { base.Data = default(RefT); return; } ushort num = reader.ReadUInt16(); if (!SyncStateTypeFactory.DoesTypeExistWithThisId(num)) { throw new CustomSerializationException(ServerStrings.ExSyncStateCorrupted("Type " + num.ToString() + " not registered.")); } base.Data = (RefT)((object)SyncStateTypeFactory.GetInstance().BuildObject(num)); RefT data = base.Data; data.DeserializeData(reader, componentDataPool); }
public static bool DeleteSyncStateStorage(MailboxSession mailboxSession, DeviceIdentity deviceIdentity, ISyncLogger syncLogger = null) { if (syncLogger == null) { syncLogger = TracingLogger.Singleton; } ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession); syncLogger.Information <DeviceIdentity>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Need to delete folder {0}", deviceIdentity); SyncStateTypeFactory.GetInstance().RegisterInternalBuilders(); UserSyncStateMetadata userSyncStateMetadata = UserSyncStateMetadataCache.Singleton.Get(mailboxSession, syncLogger); List <DeviceSyncStateMetadata> allDevices = userSyncStateMetadata.GetAllDevices(mailboxSession, false, syncLogger); bool result = false; if (allDevices != null) { foreach (DeviceSyncStateMetadata deviceSyncStateMetadata in allDevices) { syncLogger.Information <DeviceIdentity>(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. Found syncstate folder {0}", deviceSyncStateMetadata.Id); if (string.Compare(deviceSyncStateMetadata.Id.Protocol, deviceIdentity.Protocol, StringComparison.Ordinal) == 0) { if (deviceSyncStateMetadata.Id.Equals(deviceIdentity)) { mailboxSession.Delete(DeleteItemFlags.SoftDelete, new StoreId[] { deviceSyncStateMetadata.DeviceFolderId }); userSyncStateMetadata.TryRemove(deviceSyncStateMetadata.Id, syncLogger); } else { syncLogger.Information(ExTraceGlobals.SyncTracer, 0L, "SyncStateStorage::DeleteSyncStateStorage. found more devices with same protocol"); result = true; } } } } return(result); }
public void RegisterInternalBuilders() { if (this.initialized) { return; } lock (this.thisLock) { if (!this.initialized) { SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new NullableData <Int32Data, int>(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new GenericDictionaryData <StringData, string, BooleanData, bool>(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, FolderSync.ClientStateInformation>(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, ServerManifestEntry>(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, ClientManifestEntry>(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new MailboxSyncItemId(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new MailboxSyncWatermark(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new GenericDictionaryData <StoreObjectIdData, StoreObjectId, FolderStateEntry>(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new GenericDictionaryData <StoreObjectIdData, StoreObjectId, FolderManifestEntry>(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new StringData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new DateTimeData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new ByteData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new BooleanData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new Int32Data(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new UInt32Data(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new Int64Data(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new StoreObjectIdData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new ByteArrayData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new ConstStringData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new NullableDateTimeData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new ConversationIdData(), 0); SyncStateTypeFactory.GetInstance().InternalRegisterBuilder(new ADObjectIdData(), 0); this.initialized = true; } } }
public static bool IsTypeRegistered(ICustomSerializableBuilder typeBuilder) { return(SyncStateTypeFactory.DoesTypeExistWithThisId(typeBuilder.TypeId)); }