Пример #1
0
        /// <summary>
        /// Closes a given transfer, and frees resources that were associated with the
        /// transfer (by invoking the <see cref="FinalizeTransfer"/> method).
        /// </summary>
        /// <returns>The suggested <param name="status" /> if the transfer was found, or
        /// <see cref="TransferStatus.UnknownTransfer"/> if no matching transfer was found.</returns>
        protected virtual TransferStatus CloseTransferInternal(string transferId, TransferStatus status, AbortReason?abortReason, FileSystemTask context, AuditEvent eventId)
        {
            //try to get the transfer
            TTransfer transfer = GetCachedTransfer(transferId, false, context);

            //if we don't have this one (anymore), return corresponding flag
            if (transfer == null)
            {
                return(TransferStatus.UnknownTransfer);
            }

            lock (transfer.SyncRoot)
            {
                CloseTransferImpl(transfer, status, abortReason);

                transfer.Status      = status;
                transfer.AbortReason = abortReason;

                FinalizeTransfer(transfer);
            }

            //audit status change
            AuditHelper.AuditChangedTransferStatus(Auditor, transfer, context, eventId);

            return(status);
        }
Пример #2
0
        /// <summary>
        /// Tells the transfer service that transmission is being
        /// paused for an unknown period of time. This should keep
        /// the transfer enabled, but gives the service time to
        /// free or unlock resources.
        /// </summary>
        /// <param name="transferId">Identifies the transfer and resource.</param>
        /// <exception cref="UnknownTransferException">In case no such transfer
        /// is currently maintained.</exception>
        public virtual void PauseTransfer(string transferId)
        {
            var context = IsUploadService
                      ? FileSystemTask.UploadTransferPauseRequest
                      : FileSystemTask.DownloadTransferPauseRequest;

            TTransfer transfer = GetCachedTransfer(transferId, true, context);

            lock (transfer.SyncRoot)
            {
                if (!transfer.Status.Is(TransferStatus.Starting, TransferStatus.Running))
                {
                    AuditEvent auditEvent = AuditEvent.InvalidTransferStatusChange;
                    AuditHelper.AuditInvalidTransferPauseRequest(Auditor, transfer, context, auditEvent);

                    string msg = "Only active transfers can be paused. Current status is: [{0}].";
                    msg = String.Format(msg, transfer.Status);

                    throw new TransferStatusException(msg)
                          {
                              IsAudited = true, EventId = (int)auditEvent
                          };
                }

                PauseTransferImpl(transfer);
                transfer.Status = TransferStatus.Paused;

                AuditHelper.AuditChangedTransferStatus(Auditor, transfer, context, AuditEvent.TransferPaused);
            }
        }