Пример #1
0
        private bool ValidateReceivedData(FileTransferIn fileTransfer, out string ErrorMessage)
        {
            ErrorMessage = "";
            switch (fileTransfer.FileType)
            {
            case FileTransferType.Submarine:
                Stream stream = null;

                try
                {
                    stream = SaveUtil.DecompressFiletoStream(fileTransfer.FilePath);
                }
                catch (Exception e)
                {
                    ErrorMessage = "Loading received submarine ''" + fileTransfer.FileName + "'' failed! {" + e.Message + "}";
                    return(false);
                }

                if (stream == null)
                {
                    ErrorMessage = "Decompressing received submarine file''" + fileTransfer.FilePath + "'' failed!";
                    return(false);
                }

                try
                {
                    stream.Position = 0;

                    XmlReaderSettings settings = new XmlReaderSettings();
                    settings.DtdProcessing = DtdProcessing.Prohibit;
                    settings.IgnoreProcessingInstructions = true;

                    using (var reader = XmlReader.Create(stream, settings))
                    {
                        while (reader.Read())
                        {
                            ;
                        }
                    }
                }
                catch
                {
                    stream.Close();
                    stream.Dispose();

                    ErrorMessage = "Parsing file ''" + fileTransfer.FilePath + "'' failed! The file may not be a valid submarine file.";
                    return(false);
                }

                stream.Close();
                stream.Dispose();
                break;

            case FileTransferType.CampaignSave:
                //TODO: verify that the received file is a valid save file
                break;
            }

            return(true);
        }
Пример #2
0
        private bool IsReceivedFileValid()
        {
            switch (fileType)
            {
            case FileTransferMessageType.Submarine:
                string file   = Path.Combine(downloadFolder, FileName);
                Stream stream = null;

                try
                {
                    stream = SaveUtil.DecompressFiletoStream(file);
                }
                catch (Exception e)
                {
                    ErrorMessage = "Loading submarine ''" + file + "'' failed! {" + e.Message + "}";
                    return(false);
                }

                if (stream == null)
                {
                    ErrorMessage = "Decompressing submarine file''" + file + "'' failed!";
                    return(false);
                }

                try
                {
                    stream.Position = 0;

                    XmlReaderSettings settings = new XmlReaderSettings();
                    settings.DtdProcessing = DtdProcessing.Prohibit;
                    settings.IgnoreProcessingInstructions = true;

                    using (var reader = XmlReader.Create(stream, settings))
                    {
                        while (reader.Read())
                        {
                        }
                    }
                }
                catch
                {
                    stream.Close();
                    stream.Dispose();

                    ErrorMessage = "Parsing file ''" + file + "'' failed! The file may not be a valid submarine file.";
                    return(false);
                }

                stream.Close();
                stream.Dispose();
                break;
            }

            return(true);
        }
Пример #3
0
        private bool ValidateReceivedData(FileTransferIn fileTransfer, out string ErrorMessage)
        {
            ErrorMessage = "";
            switch (fileTransfer.FileType)
            {
            case FileTransferType.Submarine:
                System.IO.Stream stream;
                try
                {
                    stream = SaveUtil.DecompressFiletoStream(fileTransfer.FilePath);
                }
                catch (Exception e)
                {
                    ErrorMessage = "Loading received submarine \"" + fileTransfer.FileName + "\" failed! {" + e.Message + "}";
                    return(false);
                }

                if (stream == null)
                {
                    ErrorMessage = "Decompressing received submarine file \"" + fileTransfer.FilePath + "\" failed!";
                    return(false);
                }

                try
                {
                    stream.Position = 0;

                    XmlReaderSettings settings = new XmlReaderSettings
                    {
                        DtdProcessing = DtdProcessing.Prohibit,
                        IgnoreProcessingInstructions = true
                    };

                    using (var reader = XmlReader.Create(stream, settings))
                    {
                        while (reader.Read())
                        {
                            ;
                        }
                    }
                }
                catch
                {
                    stream?.Close();
                    ErrorMessage = "Parsing file \"" + fileTransfer.FilePath + "\" failed! The file may not be a valid submarine file.";
                    return(false);
                }

                stream?.Close();
                break;

            case FileTransferType.CampaignSave:
                try
                {
                    var files = SaveUtil.EnumerateContainedFiles(fileTransfer.FilePath);
                    foreach (var file in files)
                    {
                        string extension = Path.GetExtension(file);
                        if ((!extension.Equals(".sub", StringComparison.OrdinalIgnoreCase) &&
                             !file.Equals("gamesession.xml")) ||
                            file.CleanUpPathCrossPlatform(correctFilenameCase: false).Contains('/'))
                        {
                            ErrorMessage = $"Found unexpected file in \"{fileTransfer.FileName}\"! ({file})";
                            return(false);
                        }
                    }
                }
                catch (Exception e)
                {
                    ErrorMessage = $"Loading received campaign save \"{fileTransfer.FileName}\" failed! {{{e.Message}}}";
                    return(false);
                }
                break;
            }

            return(true);
        }