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); }
internal Task <bool> HandleP08FileHeader(P08FileHeader p) { return(parent.FileTransfer.OnPacketReceivedAsync(p)); }