Beispiel #1
0
        /// <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));
     }
 }
Beispiel #3
0
        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));
            }
        }
Beispiel #4
0
 internal virtual Task <bool> HandleP07OpenFileTransfer(P07OpenFileTransfer p)
 {
     p.PrepareReceive(parent.ConnectionVersion.Value);
     return(parent.FileTransfer.OnPacketReceivedAsync(p));
 }