// Token: 0x060006A5 RID: 1701 RVA: 0x00032CB8 File Offset: 0x00030EB8 private void CollectItemsInFolder(DefaultFolderType folderToCollect) { EHAHiddenFolderCleanupEnforcer.Tracer.TraceDebug <EHAHiddenFolderCleanupEnforcer, DefaultFolderType>((long)this.GetHashCode(), "{0}: CollectItemsInFolder: folderToCollect={1}.", this, folderToCollect); StoreId storeId = this.folderIdsToProcess[folderToCollect]; int num = 0; int num2 = this.ItemsLeftToCollect(); if (storeId != null) { using (Folder folder = Folder.Bind(base.MailboxDataForTags.MailboxSession, storeId)) { int num3 = base.FolderItemTypeCount(folder, ItemQueryType.None); base.SysCleanupSubAssistant.ThrottleStoreCall(); if (num3 <= 0 || num3 <= num2) { EHAHiddenFolderCleanupEnforcer.Tracer.TraceDebug <EHAHiddenFolderCleanupEnforcer, DefaultFolderType, int>((long)this.GetHashCode(), "{0}: Deleting {1} folder with {2} items", this, folderToCollect, num3); num = num3; folder.Load(new PropertyDefinition[] { FolderSchema.ExtendedSize }); object obj = folder.TryGetProperty(FolderSchema.ExtendedSize); if (obj is long) { long num4 = (long)obj; base.TagExpirationExecutor.AddToDoomedHardDeleteList(new ItemData(folder.Id, (int)num4), true); } } else { base.SysCleanupSubAssistant.ThrottleStoreCall(); using (QueryResult queryResult = folder.ItemQuery(ItemQueryType.None, null, null, EHAHiddenFolderCleanupEnforcer.PropertyColumns.PropertyDefinitions)) { queryResult.SeekToOffset(SeekReference.OriginBeginning, 0); bool flag = true; while (flag) { int num5 = num2 - num; if (num5 > 0) { object[][] rows = queryResult.GetRows(num5, out flag); foreach (object[] rawProperties in rows) { PropertyArrayProxy propertyArrayProxy = new PropertyArrayProxy(EHAHiddenFolderCleanupEnforcer.PropertyColumns, rawProperties); EHAHiddenFolderCleanupEnforcer.Tracer.TraceDebug <EHAHiddenFolderCleanupEnforcer, VersionedId, DefaultFolderType>((long)this.GetHashCode(), "{0}: Deleting item id [{1}] in folder {2} ", this, (VersionedId)propertyArrayProxy[ItemSchema.Id], folderToCollect); base.TagExpirationExecutor.AddToDoomedHardDeleteList(new ItemData((VersionedId)propertyArrayProxy[ItemSchema.Id], (StoreObjectId)propertyArrayProxy[StoreObjectSchema.ParentItemId], (int)propertyArrayProxy[ItemSchema.Size]), true); } num += rows.Length; } else { flag = false; } } } } } } this.IncrementFolderCollectCount(folderToCollect, num); }
// Token: 0x060006B3 RID: 1715 RVA: 0x00033498 File Offset: 0x00031698 private void ProcessFolderContents(Folder folder, DefaultFolderType folderTypeToCollect, ItemQueryType itemQueryType) { int num = base.FolderItemTypeCount(folder, itemQueryType); if (num <= 0) { MigrateToArchiveEnforcer.Tracer.TraceDebug <MigrateToArchiveEnforcer, string, ItemQueryType>((long)this.GetHashCode(), "{0}:{1} Folder is Empty of type {2}", this, folder.Id.ObjectId.ToHexEntryId(), itemQueryType); return; } using (QueryResult queryResult = folder.ItemQuery(itemQueryType, null, null, MigrateToArchiveEnforcer.PropertyColumns.PropertyDefinitions)) { queryResult.SeekToOffset(SeekReference.OriginBeginning, 0); bool flag = false; while (!flag) { object[][] rows = queryResult.GetRows(100); if (rows.Length <= 0) { break; } foreach (object[] rawProperties in rows) { PropertyArrayProxy itemProperties = new PropertyArrayProxy(MigrateToArchiveEnforcer.PropertyColumns, rawProperties); this.EnlistItem(itemProperties, folderTypeToCollect); if (this.MaxItemsCollectedForThisCycle(folderTypeToCollect)) { flag = true; break; } } base.SysCleanupSubAssistant.ThrottleStoreCallAndCheckForShutdown(base.MailboxDataForTags.MailboxSession.MailboxOwner); } } }
// Token: 0x060006B6 RID: 1718 RVA: 0x0003364C File Offset: 0x0003184C private bool EnlistItem(PropertyArrayProxy itemProperties, DefaultFolderType folderTypeToCollect) { if (!(itemProperties[ItemSchema.Id] is VersionedId)) { MigrateToArchiveEnforcer.Tracer.TraceError <MigrateToArchiveEnforcer>((long)this.GetHashCode(), "{0}: We could not get id of this item. Skipping it.", this); return(true); } StoreObjectId storeObjectId = itemProperties[StoreObjectSchema.ParentItemId] as StoreObjectId; if (storeObjectId == null) { MigrateToArchiveEnforcer.Tracer.TraceError <MigrateToArchiveEnforcer>((long)this.GetHashCode(), "{0}: We could not get parent id of this item. Skipping it.", this); return(true); } base.TagExpirationExecutor.AddToDoomedMoveToArchiveList(new ItemData((VersionedId)itemProperties[ItemSchema.Id], storeObjectId, (int)itemProperties[ItemSchema.Size])); if (folderTypeToCollect == DefaultFolderType.Inbox) { this.itemsMovedInbox++; } else { this.itemsMovedSentItems++; } this.totalItemsMoved++; return(true); }
// Token: 0x0600061E RID: 1566 RVA: 0x0002EEC8 File Offset: 0x0002D0C8 private void EnlistItem(PropertyArrayProxy itemProperties) { VersionedId versionedId = itemProperties[ItemSchema.Id] as VersionedId; if (versionedId == null) { SupplementExpirationEnforcer.Tracer.TraceError <SupplementExpirationEnforcer>((long)this.GetHashCode(), "{0}: We could not get id of this item. Skipping it.", this); return; } try { if (!this.IsIndeedTaggedForExpiration(itemProperties)) { SupplementExpirationEnforcer.Tracer.TraceError <SupplementExpirationEnforcer>((long)this.GetHashCode(), "{0}: Item does not have SystemData bit set. Skipping it.", this); return; } } catch (ArgumentOutOfRangeException arg) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, string, ArgumentOutOfRangeException>((long)this.GetHashCode(), "{0}: Corrupted Data. Skip current item {1}. Exception: {2}", this, versionedId.ObjectId.ToHexEntryId(), arg); return; } this.itemsExpired++; base.TagExpirationExecutor.AddToDoomedHardDeleteList(new ItemData(versionedId, (int)itemProperties[ItemSchema.Size]), false); }
// Token: 0x06000621 RID: 1569 RVA: 0x0002F154 File Offset: 0x0002D354 private bool IsFolderSkippable(PropertyArrayProxy folderProperties) { VersionedId versionedId = folderProperties[FolderSchema.Id] as VersionedId; if (versionedId == null) { SupplementExpirationEnforcer.Tracer.TraceError <SupplementExpirationEnforcer>((long)this.GetHashCode(), "{0}: We could not get id of this folder. Skipping it.", this); return(true); } object obj = folderProperties[FolderSchema.MapiFolderType]; if (obj is int && ((FolderType)obj & FolderType.Search) == FolderType.Search) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, VersionedId>((long)this.GetHashCode(), "{0}: The folder {1} is a search folder. Skipping it for expiration.", this, versionedId); return(true); } if (!(folderProperties[FolderSchema.FolderFlags] is int)) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, VersionedId>((long)this.GetHashCode(), "{0}: The FolderFlags prop doesn't not exist on folder {1}. Skipping it for expiration.", this, versionedId); return(true); } StoreFolderFlags storeFolderFlags = (StoreFolderFlags)folderProperties[FolderSchema.FolderFlags]; if ((storeFolderFlags & StoreFolderFlags.FolderIPM) == StoreFolderFlags.FolderIPM) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, VersionedId>((long)this.GetHashCode(), "{0}: The folder {1} is under IPM subtree. Skipping it for expiration.", this, versionedId); return(true); } DefaultFolderType defaultFolderType = base.MailboxDataForTags.MailboxSession.IsDefaultFolderType(versionedId); if (defaultFolderType == DefaultFolderType.System || defaultFolderType == DefaultFolderType.AdminAuditLogs || defaultFolderType == DefaultFolderType.Audits || defaultFolderType == DefaultFolderType.RecoverableItemsRoot || defaultFolderType == DefaultFolderType.RecoverableItemsVersions || defaultFolderType == DefaultFolderType.RecoverableItemsDeletions || defaultFolderType == DefaultFolderType.RecoverableItemsPurges || defaultFolderType == DefaultFolderType.RecoverableItemsDiscoveryHolds || defaultFolderType == DefaultFolderType.RecoverableItemsMigratedMessages || defaultFolderType == DefaultFolderType.CalendarLogging) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, DefaultFolderType>((long)this.GetHashCode(), "{0}: This folder type is {1}. Skipping it for expiration.", this, defaultFolderType); return(true); } if (base.MailboxDataForTags.ElcUserInformation.ProcessEhaMigratedMessages && !base.MailboxDataForTags.MailboxSession.MailboxOwner.MailboxInfo.IsArchive) { using (Folder folder = Folder.Bind(base.MailboxDataForTags.MailboxSession, versionedId, new PropertyDefinition[] { FolderSchema.DisplayName })) { if (string.Compare(folder.DisplayName, ElcGlobals.MigrationFolderName, true) == 0 || string.Compare(folder.DisplayName, DefaultFolderType.Inbox.ToString(), true) == 0 || string.Compare(folder.DisplayName, DefaultFolderType.SentItems.ToString(), true) == 0) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, string>((long)this.GetHashCode(), "{0}: This is a migration folder in primary mailbox {1}. SupplementEnforcer skips it as it has a separate enforcer.", this, folder.DisplayName); return(true); } } } int num = (int)folderProperties[FolderSchema.ItemCount]; int num2 = (int)folderProperties[FolderSchema.AssociatedItemCount]; if (num == 0 && num2 == 0) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, VersionedId>((long)this.GetHashCode(), "{0}: The Folder {1} is empty. Skipping it for expiration", this, versionedId); return(true); } return(false); }
// Token: 0x06000675 RID: 1653 RVA: 0x00031510 File Offset: 0x0002F710 private bool IsTimeToDie(PropertyArrayProxy itemProperties, EnhancedTimeSpan ageLimit) { if (ElcGlobals.ExpireDumpsterRightNow) { return(true); } object obj = itemProperties[StoreObjectSchema.LastModifiedTime]; TimeSpan t = base.MailboxDataForTags.UtcNow - (DateTime)((ExDateTime)obj).ToUtc(); return(t >= ageLimit); }
// Token: 0x060005E0 RID: 1504 RVA: 0x0002CDB8 File Offset: 0x0002AFB8 private bool EnlistItem(PropertyArrayProxy itemProperties, DefaultFolderType folderTypeToCollect, DumpsterExpirationEnforcer.AgeLimitAndAction ageLimitAndAction) { VersionedId versionedId = itemProperties[ItemSchema.Id] as VersionedId; if (versionedId == null) { DumpsterExpirationEnforcer.Tracer.TraceError <DumpsterExpirationEnforcer>((long)this.GetHashCode(), "{0}: We could not get id of this item. Skipping it.", this); return(true); } DumpsterExpirationEnforcer.AgeLimitAndAction ageLimitAndAction2 = ageLimitAndAction; if (!this.IsTimeToDie(itemProperties, ageLimitAndAction2.AgeLimit)) { DumpsterExpirationEnforcer.Tracer.TraceDebug <DumpsterExpirationEnforcer, VersionedId, EnhancedTimeSpan>((long)this.GetHashCode(), "{0}: Item {1} newer than minAgeLimitForFolder {2}.", this, versionedId, ageLimitAndAction2.AgeLimit); return(false); } if (ageLimitAndAction2.RetentionAction == RetentionActionType.PermanentlyDelete) { bool disableCalendarLogging = false; if (CalendarLoggingHelper.IsCalendarItem(versionedId.ObjectId)) { disableCalendarLogging = this.IsTimeToDie(itemProperties, ageLimitAndAction2.AgeLimit); } if (base.MailboxDataForTags.AbsoluteLitigationHoldEnabled) { ItemData itemData = new ItemData(versionedId, (StoreObjectId)itemProperties[StoreObjectSchema.ParentItemId], ItemData.EnforcerType.DumpsterExpirationEnforcer, (int)itemProperties[ItemSchema.Size]); base.TagExpirationExecutor.AddToDoomedMoveToPurgesList(itemData, disableCalendarLogging); this.itemsMovedToPurges++; } else if (base.MailboxDataForTags.QueryBasedHoldEnabled) { ItemData itemData2 = new ItemData(versionedId, (StoreObjectId)itemProperties[StoreObjectSchema.ParentItemId], ItemData.EnforcerType.DumpsterExpirationEnforcer, (int)itemProperties[ItemSchema.Size]); base.TagExpirationExecutor.AddToDoomedMoveToDiscoveryHoldsList(itemData2, disableCalendarLogging); } else { ItemData itemData3 = new ItemData(versionedId, ItemData.EnforcerType.DumpsterExpirationEnforcer, (int)itemProperties[ItemSchema.Size]); base.TagExpirationExecutor.AddToDoomedHardDeleteList(itemData3, disableCalendarLogging); } this.itemsExpired++; } else { base.TagExpirationExecutor.AddToDoomedMoveToArchiveDumpsterList(new ItemData(versionedId, ItemData.EnforcerType.DumpsterExpirationEnforcer, (int)itemProperties[ItemSchema.Size]), folderTypeToCollect); this.itemsMoved++; } return(true); }
// Token: 0x06000620 RID: 1568 RVA: 0x0002EFA0 File Offset: 0x0002D1A0 private void ProcessFolderContents(StoreId folderId, ItemQueryType itemQueryType) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, StoreId, ItemQueryType>((long)this.GetHashCode(), "{0}: Starting to process folder {1} with query type {2}.", this, folderId, itemQueryType); using (Folder folder = Folder.Bind(base.MailboxDataForTags.MailboxSession, folderId)) { if (base.FolderItemTypeCount(folder, itemQueryType) <= 0) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer, string, ItemQueryType>((long)this.GetHashCode(), "{0}:{1} Folder is Empty of type {2}", this, folder.Id.ObjectId.ToHexEntryId(), itemQueryType); } else { using (QueryResult queryResult = folder.ItemQuery(itemQueryType, null, new SortBy[] { new SortBy(ItemSchema.RetentionDate, SortOrder.Descending) }, SupplementExpirationEnforcer.ItemPropertyColumns.PropertyDefinitions)) { ComparisonFilter seekFilter = new ComparisonFilter(ComparisonOperator.LessThanOrEqual, ItemSchema.RetentionDate, base.MailboxDataForTags.UtcNow.Date); queryResult.SeekToCondition(SeekReference.OriginBeginning, seekFilter); bool flag = false; while (!flag) { object[][] rows = queryResult.GetRows(100); if (rows.Length <= 0) { break; } foreach (object[] rawProperties in rows) { PropertyArrayProxy propertyArrayProxy = new PropertyArrayProxy(SupplementExpirationEnforcer.ItemPropertyColumns, rawProperties); if (!(propertyArrayProxy[ItemSchema.RetentionDate] is ExDateTime)) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer>((long)this.GetHashCode(), "{0}: Retention date is missing. Skipping items from here on.", this); flag = true; break; } this.EnlistItem(propertyArrayProxy); } base.SysCleanupSubAssistant.ThrottleStoreCallAndCheckForShutdown(base.MailboxDataForTags.MailboxSession.MailboxOwner); } } } } }
// Token: 0x06000673 RID: 1651 RVA: 0x0003133C File Offset: 0x0002F53C private void ProcessFolderContents(Folder folder, ItemQueryType itemQueryType) { int num = base.FolderItemTypeCount(folder, itemQueryType); if (num <= 0) { CalendarLogExpirationEnforcer.Tracer.TraceDebug <CalendarLogExpirationEnforcer, string, ItemQueryType>((long)this.GetHashCode(), "{0}:{1} Folder is Empty of type {2}", this, folder.Id.ObjectId.ToHexEntryId(), itemQueryType); return; } using (QueryResult queryResult = folder.ItemQuery(itemQueryType, null, new SortBy[] { new SortBy(CalendarLogExpirationEnforcer.agePropertyDefinition, SortOrder.Ascending) }, CalendarLogExpirationEnforcer.PropertyColumns.PropertyDefinitions)) { queryResult.SeekToOffset(SeekReference.OriginBeginning, 0); bool flag = false; while (!flag) { object[][] rows = queryResult.GetRows(100); if (rows.Length <= 0) { break; } foreach (object[] rawProperties in rows) { PropertyArrayProxy propertyArrayProxy = new PropertyArrayProxy(CalendarLogExpirationEnforcer.PropertyColumns, rawProperties); if (!ElcMailboxHelper.Exists(propertyArrayProxy[CalendarLogExpirationEnforcer.agePropertyDefinition])) { CalendarLogExpirationEnforcer.Tracer.TraceDebug <CalendarLogExpirationEnforcer>((long)this.GetHashCode(), "{0}: Last Modified date is missing. Skipping items from here on.", this); flag = true; break; } if (!this.EnlistItem(propertyArrayProxy)) { flag = true; break; } } base.SysCleanupSubAssistant.ThrottleStoreCallAndCheckForShutdown(base.MailboxDataForTags.MailboxSession.MailboxOwner); } } }
// Token: 0x060005F5 RID: 1525 RVA: 0x0002D47C File Offset: 0x0002B67C private bool EnlistItem(PropertyArrayProxy itemProperties) { VersionedId versionedId = itemProperties[ItemSchema.Id] as VersionedId; if (versionedId == null) { DumpsterQuotaEnforcer.Tracer.TraceError <DumpsterQuotaEnforcer>((long)this.GetHashCode(), "{0}: We could not get id of this item. Skipping it.", this); return(true); } object obj = itemProperties[ItemSchema.Size]; if (obj == null) { DumpsterQuotaEnforcer.Tracer.TraceError <DumpsterQuotaEnforcer>((long)this.GetHashCode(), "{0}: We could not get size of this item. Skipping it.", this); return(true); } this.deletedItemsSize += (ulong)((long)((int)obj)); this.itemsExpired++; if (base.MailboxDataForTags.QueryBasedHoldEnabled) { ItemData itemData = new ItemData(versionedId, itemProperties.GetProperty <StoreObjectId>(StoreObjectSchema.ParentItemId), ItemData.EnforcerType.DumpsterQuotaEnforcer, itemProperties.GetProperty <int>(ItemSchema.Size)); base.TagExpirationExecutor.AddToDoomedMoveToDiscoveryHoldsList(itemData, false); } else { ItemData itemData2 = new ItemData(versionedId, ItemData.EnforcerType.DumpsterQuotaEnforcer, itemProperties.GetProperty <int>(ItemSchema.Size)); base.TagExpirationExecutor.AddToDoomedHardDeleteList(itemData2, false); } bool flag = this.dumpsterSize - this.deletedItemsSize > this.dumpsterQuota.Value.ToBytes(); if (!flag) { DumpsterQuotaEnforcer.Tracer.TraceDebug((long)this.GetHashCode(), "{0}: Collected sufficient items. dumspterSize={1}, deletedItemsSize={2}, itemId={3}.", new object[] { this, this.dumpsterSize, this.deletedItemsSize, versionedId }); } return(flag); }
// Token: 0x06000674 RID: 1652 RVA: 0x00031474 File Offset: 0x0002F674 private bool EnlistItem(PropertyArrayProxy itemProperties) { VersionedId versionedId = itemProperties[ItemSchema.Id] as VersionedId; if (versionedId == null) { CalendarLogExpirationEnforcer.Tracer.TraceError <CalendarLogExpirationEnforcer>((long)this.GetHashCode(), "{0}: We could not get id of this item. Skipping it.", this); return(true); } if (!CalendarLoggingHelper.IsCalendarItem(versionedId.ObjectId)) { return(true); } if (!this.IsTimeToDie(itemProperties, this.AgeLimit)) { CalendarLogExpirationEnforcer.Tracer.TraceDebug <CalendarLogExpirationEnforcer, VersionedId, EnhancedTimeSpan>((long)this.GetHashCode(), "{0}: Item {1} newer than minAgeLimitForFolder {2}.", this, versionedId, this.AgeLimit); return(false); } base.TagExpirationExecutor.AddToDoomedHardDeleteList(new ItemData(versionedId, (int)itemProperties[ItemSchema.Size]), true); return(true); }
// Token: 0x0600061D RID: 1565 RVA: 0x0002EDE0 File Offset: 0x0002CFE0 private void CollectItemsToExpireInNonIpm() { using (IEnumerator <List <object[]> > folderHierarchy = FolderProcessor.GetFolderHierarchy(DefaultFolderType.Configuration, base.MailboxDataForTags.MailboxSession, SupplementExpirationEnforcer.FolderPropertyColumns.PropertyDefinitions)) { while (folderHierarchy != null && folderHierarchy.MoveNext()) { List <object[]> list = folderHierarchy.Current; if (list != null) { SupplementExpirationEnforcer.Tracer.TraceDebug <SupplementExpirationEnforcer>((long)this.GetHashCode(), "{0}: Got folder hierarchy under non-ipm subtree.", this); foreach (object[] rawProperties in list) { PropertyArrayProxy propertyArrayProxy = new PropertyArrayProxy(SupplementExpirationEnforcer.FolderPropertyColumns, rawProperties); if (!this.IsFolderSkippable(propertyArrayProxy)) { VersionedId property = propertyArrayProxy.GetProperty <VersionedId>(FolderSchema.Id); this.ProcessFolderContents(property, ItemQueryType.None); this.ProcessFolderContents(property, ItemQueryType.Associated); } } } } } }
// Token: 0x0600061F RID: 1567 RVA: 0x0002EF8C File Offset: 0x0002D18C private bool IsIndeedTaggedForExpiration(PropertyArrayProxy itemProperties) { return(FlagsMan.IsSystemDataSet(itemProperties[StoreObjectSchema.RetentionFlags])); }