示例#1
0
        internal async Task <bool> OnPacketReceivedAsync(P08FileHeader packet)
        {
            const string name = nameof(OnPacketReceivedAsync) + "(" + nameof(P08FileHeader) + ")";

            if (currentItem == null) // It may be more efficient not to close the connection but only to cancel the file transfer.
            {
                parent.ExceptionHandler.CloseConnection("InvalidPacket",
                                                        "Cannot resume file transfer for the received file header.",
                                                        nameof(FTSocket), name);
                return(false);
            }
            if (currentItem.Mode != StreamMode.GetHeader && currentItem.Mode != StreamMode.GetFile)
            {
                parent.ExceptionHandler.CloseConnection("InvalidPacket",
                                                        "The running file transfer is not supposed to receive a file header.",
                                                        nameof(FTSocket), name);
                return(false);
            }
            if (currentItem.FileMeta != null)
            {
                parent.ExceptionHandler.CloseConnection("InvalidPacket",
                                                        "The running file transfer has already received a file header.",
                                                        nameof(FTSocket), name);
                return(false);
            }
            currentItem.FileMeta = new FileMeta(packet.BinaryData, parent.ConnectionVersion.Value);
            currentItem.OnFileMetaTransfered();
#if DEBUG
            parent.Log("Successfully received file meta.");
#endif
            if (currentItem.Mode == StreamMode.GetHeader)
            {
                currentItem.Finish(success: true);
                return(await parent.Manager.SendPacketAsync(new P06Accepted(true, 8, ProblemCategory.None)));
            }
            // We do not answer for StreamMode.GetFile here, because this is done by FTSocket.Continue(FTEventArgs)
            // in order to give the opportunity to set keys.
            return(true);
        }
示例#2
0
 internal Task <bool> HandleP08FileHeader(P08FileHeader p)
 {
     return(parent.FileTransfer.OnPacketReceivedAsync(p));
 }