public override void PreProcessHierarchy() { base.DestMailboxWrapper.LoadFolderMap(GetFolderMapFlags.None, delegate { FolderHierarchy folderHierarchy = new FolderHierarchy(FolderHierarchyFlags.PublicFolderMailbox, base.DestMailboxWrapper); folderHierarchy.LoadHierarchy(EnumerateFolderHierarchyFlags.WellKnownPublicFoldersOnly, null, false, null); return(folderHierarchy); }); }
public override FolderMap GetSourceFolderMap(GetFolderMapFlags flags) { base.SourceMailboxWrapper.LoadFolderMap(flags, delegate { FolderHierarchy folderHierarchy = new FolderHierarchy(FolderHierarchyFlags.None, base.SourceMailboxWrapper); folderHierarchy.LoadHierarchy(EnumerateFolderHierarchyFlags.None, null, false, this.GetAdditionalFolderPtags()); return(folderHierarchy); }); return(base.SourceMailboxWrapper.FolderMap); }
public override FolderRecWrapper GetTargetFolderBySourceId(byte[] sourceId) { FolderMap sourceFolderMap = base.SourceFolderMap; FolderMapping folderMapping = base.SourceFolderMap[sourceId] as FolderMapping; if (folderMapping != null && folderMapping.IsSystemPublicFolder) { FolderHierarchy folderHierarchy = base.TargetFolderMap as FolderHierarchy; return folderHierarchy.GetWellKnownFolder(folderMapping.WKFType); } return base.TargetFolderMap[this.destinationMailbox.GetSessionSpecificEntryId(sourceId)]; }
public override FolderMap GetDestinationFolderMap(GetFolderMapFlags flags) { base.DestMailboxWrapper.LoadFolderMap(flags, delegate { FolderHierarchy folderHierarchy = new FolderHierarchy(FolderHierarchyFlags.PublicFolderMailbox, base.DestMailboxWrapper); folderHierarchy.LoadHierarchy(EnumerateFolderHierarchyFlags.None, null, false, new PropTag[] { PropTag.ReplicaList, PropTag.LTID, PropTag.TimeInServer }); return(folderHierarchy); }); return(base.DestMailboxWrapper.FolderMap); }
private static byte[] GetImapSyncPropertiesHash(MessageRec message, FolderHierarchy hierarchy) { string text = message[hierarchy.SourceSyncMessageIdPtag] as string; string text2 = message[hierarchy.SourceSyncAccountNamePtag] as string; byte[] array = message[hierarchy.SourceSyncFolderIdPtag] as byte[]; if (text != null && text2 != null && array != null) { byte[] sha1Hash = CommonUtils.GetSHA1Hash(text2.ToLowerInvariant() + text.ToLowerInvariant()); byte[] array2 = new byte[array.Length + sha1Hash.Length]; Array.Copy(array, 0, array2, 0, array.Length); Array.Copy(sha1Hash, 0, array2, array.Length, sha1Hash.Length); return(array2); } return(null); }
private byte[] CreateAssociatedDumpsterFolder(string sourceFolderName, byte[] replicaListValue, byte[] destinationFolderEntryId) { FolderHierarchy folderHierarchy = base.DestMailboxWrapper.FolderMap as FolderHierarchy; FolderRec folderRec = new FolderRec(); folderRec.ParentId = folderHierarchy.GetWellKnownFolder(WellKnownFolderType.PublicFolderDumpsterRoot).EntryId; folderRec.FolderName = PublicFolderCOWSession.GenerateUniqueFolderName(sourceFolderName); folderRec.FolderType = FolderType.Generic; byte[] array; base.DestMailbox.CreateFolder(folderRec, CreateFolderFlags.FailIfExists, out array); using (IDestinationFolder folder = base.DestMailbox.GetFolder(array)) { folder.SetProps(new PropValueData[] { new PropValueData(PropTag.ReplicaList, replicaListValue), new PropValueData(PropTag.IpmWasteBasketEntryId, destinationFolderEntryId), new PropValueData(PropTag.TimeInServer, 64) }); } return(array); }
private void CreateDumpsterFoldersForWellKnownFolders() { FolderHierarchy folderHierarchy = base.DestMailboxWrapper.FolderMap as FolderHierarchy; foreach (FolderMapping folderMapping in new List <FolderMapping>(8) { folderHierarchy.GetWellKnownFolder(WellKnownFolderType.Root), folderHierarchy.GetWellKnownFolder(WellKnownFolderType.IpmSubtree), folderHierarchy.GetWellKnownFolder(WellKnownFolderType.NonIpmSubtree), folderHierarchy.GetWellKnownFolder(WellKnownFolderType.EFormsRegistry), folderHierarchy.GetWellKnownFolder(WellKnownFolderType.PublicFolderDumpsterRoot), folderHierarchy.GetWellKnownFolder(WellKnownFolderType.PublicFolderTombstonesRoot), folderHierarchy.GetWellKnownFolder(WellKnownFolderType.PublicFolderAsyncDeleteState), folderHierarchy.GetWellKnownFolder(WellKnownFolderType.PublicFolderInternalSubmission) }) { List <PropValueData> list = new List <PropValueData>(2); using (IDestinationFolder folder = base.DestMailbox.GetFolder(folderMapping.EntryId)) { if (folder == null) { MrsTracer.Service.Error("Something deleted destination folder from under us", new object[0]); throw new UnexpectedErrorPermanentException(-2147221238); } if (!this.AssociatedDumpsterExists(folder)) { byte[] value = this.CreateAssociatedDumpsterFolder(folderMapping.FolderName, ReplicaListProperty.GetBytesFromStringArray(new string[] { base.TargetMailboxGuid.ToString() }), folderMapping.EntryId); list.Add(new PropValueData(PropTag.IpmWasteBasketEntryId, value)); folder.SetProps(list.ToArray()); } } } }
public void ComputeFolderMapping(FolderHierarchy targetHierarchy, bool createMissingFolderRecs) { if (!this.folderFilterApplied) { this.SetFolderFilter(null, false, null, string.Empty, false, Guid.Empty); } EntryIdMap <FolderMapping> targetBySourceEntryID = new EntryIdMap <FolderMapping>(); targetHierarchy.EnumerateSubtree(EnumHierarchyFlags.AllFolders, targetHierarchy.RootFolder, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx) { FolderMapping folderMapping = (FolderMapping)fRec; byte[] array = folderMapping.FolderRec[targetHierarchy.SourceEntryIDPtag] as byte[]; if (array != null && !targetBySourceEntryID.ContainsKey(array)) { targetBySourceEntryID.Add(array, folderMapping); } }); base.EnumerateFolderHierarchy(EnumHierarchyFlags.AllFolders, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx) { FolderMapping folderMapping = (FolderMapping)fRec; FolderMapping wellKnownFolder; if (folderMapping.WKFType != WellKnownFolderType.None) { wellKnownFolder = targetHierarchy.GetWellKnownFolder(folderMapping.WKFType); if (wellKnownFolder != null) { folderMapping.TargetFolder = wellKnownFolder; wellKnownFolder.SourceFolder = folderMapping; this.MapPublicFolderDumpster(folderMapping, wellKnownFolder); return; } } if (targetBySourceEntryID.TryGetValue(folderMapping.EntryId, out wellKnownFolder)) { folderMapping.TargetFolder = wellKnownFolder; wellKnownFolder.SourceFolder = folderMapping; this.MapPublicFolderDumpster(folderMapping, wellKnownFolder); } }); base.EnumerateFolderHierarchy(EnumHierarchyFlags.AllFolders, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx) { FolderMapping folderMapping = (FolderMapping)fRec; if (folderMapping.TargetFolder != null) { this.MapSubtreeByName(folderMapping, createMissingFolderRecs); ctx.Result = EnumHierarchyResult.SkipSubtree; } }); FolderMapping ipmSubtree = this.GetWellKnownFolder(WellKnownFolderType.IpmSubtree); if (ipmSubtree != null) { base.EnumerateFolderHierarchy(EnumHierarchyFlags.AllFolders, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx) { FolderMapping folderMapping = (FolderMapping)fRec; if (folderMapping.IsIncluded && folderMapping.TargetFolder == null) { this.MapFolderByName(folderMapping, ipmSubtree.TargetFolder, createMissingFolderRecs); if (folderMapping.TargetFolder != null) { this.MapSubtreeByName(folderMapping, createMissingFolderRecs); } ctx.Result = EnumHierarchyResult.SkipSubtree; } }); } }
public FolderIdTranslator(FolderHierarchy sourceHierarchy, FolderHierarchy targetHierarchy) { this.sourceHierarchy = sourceHierarchy; this.targetHierarchy = targetHierarchy; }
public override void CreateFolder(FolderMap.EnumFolderContext context, FolderRecWrapper sourceFolderRecWrapper, CreateFolderFlags createFolderFlags, out byte[] newFolderEntryId) { if (sourceFolderRecWrapper.IsInternalAccess) { throw new InternalAccessFolderCreationIsNotSupportedException(); } newFolderEntryId = null; FolderMapping folderMapping = sourceFolderRecWrapper as FolderMapping; FolderHierarchy folderHierarchy = base.DestMailboxWrapper.FolderMap as FolderHierarchy; byte[] sessionSpecificEntryId = base.DestMailbox.GetSessionSpecificEntryId(folderMapping.EntryId); FolderMapping folderMapping2 = folderMapping.Parent as FolderMapping; bool isRoot = base.IsRoot; byte[] parentId; switch (folderMapping2.WKFType) { case WellKnownFolderType.Root: case WellKnownFolderType.NonIpmSubtree: case WellKnownFolderType.IpmSubtree: case WellKnownFolderType.EFormsRegistry: parentId = folderHierarchy.GetWellKnownFolder(folderMapping2.WKFType).EntryId; break; default: if (isRoot || this.ShouldCreateUnderParentInSecondary()) { parentId = base.DestMailbox.GetSessionSpecificEntryId(folderMapping.ParentId); } else { parentId = folderHierarchy.GetWellKnownFolder(WellKnownFolderType.IpmSubtree).EntryId; } break; } byte[] entryId = folderMapping.FolderRec.EntryId; byte[] parentId2 = folderMapping.FolderRec.ParentId; folderMapping.FolderRec.EntryId = sessionSpecificEntryId; folderMapping.FolderRec.ParentId = parentId; base.DestMailbox.CreateFolder(folderMapping.FolderRec, createFolderFlags, out newFolderEntryId); folderMapping.FolderRec.EntryId = entryId; folderMapping.FolderRec.ParentId = parentId2; List <PropValueData> list = new List <PropValueData>(2); Guid contentMailboxGuid = this.GetContentMailboxGuid(sourceFolderRecWrapper); StorePropertyDefinition replicaList = CoreFolderSchema.ReplicaList; byte[] bytesFromStringArray = ReplicaListProperty.GetBytesFromStringArray(new string[] { contentMailboxGuid.ToString() }); list.Add(new PropValueData(PropTag.ReplicaList, bytesFromStringArray)); using (IDestinationFolder folder = base.DestMailbox.GetFolder(sessionSpecificEntryId)) { if (folder == null) { MrsTracer.Service.Error("Something deleted destination folder from under us", new object[0]); throw new UnexpectedErrorPermanentException(-2147221238); } if (isRoot && !this.AssociatedDumpsterExists(folder)) { byte[] value = this.CreateAssociatedDumpsterFolder(folderMapping.FolderName, bytesFromStringArray, sessionSpecificEntryId); list.Add(new PropValueData(PropTag.IpmWasteBasketEntryId, value)); } folder.SetProps(list.ToArray()); } }
protected FolderContentsMapper(FolderMapping folderMapping, ISourceFolder srcFolder, FolderHierarchy sourceHierarchy, IDestinationFolder destFolder, FolderHierarchy destHierarchy, ConflictResolutionOption conflictResolutionOption, FAICopyOption faiCopyOption, FolderContentsMapperFlags mapperFlags) { this.folderMapping = folderMapping; this.srcFolder = srcFolder; this.destFolder = destFolder; this.destHierarchy = destHierarchy; this.sourceHierarchy = sourceHierarchy; this.conflictResolutionOption = conflictResolutionOption; this.faiCopyOption = faiCopyOption; this.sourceMapping = new EntryIdMap <MessageRec>(); this.targetMapping = new EntryIdMap <MessageRec>(); this.mapperFlags = mapperFlags; }
public static FolderContentsMapper Create(FolderMapping folderMapping, ISourceFolder srcFolder, FolderHierarchy sourceHierarchy, IDestinationFolder destFolder, FolderHierarchy destHierarchy, ConflictResolutionOption conflictResolutionOption, FAICopyOption faiCopyOption, FolderContentsMapperFlags mapperFlags) { if (!mapperFlags.HasFlag(FolderContentsMapperFlags.ImapSync)) { return(new FolderContentsMapper(folderMapping, srcFolder, sourceHierarchy, destFolder, destHierarchy, conflictResolutionOption, faiCopyOption, mapperFlags)); } return(new ImapFolderContentsMapper(folderMapping, srcFolder, sourceHierarchy, destFolder, destHierarchy, conflictResolutionOption, faiCopyOption, mapperFlags)); }
public ImapFolderContentsMapper(FolderMapping folderMapping, ISourceFolder srcFolder, FolderHierarchy sourceHierarchy, IDestinationFolder destFolder, FolderHierarchy destHierarchy, ConflictResolutionOption conflictResolutionOption, FAICopyOption faiCopyOption, FolderContentsMapperFlags mapperFlags) : base(folderMapping, srcFolder, sourceHierarchy, destFolder, destHierarchy, conflictResolutionOption, faiCopyOption, mapperFlags) { }
private static byte[] GetCloudIdHash(MessageRec message, MessageRecType messageRecType, FolderHierarchy hierarchy) { if (message[hierarchy.SharingInstanceGuidPtag] == null || Guid.Empty.Equals((Guid)message[hierarchy.SharingInstanceGuidPtag])) { return(null); } string text = message[hierarchy.CloudIdPtag] as string; if (!string.IsNullOrEmpty(text)) { string[] array = text.Split(new char[] { ' ' }); if (array.Length == 2) { return(CommonUtils.GetSHA1Hash(array[1].ToLowerInvariant())); } } return(null); }
private static byte[] GetSyncMessageIdHash(MessageRec message, MessageRecType messageRecType, FolderHierarchy hierarchy) { string text = message[hierarchy.SourceSyncMessageIdPtag] as string; if (!string.IsNullOrEmpty(text)) { return(CommonUtils.GetSHA1Hash(text.ToLowerInvariant())); } return(null); }