From 93703431e2d5318ac4a901b81d31230c40942043 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sat, 25 Aug 2018 11:45:26 -0400 Subject: file_sys: Add Nintendo Submission Package (NSP) --- src/core/file_sys/submission_package.h | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/core/file_sys/submission_package.h (limited to 'src/core/file_sys/submission_package.h') diff --git a/src/core/file_sys/submission_package.h b/src/core/file_sys/submission_package.h new file mode 100644 index 000000000..7b520df57 --- /dev/null +++ b/src/core/file_sys/submission_package.h @@ -0,0 +1,70 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include +#include "common/common_types.h" +#include "common/swap.h" +#include "core/file_sys/content_archive.h" +#include "core/file_sys/vfs.h" +#include "core/loader/loader.h" +#include "romfs_factory.h" + +namespace FileSys { + +class NSP : public ReadOnlyVfsDirectory { +public: + explicit NSP(VirtualFile file); + + Loader::ResultStatus GetStatus() const; + Loader::ResultStatus GetProgramStatus(u64 title_id) const; + // Should only be used when one title id can be assured. + u64 GetFirstTitleID() const; + u64 GetProgramTitleID() const; + std::vector GetTitleIDs() const; + + bool IsExtractedType() const; + + // Common (Can be safely called on both types) + VirtualFile GetRomFS() const; + VirtualDir GetExeFS() const; + + // Type 0 Only (Collection of NCAs + Certificate + Ticket + Meta XML) + std::vector> GetNCAsCollapsed() const; + std::multimap> GetNCAsByTitleID() const; + std::map>> GetNCAs() const; + std::shared_ptr GetNCA(u64 title_id, ContentRecordType type) const; + VirtualFile GetNCAFile(u64 title_id, ContentRecordType type) const; + std::vector GetTitlekey() const; + + std::vector GetFiles() const override; + + std::vector GetSubdirectories() const override; + + std::string GetName() const override; + + VirtualDir GetParentDirectory() const override; + +protected: + bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override; + +private: + VirtualFile file; + + bool extracted; + Loader::ResultStatus status; + std::map program_status; + + std::shared_ptr pfs; + // Map title id -> {map type -> NCA} + std::map>> ncas; + std::vector ticket_files; + + VirtualFile romfs; + VirtualDir exefs; +}; +} // namespace FileSys -- cgit v1.2.3