示例#1
0
        void ISourceMailbox.CopyTo(IFxProxy fxProxy, PropTag[] excludeTags)
        {
            MrsTracer.Provider.Function("MapiSourceMailbox.CopyTo", new object[0]);
            base.VerifyMailboxConnection(VerifyMailboxConnectionFlags.None);
            bool flag = false;

            try
            {
                CopyPropertiesFlags copyPropertiesFlags = CopyPropertiesFlags.None;
                if ((base.Flags & LocalMailboxFlags.StripLargeRulesForDownlevelTargets) != LocalMailboxFlags.None)
                {
                    copyPropertiesFlags |= CopyPropertiesFlags.StripLargeRulesForDownlevelTargets;
                }
                using (base.RHTracker.Start())
                {
                    using (FxProxyBudgetWrapper fxProxyBudgetWrapper = new FxProxyBudgetWrapper(fxProxy, false, new Func <IDisposable>(base.RHTracker.StartExclusive), new Action <uint>(base.RHTracker.Charge)))
                    {
                        base.MapiStore.ExportObject(fxProxyBudgetWrapper, copyPropertiesFlags, excludeTags);
                    }
                }
                flag = true;
                fxProxy.Flush();
            }
            finally
            {
                if (!flag)
                {
                    MrsTracer.Provider.Debug("Flushing target proxy after receiving an exception.", new object[0]);
                    CommonUtils.CatchKnownExceptions(new Action(fxProxy.Flush), null);
                }
            }
        }
示例#2
0
        void ISourceFolder.CopyTo(IFxProxy destFxProxy, CopyPropertiesFlags flags, PropTag[] excludeTags)
        {
            MrsTracer.ProxyClient.Function("ISourceFolder.CopyTo({0}): {1}", new object[]
            {
                flags,
                base.FolderName
            });
            byte[]          objectData = destFxProxy.GetObjectData();
            DataExportBatch dataExportBatch;

            if (base.ServerVersion[30])
            {
                dataExportBatch = base.MrsProxy.ISourceFolder_CopyTo(base.Handle, (int)flags, DataConverter <PropTagConverter, PropTag, int> .GetData(excludeTags), objectData);
            }
            else
            {
                dataExportBatch = base.MrsProxy.ISourceFolder_Export2(base.Handle, DataConverter <PropTagConverter, PropTag, int> .GetData(excludeTags), objectData);
            }
            long dataExportHandle = dataExportBatch.DataExportHandle;

            using (FxProxyReceiver fxProxyReceiver = new FxProxyReceiver(destFxProxy, false))
            {
                using (BufferedReceiver bufferedReceiver = new BufferedReceiver(fxProxyReceiver, false, base.MrsProxyClient.UseBuffering, base.MrsProxyClient.UseCompression))
                {
                    RemoteDataExport.ExportRoutine(base.MrsProxy, dataExportHandle, bufferedReceiver, dataExportBatch, base.MrsProxyClient.UseCompression);
                }
            }
        }
示例#3
0
        void ISourceFolder.CopyTo(IFxProxy fxFolderProxy, CopyPropertiesFlags flags, PropTag[] propTagsToExclude)
        {
            MrsTracer.Provider.Function("PstSourceFolder.ISourceFolder.CopyTo", new object[0]);
            bool exportCompleted = false;

            CommonUtils.ProcessKnownExceptions(delegate
            {
                FxCollectorSerializer fxCollectorSerializer = new FxCollectorSerializer(fxFolderProxy);
                fxCollectorSerializer.Config(0, 1);
                using (FastTransferDownloadContext fastTransferDownloadContext = FastTransferDownloadContext.CreateForDownload(FastTransferSendOption.Unicode | FastTransferSendOption.UseCpId | FastTransferSendOption.ForceUnicode, 1U, Encoding.ASCII, NullResourceTracker.Instance, this.GetPropertyFilterFactory(PstMailbox.MoMTPtaFromPta(propTagsToExclude)), false))
                {
                    IFastTransferProcessor <FastTransferDownloadContext> fastTransferObject = FastTransferFolderCopyTo.CreateDownloadStateMachine(this.Folder, FastTransferFolderContentBase.IncludeSubObject.None);
                    fastTransferDownloadContext.PushInitial(fastTransferObject);
                    FxUtils.TransferFxBuffers(fastTransferDownloadContext, fxCollectorSerializer);
                }
                exportCompleted = true;
                fxFolderProxy.Flush();
            }, delegate(Exception ex)
            {
                if (!exportCompleted)
                {
                    MrsTracer.Provider.Debug("Flushing target proxy after receiving an exception.", new object[0]);
                    CommonUtils.CatchKnownExceptions(new Action(fxFolderProxy.Flush), null);
                }
                return(false);
            });
        }
        void ISourceFolder.ExportMessages(IFxProxy destFolderProxy, CopyMessagesFlags flags, byte[][] entryIds)
        {
            MrsTracer.Provider.Function("StorageSourceFolder.ExportMessages({0})", new object[]
            {
                base.DisplayNameForTracing
            });
            bool exportCompleted = false;

            CommonUtils.ProcessKnownExceptions(delegate
            {
                using (this.Mailbox.RHTracker.Start())
                {
                    using (FxProxyBudgetWrapper fxProxyBudgetWrapper = new FxProxyBudgetWrapper(destFolderProxy, false, new Func <IDisposable>(this.Mailbox.RHTracker.StartExclusive), new Action <uint>(this.Mailbox.RHTracker.Charge)))
                    {
                        this.MapiFolder.ExportMessages(fxProxyBudgetWrapper, flags, entryIds);
                    }
                }
                exportCompleted = true;
                destFolderProxy.Flush();
            }, delegate(Exception ex)
            {
                if (!exportCompleted)
                {
                    MrsTracer.Provider.Debug("Flushing target proxy after receiving an exception.", new object[0]);
                    CommonUtils.CatchKnownExceptions(new Action(destFolderProxy.Flush), null);
                }
                return(false);
            });
        }
        void ISourceFolder.CopyTo(IFxProxy destFolderProxy, CopyPropertiesFlags flags, PropTag[] excludeTags)
        {
            MrsTracer.Provider.Function("StorageSourceFolder.CopyTo({0})", new object[]
            {
                base.DisplayNameForTracing
            });
            if ((base.Mailbox.Flags & LocalMailboxFlags.StripLargeRulesForDownlevelTargets) != LocalMailboxFlags.None)
            {
                flags |= CopyPropertiesFlags.StripLargeRulesForDownlevelTargets;
            }
            bool exportCompleted = false;

            CommonUtils.ProcessKnownExceptions(delegate
            {
                using (this.Mailbox.RHTracker.Start())
                {
                    using (FxProxyBudgetWrapper fxProxyBudgetWrapper = new FxProxyBudgetWrapper(destFolderProxy, false, new Func <IDisposable>(this.Mailbox.RHTracker.StartExclusive), new Action <uint>(this.Mailbox.RHTracker.Charge)))
                    {
                        this.MapiFolder.ExportObject(fxProxyBudgetWrapper, flags, excludeTags);
                    }
                }
                exportCompleted = true;
                destFolderProxy.Flush();
            }, delegate(Exception ex)
            {
                if (!exportCompleted)
                {
                    MrsTracer.Provider.Debug("Flushing target proxy after receiving an exception.", new object[0]);
                    CommonUtils.CatchKnownExceptions(new Action(destFolderProxy.Flush), null);
                }
                return(false);
            });
        }
示例#6
0
        void ISourceFolder.ExportMessages(IFxProxy destFolderProxy, CopyMessagesFlags flags, byte[][] entryIds)
        {
            MrsTracer.Provider.Function("MapiSourceFolder.CopyTo", new object[0]);
            bool flag = false;

            try
            {
                using (base.Mailbox.RHTracker.Start())
                {
                    using (FxProxyBudgetWrapper fxProxyBudgetWrapper = new FxProxyBudgetWrapper(destFolderProxy, false, new Func <IDisposable>(base.Mailbox.RHTracker.StartExclusive), new Action <uint>(base.Mailbox.RHTracker.Charge)))
                    {
                        base.Folder.ExportMessages(fxProxyBudgetWrapper, flags, entryIds);
                    }
                }
                flag = true;
                destFolderProxy.Flush();
            }
            catch (LocalizedException)
            {
                if (!flag)
                {
                    MrsTracer.Provider.Debug("Flushing target proxy after receiving an exception.", new object[0]);
                    CommonUtils.CatchKnownExceptions(new Action(destFolderProxy.Flush), null);
                }
                throw;
            }
        }
示例#7
0
        void ISourceFolder.CopyTo(IFxProxy destFolderProxy, CopyPropertiesFlags flags, PropTag[] excludeTags)
        {
            MrsTracer.Provider.Function("MapiSourceFolder.CopyTo", new object[0]);
            if ((base.Mailbox.Flags & LocalMailboxFlags.StripLargeRulesForDownlevelTargets) != LocalMailboxFlags.None)
            {
                flags |= CopyPropertiesFlags.StripLargeRulesForDownlevelTargets;
            }
            bool flag = false;

            try
            {
                using (base.Mailbox.RHTracker.Start())
                {
                    using (FxProxyBudgetWrapper fxProxyBudgetWrapper = new FxProxyBudgetWrapper(destFolderProxy, false, new Func <IDisposable>(base.Mailbox.RHTracker.StartExclusive), new Action <uint>(base.Mailbox.RHTracker.Charge)))
                    {
                        base.Folder.ExportObject(fxProxyBudgetWrapper, flags, excludeTags);
                    }
                }
                flag = true;
                destFolderProxy.Flush();
            }
            catch (LocalizedException)
            {
                if (!flag)
                {
                    MrsTracer.Provider.Debug("Flushing target proxy after receiving an exception.", new object[0]);
                    CommonUtils.CatchKnownExceptions(new Action(destFolderProxy.Flush), null);
                }
                throw;
            }
        }
 void ISourceMailbox.CopyTo(IFxProxy destMailbox, PropTag[] excludeProps)
 {
     base.CreateContext("ISourceMailbox.CopyTo", new DataContext[]
     {
         new PropTagsDataContext(excludeProps)
     }).Execute(delegate
     {
         ((ISourceMailbox)this.WrappedObject).CopyTo(destMailbox, excludeProps);
     }, true);
 }
示例#9
0
 void ISourceFolder.ExportMessages(IFxProxy destFolderProxy, CopyMessagesFlags flags, byte[][] entryIds)
 {
     base.CreateContext("ISourceFolder.ExportMessages", new DataContext[]
     {
         new SimpleValueDataContext("Flags", flags),
         new EntryIDsDataContext(entryIds)
     }).Execute(delegate
     {
         ((ISourceFolder)this.WrappedObject).ExportMessages(destFolderProxy, flags, entryIds);
     }, true);
 }
示例#10
0
 void IFxProxy.Flush()
 {
     base.CreateContext("IFxProxy.Flush", new DataContext[0]).Execute(delegate
     {
         IFxProxy fxProxy = base.WrappedObject as IFxProxy;
         if (fxProxy != null)
         {
             fxProxy.Flush();
         }
     }, true);
 }
        void IFxProxy.Flush()
        {
            IFxProxy fxProxy = base.WrappedObject as IFxProxy;

            if (fxProxy != null)
            {
                using (base.CreateCostHandle())
                {
                    fxProxy.Flush();
                }
            }
        }
        IFxProxy IDestinationMailbox.GetFxProxy()
        {
            IFxProxy result = null;

            base.CreateContext("IDestinationMailbox.GetFxProxy", new DataContext[0]).Execute(delegate
            {
                result = ((IDestinationMailbox)this.WrappedObject).GetFxProxy();
            }, true);
            if (result == null)
            {
                return(null);
            }
            return(new FxProxyWrapper(result, base.CreateContext));
        }
示例#13
0
        IFxProxy IDestinationFolder.GetFxProxy(FastTransferFlags flags)
        {
            IFxProxy result = null;

            base.CreateContext("IDestinationFolder.GetFxProxy", new DataContext[0]).Execute(delegate
            {
                result = ((IDestinationFolder)this.WrappedObject).GetFxProxy(flags);
            }, true);
            if (result == null)
            {
                return(null);
            }
            return(new FxProxyWrapper(result, base.CreateContext));
        }
        void ISourceMailbox.CopyTo(IFxProxy destMailbox, PropTag[] excludeProps)
        {
            MrsTracer.ProxyClient.Function("RemoteSourceMailbox.CopyTo", new object[0]);
            base.VerifyMailboxConnection();
            byte[]          objectData      = destMailbox.GetObjectData();
            DataExportBatch dataExportBatch = base.MrsProxy.ISourceMailbox_Export2(base.Handle, DataConverter <PropTagConverter, PropTag, int> .GetData(excludeProps), objectData);

            using (FxProxyReceiver fxProxyReceiver = new FxProxyReceiver(destMailbox, false))
            {
                using (BufferedReceiver bufferedReceiver = new BufferedReceiver(fxProxyReceiver, false, base.MrsProxyClient.UseBuffering, base.MrsProxyClient.UseCompression))
                {
                    RemoteDataExport.ExportRoutine(base.MrsProxy, dataExportBatch.DataExportHandle, bufferedReceiver, dataExportBatch, base.MrsProxyClient.UseCompression);
                }
            }
        }
示例#15
0
 public override void CopyFolderProperties(FolderRecWrapper sourceFolderRecWrapper, ISourceFolder sourceFolder, IDestinationFolder destFolder, FolderRecDataFlags dataToCopy, out bool wasPropertyCopyingSkipped)
 {
     wasPropertyCopyingSkipped = false;
     if (this.sessionSpecificEntryIds.ContainsKey(sourceFolderRecWrapper.EntryId) && destFolder != null)
     {
         if (base.SupportsPerUserReadUnreadDataTransfer)
         {
             using (IFxProxy fxProxy = destFolder.GetFxProxy(FastTransferFlags.PassThrough))
             {
                 using (IFxProxy fxProxy2 = base.CreateFxProxyTransmissionPipeline(fxProxy))
                 {
                     sourceFolder.CopyTo(fxProxy2, CopyPropertiesFlags.CopyFolderPerUserData, Array <PropTag> .Empty);
                 }
             }
         }
         base.CopyFolderProperties(sourceFolderRecWrapper, sourceFolder, destFolder, FolderRecDataFlags.Rules, out wasPropertyCopyingSkipped);
     }
 }
示例#16
0
        void ISourceFolder.ExportMessages(IFxProxy destFolderProxy, CopyMessagesFlags flags, byte[][] entryIds)
        {
            MrsTracer.ProxyClient.Function("ISourceFolder.ExportMessages({0}): {1}", new object[]
            {
                flags,
                base.FolderName
            });
            byte[]          objectData       = destFolderProxy.GetObjectData();
            DataExportBatch dataExportBatch  = base.MrsProxy.ISourceFolder_ExportMessages(base.Handle, (int)flags, entryIds, objectData);
            long            dataExportHandle = dataExportBatch.DataExportHandle;

            using (FxProxyReceiver fxProxyReceiver = new FxProxyReceiver(destFolderProxy, false))
            {
                using (BufferedReceiver bufferedReceiver = new BufferedReceiver(fxProxyReceiver, false, base.MrsProxyClient.UseBuffering, base.MrsProxyClient.UseCompression))
                {
                    RemoteDataExport.ExportRoutine(base.MrsProxy, dataExportHandle, bufferedReceiver, dataExportBatch, base.MrsProxyClient.UseCompression);
                }
            }
        }
示例#17
0
        void ISourceFolder.CopyTo(IFxProxy destFolder, CopyPropertiesFlags flags, PropTag[] excludeTags)
        {
            string    text           = "ISourceFolder.CopyTo";
            TimeSpan  targetDuration = TimeSpan.Zero;
            Stopwatch stopwatch      = Stopwatch.StartNew();

            base.CreateContext(text, new DataContext[]
            {
                new PropTagsDataContext(excludeTags)
            }).Execute(delegate
            {
                using (FxProxyCallbackWrapper fxProxyCallbackWrapper = new FxProxyCallbackWrapper(destFolder, true, delegate(TimeSpan duration)
                {
                    targetDuration += duration;
                }))
                {
                    ((ISourceFolder)this.WrappedObject).CopyTo(fxProxyCallbackWrapper, flags, excludeTags);
                }
            }, false);
            base.UpdateDuration(text, stopwatch.Elapsed.Subtract(targetDuration));
        }
示例#18
0
 public void FinalSyncCopyMailboxData()
 {
     if (base.MRSJob.TestIntegration.RemoteExchangeGuidOverride == Guid.Empty)
     {
         using (IFxProxy fxProxy = base.DestMailbox.GetFxProxy())
         {
             using (IFxProxy fxProxy2 = base.CreateFxProxyTransmissionPipeline(fxProxy))
             {
                 base.SourceMailbox.CopyTo(fxProxy2, new PropTag[]
                 {
                     PropTag.ContainerHierarchy,
                     PropTag.ContainerContents
                 });
             }
         }
         if (this.ServerSupportsInferencePropertiesMove(base.SourceMailboxWrapper.MailboxVersion) && this.ServerSupportsInferencePropertiesMove(base.DestMailboxWrapper.MailboxVersion) && base.MRSJob.GetConfig <bool>("CopyInferenceProperties"))
         {
             byte[] badItemId = BitConverter.GetBytes(base.SourceMailbox.GetHashCode());
             CommonUtils.ProcessKnownExceptions(delegate
             {
                 List <PropValueData> list = new List <PropValueData>(2);
                 foreach (PropValueData propValueData in this.SourceMailbox.GetProps(MailboxMover.inferencePropertiesToMove))
                 {
                     if (((PropTag)propValueData.PropTag).ValueType() != PropType.Error)
                     {
                         list.Add(propValueData);
                     }
                 }
                 badItemId = BadMessageRec.ComputeKey(list.ToArray());
                 if (!this.SyncState.BadItems.ContainsKey(badItemId))
                 {
                     this.DestMailbox.SetProps(list.ToArray());
                 }
             }, delegate(Exception failure)
             {
                 if (MapiUtils.IsBadItemIndicator(failure))
                 {
                     List <BadMessageRec> list = new List <BadMessageRec>(1);
                     list.Add(BadMessageRec.InferenceData(failure, badItemId));
                     this.ReportBadItems(list);
                     return(true);
                 }
                 return(false);
             });
         }
     }
     if (base.SupportsPerUserReadUnreadDataTransfer)
     {
         base.Report.Append(MrsStrings.ReportCopyPerUserReadUnreadDataStarted);
         using (ISourceFolder folder = base.SourceMailbox.GetFolder(null))
         {
             using (IDestinationFolder folder2 = base.DestMailbox.GetFolder(null))
             {
                 using (IFxProxy fxProxy3 = folder2.GetFxProxy(FastTransferFlags.PassThrough))
                 {
                     using (IFxProxy fxProxy4 = base.CreateFxProxyTransmissionPipeline(fxProxy3))
                     {
                         folder.CopyTo(fxProxy4, CopyPropertiesFlags.CopyMailboxPerUserData, Array <PropTag> .Empty);
                     }
                 }
             }
         }
         base.Report.Append(MrsStrings.ReportCopyPerUserReadUnreadDataCompleted);
     }
 }
示例#19
0
 void ISourceFolder.ExportMessages(IFxProxy destFolderProxy, CopyMessagesFlags flags, byte[][] entryIds)
 {
     throw new NotImplementedException();
 }
示例#20
0
 void ISourceFolder.CopyTo(IFxProxy fxFolderProxy, CopyPropertiesFlags flags, PropTag[] propTagsToExclude)
 {
 }
示例#21
0
 void ISourceMailbox.CopyTo(IFxProxy destMailboxProxy, PropTag[] excludeTags)
 {
     throw new NotImplementedException();
 }