private static bool ExportMessageBatch(ISourceMailbox mailbox, List <MessageRec> messages, Func <IFxProxyPool> getProxyPool, ExportMessagesFlags flags, PropTag[] propsToCopyExplicitly, PropTag[] excludeProps, TestIntegration testIntegration, out Exception failure) { failure = null; try { using (IFxProxyPool fxProxyPool = getProxyPool()) { mailbox.ExportMessages(messages, fxProxyPool, flags, propsToCopyExplicitly, excludeProps); } return(true); } catch (Exception ex) { if (!MapiUtils.IsBadItemIndicator(ex, out failure)) { if (failure != ex) { failure.PreserveExceptionStack(); throw failure; } throw; } } return(false); }
protected override void ConfigureProviders(bool continueAfterConfiguringProviders) { using (DisposeGuard disposeGuard = default(DisposeGuard)) { ISourceMailbox sourceMailbox = this.ConfigureSourceMailbox(); disposeGuard.Add <ISourceMailbox>(sourceMailbox); IDestinationMailbox destinationMailbox = this.ConfigureDestinationMailbox(); disposeGuard.Add <IDestinationMailbox>(destinationMailbox); this.PrimaryHierarchyMbxWrapper = this.ConfigureHierarchyMailbox(sourceMailbox, destinationMailbox); string orgID = (base.CachedRequestJob.OrganizationId != null && base.CachedRequestJob.OrganizationId.OrganizationalUnit != null) ? (base.CachedRequestJob.OrganizationId.OrganizationalUnit.Name + "\\") : string.Empty; this.SourceMbxWrapper = new SourceMailboxWrapper(sourceMailbox, MailboxWrapperFlags.Source, MrsStrings.AuxFolderMoveTracingId(orgID, base.CachedRequestJob.SourceExchangeGuid)); this.folderMover.SetMailboxWrappers(this.SourceMbxWrapper, destinationMailbox); disposeGuard.Success(); } base.ConfigureProviders(continueAfterConfiguringProviders); }
public void MessageExport(ISourceMailbox mailbox, List <MessageRec> messages, ExportMessagesFlags flags, PropTag[] excludeProps) { this.RunExportThread(delegate { using (BufferedTransmitter bufferedTransmitter = new BufferedTransmitter(this, this.service.ExportBufferSizeFromMrsKB, false, this.service.UseBufferring, this.service.UseCompression)) { using (AsynchronousTransmitter asynchronousTransmitter = new AsynchronousTransmitter(bufferedTransmitter, false)) { using (FxProxyPoolTransmitter fxProxyPoolTransmitter = new FxProxyPoolTransmitter(asynchronousTransmitter, false, this.service.ClientVersion)) { mailbox.ExportMessages(messages, fxProxyPoolTransmitter, flags, null, excludeProps); } } } }); }
public void MailboxExport(ISourceMailbox mailbox, PropTag[] excludeTags) { this.RunExportThread(delegate { using (BufferedTransmitter bufferedTransmitter = new BufferedTransmitter(this, this.service.ExportBufferSizeFromMrsKB, false, this.service.UseBufferring, this.service.UseCompression)) { using (AsynchronousTransmitter asynchronousTransmitter = new AsynchronousTransmitter(bufferedTransmitter, false)) { using (FxProxyTransmitter fxProxyTransmitter = new FxProxyTransmitter(asynchronousTransmitter, false)) { mailbox.CopyTo(fxProxyTransmitter, excludeTags); } } } }); }
public void FoldersExport(ISourceMailbox mailbox, List <byte[]> folderIds, ExportFoldersDataToCopyFlags exportFoldersDataToCopyFlags, GetFolderRecFlags folderRecFlags, PropTag[] additionalFolderRecProps, CopyPropertiesFlags copyPropertiesFlags, PropTag[] excludeProps, AclFlags extendedAclFlags) { this.RunExportThread(delegate { using (BufferedTransmitter bufferedTransmitter = new BufferedTransmitter(this, this.service.ExportBufferSizeFromMrsKB, false, this.service.UseBufferring, this.service.UseCompression)) { using (AsynchronousTransmitter asynchronousTransmitter = new AsynchronousTransmitter(bufferedTransmitter, false)) { using (FxProxyPoolTransmitter fxProxyPoolTransmitter = new FxProxyPoolTransmitter(asynchronousTransmitter, false, this.service.ClientVersion)) { mailbox.ExportFolders(folderIds, fxProxyPoolTransmitter, exportFoldersDataToCopyFlags, folderRecFlags, additionalFolderRecProps, copyPropertiesFlags, excludeProps, extendedAclFlags); } } } }); }
private void Initialize(ISourceMailbox sourceMalibox, IReadOnlyCollection <FolderMapping> foldersToCopy, int maxFoldersOpened, int pageSize, int maxPageSize) { ArgumentValidator.ThrowIfNull("sourceMalibox", sourceMalibox); ArgumentValidator.ThrowIfNull("foldersToCopy", foldersToCopy); ArgumentValidator.ThrowIfZeroOrNegative("maxFolderOpened", maxFoldersOpened); ArgumentValidator.ThrowIfZeroOrNegative("pageSize", pageSize); ArgumentValidator.ThrowIfZeroOrNegative("maxPageSize", maxPageSize); this.sourceMalibox = sourceMalibox; this.pageSize = pageSize; this.maxPageSize = maxPageSize; this.folderCount = foldersToCopy.Count; this.maxFoldersOpened = maxFoldersOpened; this.folderEnumerator = foldersToCopy.GetEnumerator(); this.crawlers = new EntryIdMap <FolderContentsCrawler>(Math.Min(this.folderCount, this.maxFoldersOpened)); this.crawledFolders = new EntryIdMap <FolderMapping>(this.folderCount); }
private static void ConnectAndValidateSource(ISourceMailbox sourceDatabase, out MailboxServerInformation sourceMailboxServerInfo, out MailboxInformation sourceDatabaseInfo) { sourceDatabase.Connect(MailboxConnectFlags.None); sourceMailboxServerInfo = sourceDatabase.GetMailboxServerInformation(); sourceDatabaseInfo = sourceDatabase.GetMailboxInformation(); MrsTracer.Service.Debug("Switching source public folder database {0} to SyncSource mode.", new object[] { sourceDatabaseInfo }); bool flag; sourceDatabase.SetInTransitStatus(InTransitStatus.SyncSource, out flag); if (!flag) { throw new OfflinePublicFolderMigrationNotSupportedException(); } }
public void MessageExportWithBadMessageDetection(ISourceMailbox mailbox, List <MessageRec> messages, ExportMessagesFlags flags, PropTag[] excludeProps, bool isDownlevelClient) { this.RunExportThread(delegate { List <BadMessageRec> list = new List <BadMessageRec>(); MapiUtils.ExportMessagesWithBadItemDetection(mailbox, messages, delegate { BufferedTransmitter destination = new BufferedTransmitter(this, this.service.ExportBufferSizeFromMrsKB, false, this.service.UseBufferring, this.service.UseCompression); AsynchronousTransmitter destination2 = new AsynchronousTransmitter(destination, true); return(new FxProxyPoolTransmitter(destination2, true, this.service.ClientVersion)); }, flags, null, excludeProps, TestIntegration.Instance, ref list); if (list != null && list.Count > 0) { MessageExportResultTransmitter messageExportResultTransmitter = new MessageExportResultTransmitter(this, isDownlevelClient); messageExportResultTransmitter.SendMessageExportResults(list); ((IDataImport)this).SendMessageAndWaitForReply(FlushMessage.Instance); } }); }
public TranslatorPFProxy(ISourceMailbox sourceMailbox, IDestinationMailbox destinationMailbox, IFxProxyPool destinationProxyPool) : base(destinationProxyPool, true) { this.sourceMailbox = sourceMailbox; this.destinationMailbox = destinationMailbox; }
public PublicFolderMigrationSyncContext(ISourceMailbox sourceDatabase, FolderMap sourceFolderMap, IDestinationMailbox destinationMailbox, FolderMap targetFolderMap, bool isTargetPrimaryHierarchyMailbox) : base(sourceFolderMap, targetFolderMap) { this.sourceDatabase = sourceDatabase; this.destinationMailbox = destinationMailbox; this.isTargetPrimaryHierarchyMailbox = isTargetPrimaryHierarchyMailbox; }
public override void ConfigureProviders() { base.ConfigureProviders(); RequestStatisticsBase cachedRequestJob = base.MRSJob.CachedRequestJob; LocalMailboxFlags localMailboxFlags = LocalMailboxFlags.None; LocalMailboxFlags localMailboxFlags2 = LocalMailboxFlags.None; if (cachedRequestJob.RequestType != MRSRequestType.MailboxRestore && cachedRequestJob.IgnoreRuleLimitErrors) { localMailboxFlags |= LocalMailboxFlags.StripLargeRulesForDownlevelTargets; } if (cachedRequestJob.OrganizationId == null) { OrganizationId forestWideOrgId = OrganizationId.ForestWideOrgId; } switch (cachedRequestJob.RequestType) { case MRSRequestType.Merge: if (cachedRequestJob.SourceIsLocal) { localMailboxFlags |= LocalMailboxFlags.UseHomeMDB; } else { localMailboxFlags |= LocalMailboxFlags.PureMAPI; } if (cachedRequestJob.TargetIsLocal) { localMailboxFlags2 |= LocalMailboxFlags.UseHomeMDB; } else { localMailboxFlags2 |= LocalMailboxFlags.PureMAPI; } break; case MRSRequestType.MailboxImport: localMailboxFlags2 |= LocalMailboxFlags.UseHomeMDB; break; case MRSRequestType.MailboxExport: localMailboxFlags |= LocalMailboxFlags.UseHomeMDB; break; case MRSRequestType.MailboxRestore: localMailboxFlags2 |= LocalMailboxFlags.UseHomeMDB; localMailboxFlags |= LocalMailboxFlags.Restore; break; case MRSRequestType.Sync: localMailboxFlags2 |= LocalMailboxFlags.UseHomeMDB; if (cachedRequestJob.Flags.HasFlag(RequestFlags.TargetIsAggregatedMailbox)) { localMailboxFlags2 |= LocalMailboxFlags.AggregatedMailbox; } if (cachedRequestJob.SyncProtocol == SyncProtocol.Olc) { localMailboxFlags2 |= LocalMailboxFlags.OlcSync; } break; } ISourceMailbox sourceMailbox = null; IDestinationMailbox destinationMailbox = null; switch (cachedRequestJob.RequestType) { case MRSRequestType.Merge: case MRSRequestType.MailboxExport: case MRSRequestType.MailboxRestore: { Guid primaryMailboxGuid = base.SourceMailboxGuid; Guid guid = cachedRequestJob.SourceMDBGuid; if (cachedRequestJob.SourceUser != null) { primaryMailboxGuid = cachedRequestJob.SourceUser.ExchangeGuid; if (localMailboxFlags.HasFlag(LocalMailboxFlags.UseHomeMDB)) { ADObjectId adobjectId = cachedRequestJob.SourceIsArchive ? cachedRequestJob.SourceUser.ArchiveDatabase : cachedRequestJob.SourceUser.Database; if (adobjectId != null) { guid = adobjectId.ObjectGuid; } } } sourceMailbox = this.GetSourceMailbox(new ADObjectId(guid, PartitionId.LocalForest.ForestFQDN), localMailboxFlags, null); sourceMailbox.Config(base.MRSJob.GetReservation(cachedRequestJob.SourceMDBGuid, ReservationFlags.Read), primaryMailboxGuid, base.SourceMailboxGuid, CommonUtils.GetPartitionHint(cachedRequestJob.OrganizationId), guid, MailboxType.SourceMailbox, null); if (cachedRequestJob.RequestType == MRSRequestType.MailboxRestore) { sourceMailbox.ConfigRestore((cachedRequestJob.MailboxRestoreFlags != null) ? cachedRequestJob.MailboxRestoreFlags.Value : MailboxRestoreType.None); } break; } case MRSRequestType.MailboxImport: sourceMailbox = this.GetSourceMailbox(new ADObjectId(Guid.Empty), localMailboxFlags, null); sourceMailbox.ConfigPst(cachedRequestJob.FilePath, cachedRequestJob.ContentCodePage); break; case MRSRequestType.Sync: { sourceMailbox = this.GetSourceMailbox(new ADObjectId(Guid.Empty), localMailboxFlags, null); SyncProtocol syncProtocol = cachedRequestJob.SyncProtocol; if (syncProtocol == SyncProtocol.Eas) { sourceMailbox.ConfigEas(cachedRequestJob.RemoteCredential, cachedRequestJob.EmailAddress, cachedRequestJob.TargetExchangeGuid, cachedRequestJob.SourceServer); } break; } } switch (cachedRequestJob.RequestType) { case MRSRequestType.Merge: case MRSRequestType.MailboxImport: case MRSRequestType.MailboxRestore: case MRSRequestType.Sync: { Guid primaryMailboxGuid2 = base.TargetMailboxGuid; Guid mdbGuid = cachedRequestJob.TargetMDBGuid; if (cachedRequestJob.TargetUser != null) { primaryMailboxGuid2 = cachedRequestJob.TargetUser.ExchangeGuid; ADObjectId adobjectId2 = cachedRequestJob.TargetIsArchive ? cachedRequestJob.TargetUser.ArchiveDatabase : cachedRequestJob.TargetUser.Database; if (adobjectId2 != null) { mdbGuid = adobjectId2.ObjectGuid; } } destinationMailbox = this.GetDestinationMailbox(mdbGuid, localMailboxFlags2, null); if (cachedRequestJob.RequestType == MRSRequestType.Sync && localMailboxFlags2.HasFlag(LocalMailboxFlags.AggregatedMailbox) && !string.IsNullOrEmpty(cachedRequestJob.DomainControllerToUpdate)) { destinationMailbox.ConfigPreferredADConnection(cachedRequestJob.DomainControllerToUpdate); } destinationMailbox.Config(base.MRSJob.GetReservation(cachedRequestJob.TargetMDBGuid, ReservationFlags.Write), primaryMailboxGuid2, base.TargetMailboxGuid, CommonUtils.GetPartitionHint(cachedRequestJob.OrganizationId), mdbGuid, cachedRequestJob.TargetIsLocal ? MailboxType.DestMailboxIntraOrg : MailboxType.DestMailboxCrossOrg, null); if (cachedRequestJob.IsPublicFolderMailboxRestore && cachedRequestJob.RequestType == MRSRequestType.MailboxRestore) { MailboxRestoreType restoreFlags = (cachedRequestJob.MailboxRestoreFlags != null) ? (cachedRequestJob.MailboxRestoreFlags.Value & ~MailboxRestoreType.Recovery) : MailboxRestoreType.None; destinationMailbox.ConfigRestore(restoreFlags); } break; } case MRSRequestType.MailboxExport: destinationMailbox = this.GetDestinationMailbox(Guid.Empty, localMailboxFlags2, null); destinationMailbox.ConfigPst(cachedRequestJob.FilePath, null); destinationMailbox.Config(null, Guid.Empty, Guid.Empty, cachedRequestJob.PartitionHint, Guid.Empty, cachedRequestJob.TargetIsLocal ? MailboxType.DestMailboxIntraOrg : MailboxType.DestMailboxCrossOrg, null); break; } if (cachedRequestJob.RequestType == MRSRequestType.Merge && cachedRequestJob.RequestStyle == RequestStyle.CrossOrg) { bool credentialIsAdmin = cachedRequestJob.IsAdministrativeCredential == null || cachedRequestJob.IsAdministrativeCredential.Value; bool useNTLMAuth = cachedRequestJob.AuthenticationMethod != null && cachedRequestJob.AuthenticationMethod.Value == AuthenticationMethod.Ntlm; if (cachedRequestJob.Direction == RequestDirection.Pull) { ((MapiSourceMailbox)sourceMailbox).ConfigRPCHTTP(cachedRequestJob.RemoteMailboxLegacyDN, cachedRequestJob.RemoteUserLegacyDN, cachedRequestJob.RemoteMailboxServerLegacyDN, cachedRequestJob.OutlookAnywhereHostName, cachedRequestJob.RemoteCredential, credentialIsAdmin, useNTLMAuth); } else { ((MapiDestinationMailbox)destinationMailbox).ConfigRPCHTTP(cachedRequestJob.RemoteMailboxLegacyDN, cachedRequestJob.RemoteUserLegacyDN, cachedRequestJob.RemoteMailboxServerLegacyDN, cachedRequestJob.OutlookAnywhereHostName, cachedRequestJob.RemoteCredential, credentialIsAdmin, useNTLMAuth); } } base.Config(sourceMailbox, destinationMailbox); FolderHierarchyFlags folderHierarchyFlags = FolderHierarchyFlags.None; if (cachedRequestJob.IsPublicFolderMailboxRestore) { folderHierarchyFlags |= FolderHierarchyFlags.PublicFolderMailbox; } this.SourceHierarchy = new FolderHierarchy(folderHierarchyFlags, base.SourceMailboxWrapper); this.DestHierarchy = new FolderHierarchy(folderHierarchyFlags, base.DestMailboxWrapper); FolderIdTranslator folderIdTranslator = new FolderIdTranslator(this.SourceHierarchy, this.DestHierarchy); PrincipalTranslator principalTranslator; if (cachedRequestJob.RequestStyle == RequestStyle.CrossOrg) { principalTranslator = new PrincipalTranslator(base.SourceMailboxWrapper.PrincipalMapper, base.DestMailboxWrapper.PrincipalMapper); } else { principalTranslator = null; } base.ConfigTranslators(principalTranslator, folderIdTranslator); }
public override void ConfigureProviders() { base.ConfigureProviders(); RequestStatisticsBase cachedRequestJob = base.MRSJob.CachedRequestJob; LocalMailboxFlags localMailboxFlags = LocalMailboxFlags.Move; List <MRSProxyCapabilities> list = new List <MRSProxyCapabilities>(); if (cachedRequestJob.IgnoreRuleLimitErrors) { localMailboxFlags |= LocalMailboxFlags.StripLargeRulesForDownlevelTargets; } if (cachedRequestJob.IsSplitPrimaryAndArchive) { list.Add(MRSProxyCapabilities.ArchiveSeparation); } if (cachedRequestJob.TargetContainerGuid != null) { list.Add(MRSProxyCapabilities.ContainerOperations); } LocalMailboxFlags localMailboxFlags2 = LocalMailboxFlags.Move; if (base.Flags.HasFlag(MailboxCopierFlags.ContainerAggregated)) { localMailboxFlags |= LocalMailboxFlags.AggregatedMailbox; localMailboxFlags2 |= LocalMailboxFlags.AggregatedMailbox; } if (cachedRequestJob.RequestType == MRSRequestType.Move && base.IsRoot && base.IsPrimary && base.TargetMailboxContainerGuid != null) { localMailboxFlags2 |= LocalMailboxFlags.CreateNewPartition; } ADObjectId adobjectId = base.IsRoot ? cachedRequestJob.SourceDatabase : cachedRequestJob.SourceArchiveDatabase; if (base.Flags.HasFlag(MailboxCopierFlags.SourceIsArchive) && cachedRequestJob.JobType >= MRSJobType.RequestJobE14R5_PrimaryOrArchiveExclusiveMoves) { MrsTracer.Service.Debug("Overwriting archive guid in Archive MailboxMover...", new object[0]); ADObjectId adobjectId2; if ((adobjectId2 = cachedRequestJob.SourceArchiveDatabase) == null) { adobjectId2 = new ADObjectId(cachedRequestJob.RemoteArchiveDatabaseGuid ?? Guid.Empty); } adobjectId = adobjectId2; base.SourceMdbGuid = adobjectId.ObjectGuid; base.DestMdbGuid = ((cachedRequestJob.TargetArchiveDatabase != null) ? cachedRequestJob.TargetArchiveDatabase.ObjectGuid : (cachedRequestJob.RemoteArchiveDatabaseGuid ?? Guid.Empty)); } ISourceMailbox sourceMailbox = this.GetSourceMailbox(adobjectId, localMailboxFlags, list); IDestinationMailbox destinationMailbox = this.GetDestinationMailbox(base.DestMdbGuid, localMailboxFlags2, list); if (cachedRequestJob.RequestStyle == RequestStyle.CrossOrg && (cachedRequestJob.Flags & RequestFlags.RemoteLegacy) != RequestFlags.None) { if (cachedRequestJob.Direction == RequestDirection.Push) { destinationMailbox.ConfigADConnection(cachedRequestJob.TargetDCName, cachedRequestJob.TargetDCName, cachedRequestJob.TargetCredential); } else { sourceMailbox.ConfigADConnection(cachedRequestJob.SourceDCName, cachedRequestJob.SourceDCName, cachedRequestJob.SourceCredential); } } TenantPartitionHint partitionHint = (cachedRequestJob.SourceIsLocal || cachedRequestJob.CrossResourceForest) ? this.partitionHintToUse : null; TenantPartitionHint partitionHint2 = (cachedRequestJob.TargetIsLocal || cachedRequestJob.CrossResourceForest) ? this.partitionHintToUse : null; if (base.MRSJob.TestIntegration.RemoteExchangeGuidOverride != Guid.Empty) { if (!cachedRequestJob.SourceIsLocal) { partitionHint = this.partitionHintToUse; } if (!cachedRequestJob.TargetIsLocal) { partitionHint2 = this.partitionHintToUse; } } Guid primaryMailboxGuid = base.Flags.HasFlag(MailboxCopierFlags.ContainerOrg) ? base.SourceMailboxGuid : cachedRequestJob.ExchangeGuid; sourceMailbox.Config(base.MRSJob.GetReservation(base.SourceMdbGuid, ReservationFlags.Read), primaryMailboxGuid, base.SourceMailboxGuid, partitionHint, base.SourceMdbGuid, MailboxType.SourceMailbox, null); destinationMailbox.Config(base.MRSJob.GetReservation(base.DestMdbGuid, ReservationFlags.Write), primaryMailboxGuid, base.TargetMailboxGuid, partitionHint2, base.DestMdbGuid, (cachedRequestJob.RequestStyle == RequestStyle.CrossOrg) ? MailboxType.DestMailboxCrossOrg : MailboxType.DestMailboxIntraOrg, base.TargetMailboxContainerGuid); base.Config(sourceMailbox, destinationMailbox); }
public static void LookupBadMessagesInMailbox(ISourceMailbox mailbox, List <MessageRec> messages, out EntryIdMap <MessageRec> lookedUpMsgs, out EntryIdMap <FolderRec> folderRecs) { EntryIdMap <EntryIdMap <MessageRec> > entryIdMap = new EntryIdMap <EntryIdMap <MessageRec> >(); folderRecs = new EntryIdMap <FolderRec>(); lookedUpMsgs = new EntryIdMap <MessageRec>(); foreach (MessageRec messageRec in messages) { EntryIdMap <MessageRec> entryIdMap2; if (!entryIdMap.TryGetValue(messageRec.FolderId, out entryIdMap2)) { entryIdMap2 = new EntryIdMap <MessageRec>(); entryIdMap.Add(messageRec.FolderId, entryIdMap2); } entryIdMap2[messageRec.EntryId] = null; } MrsTracer.Common.Debug("Looking up {0} messages in {1} folders.", new object[] { messages.Count, entryIdMap.Count }); foreach (KeyValuePair <byte[], EntryIdMap <MessageRec> > keyValuePair in entryIdMap) { using (ISourceFolder folder = mailbox.GetFolder(keyValuePair.Key)) { if (folder == null) { MrsTracer.Common.Warning("Folder {0} disappeared.", new object[] { TraceUtils.DumpEntryId(keyValuePair.Key) }); } else { FolderRec folderRec = folder.GetFolderRec(null, GetFolderRecFlags.None); folderRecs[folderRec.EntryId] = folderRec; EntryIdMap <MessageRec> value = keyValuePair.Value; MrsTracer.Common.Debug("Looking up {0} messages in folder '{1}'.", new object[] { value.Count, folderRec.FolderName }); int num = 0; if (mailbox.IsCapabilitySupported(MRSProxyCapabilities.SimpleExport)) { List <byte[]> keysToLookup = new List <byte[]>(value.Keys); List <MessageRec> list = folder.LookupMessages(PropTag.EntryId, keysToLookup, BadMessageRec.BadItemPtags); if (list == null) { goto IL_230; } using (List <MessageRec> .Enumerator enumerator3 = list.GetEnumerator()) { while (enumerator3.MoveNext()) { MessageRec messageRec2 = enumerator3.Current; lookedUpMsgs[messageRec2.EntryId] = messageRec2; num++; } goto IL_230; } } List <MessageRec> list2 = folder.EnumerateMessages(EnumerateMessagesFlags.RegularMessages, BadMessageRec.BadItemPtags); foreach (MessageRec messageRec3 in list2) { if (value.ContainsKey(messageRec3.EntryId)) { lookedUpMsgs[messageRec3.EntryId] = messageRec3; num++; } } IL_230: MrsTracer.Common.Debug("Found {0} messages.", new object[] { num }); } } } MrsTracer.Common.Debug("Looked up {0} messages.", new object[] { lookedUpMsgs.Count }); }
public static void ExportMessagesWithBadItemDetection(ISourceMailbox mailbox, List <MessageRec> messages, Func <IFxProxyPool> getProxyPool, ExportMessagesFlags flags, PropTag[] propsToCopyExplicitly, PropTag[] excludeProps, TestIntegration testIntegration, ref List <BadMessageRec> badMessages) { MrsTracer.Common.Debug("ExportMessagesWithBadItemDetection: Exporting {0} messages", new object[] { messages.Count }); Exception ex; if (MapiUtils.ExportMessageBatch(mailbox, messages, getProxyPool, flags, propsToCopyExplicitly, excludeProps, testIntegration, out ex)) { return; } MrsTracer.Common.Warning("ExportMessages failed with a bad item error. Current batch count {0}. Will retry copying messages in smaller batches. {1}", new object[] { messages.Count, CommonUtils.FullExceptionMessage(ex) }); if (messages.Count != 1) { int num = messages.Count / 2; List <MessageRec> list = new List <MessageRec>(num); List <MessageRec> list2 = new List <MessageRec>(messages.Count - num); for (int i = 0; i < messages.Count; i++) { if (i < num) { list.Add(messages[i]); } else { list2.Add(messages[i]); } } MapiUtils.ExportMessagesWithBadItemDetection(mailbox, list, getProxyPool, flags, propsToCopyExplicitly, excludeProps, testIntegration, ref badMessages); MapiUtils.ExportMessagesWithBadItemDetection(mailbox, list2, getProxyPool, flags, propsToCopyExplicitly, excludeProps, testIntegration, ref badMessages); return; } MessageRec messageRec = messages[0]; MrsTracer.Common.Warning("Single message {0} copy failed. Error {1}", new object[] { TraceUtils.DumpEntryId(messageRec.EntryId), CommonUtils.FullExceptionMessage(ex) }); EntryIdMap <MessageRec> entryIdMap; EntryIdMap <FolderRec> entryIdMap2; MapiUtils.LookupBadMessagesInMailbox(mailbox, messages, out entryIdMap, out entryIdMap2); MessageRec msgData; if (!entryIdMap.TryGetValue(messageRec.EntryId, out msgData)) { badMessages.Add(BadMessageRec.MissingItem(messageRec)); return; } DownlevelBadItemsPermanentException ex2 = ex as DownlevelBadItemsPermanentException; if (ex2 != null) { badMessages.Add(ex2.BadItems[0]); return; } FolderRec folderRec = entryIdMap2[messageRec.FolderId]; badMessages.Add(BadMessageRec.Item(msgData, folderRec, ex)); }
public PublicFolderMoveSyncContext(ISourceMailbox sourceMailbox, FolderMap sourceFolderMap, IDestinationMailbox destinationMailbox, FolderMap targetFolderMap) : base(sourceFolderMap, targetFolderMap) { this.sourceMailbox = sourceMailbox; this.destinationMailbox = destinationMailbox; }
internal MailboxContentsCrawler(ISourceMailbox sourceMalibox, IReadOnlyCollection <FolderMapping> foldersToCopy, int maxFoldersOpened, int pageSize, int maxPageSize) { this.Initialize(sourceMalibox, foldersToCopy, maxFoldersOpened, pageSize, maxPageSize); }