/// <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); }
/// <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); } }