/// <summary> /// Requests the permission to upload a file with its header. All further information is specfied in the <see cref="FTEventArgs"/>. /// </summary> /// <param name="e">Specifies an remote identifier for the file, a local path and many more information of the file to upload.</param> public Task <bool> StartUploadAsync(FTEventArgs e) { e.Assign(parent, this); e.Mode = StreamMode.PushFile; currentItem = e; var packet = new P07OpenFileTransfer(e.Identifier, e.Mode); packet.PrepareSend(parent.ConnectionVersion.Value); return(parent.Manager.SendPacketAsync(packet)); }
// overriding HandleP05KeepAlive is not neccessary. // overriding HandleP06Accepted is not neccessary. internal override Task <bool> HandleP07OpenFileTransfer(P07OpenFileTransfer p) { if (parent.ConnectionVersion.Value < 2) // before VSL 1.2 { parent.ExceptionHandler.CloseConnection("InvalidPacket", "VSL clients can not handle P07OpenFileTransfer.", nameof(PacketHandlerClient), nameof(HandleP07OpenFileTransfer)); return(Task.FromResult(false)); } else { return(base.HandleP07OpenFileTransfer(p)); } }
internal Task <bool> OnPacketReceivedAsync(P07OpenFileTransfer packet) { if (currentItem == null) { FTEventArgs e = new FTEventArgs(packet.Identifier, packet.StreamMode); currentItem = e; parent.ThreadManager.Post(() => Request?.Invoke(this, e)); #if DEBUG parent.Log($"FileTransfer with {e.Mode} and Identifier {e.Identifier} requested"); #endif return(Task.FromResult(true)); } else // It may be more efficient not to close the connection but only to cancel the file transfer. { parent.ExceptionHandler.CloseConnection("InvalidRequest", "A new file transfer was requested before the last one was finished or aborted.", nameof(FTSocket), "OnPacketReceivedAsync(P07OpenFileTransfer)"); return(Task.FromResult(false)); } }
internal virtual Task <bool> HandleP07OpenFileTransfer(P07OpenFileTransfer p) { p.PrepareReceive(parent.ConnectionVersion.Value); return(parent.FileTransfer.OnPacketReceivedAsync(p)); }