Пример #1
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);
            });
        }
Пример #2
0
        void IMapiFxProxy.ProcessRequest(FxOpcodes opCode, byte[] data)
        {
            switch (opCode)
            {
            case FxOpcodes.Config:
            {
                if (data == null || data.Length != 8)
                {
                    throw new FastTransferBufferException("data", (data == null) ? -1 : data.Length);
                }
                uint transferMethod = BitConverter.ToUInt32(data, 4);
                IFastTransferProcessor <FastTransferUploadContext> fxProcessor = this.GetFxProcessor(transferMethod);
                this.uploadContext = new FastTransferUploadContext(Encoding.ASCII, NullResourceTracker.Instance, PropertyFilterFactory.IncludeAllFactory, this.IsMoveUser);
                this.uploadContext.PushInitial(fxProcessor);
                return;
            }

            case FxOpcodes.TransferBuffer:
                ExAssert.RetailAssert(this.uploadContext != null, "StorageFxProxy:ProcessRequest: null upload context");
                try
                {
                    this.uploadContext.PutNextBuffer(new ArraySegment <byte>(data));
                    return;
                }
                catch (ArgumentException innerException)
                {
                    throw new FastTransferArgumentException(innerException);
                }
                break;

            case FxOpcodes.IsInterfaceOk:
            case FxOpcodes.TellPartnerVersion:
                return;
            }
            throw new FastTransferBufferException("opCode", (int)opCode);
        }