submission_package.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <map>
  5. #include <memory>
  6. #include <set>
  7. #include <vector>
  8. #include "common/common_types.h"
  9. #include "core/file_sys/vfs.h"
  10. namespace Core::Crypto {
  11. class KeyManager;
  12. }
  13. namespace Loader {
  14. enum class ResultStatus : u16;
  15. }
  16. namespace FileSys {
  17. class NCA;
  18. class PartitionFilesystem;
  19. enum class ContentRecordType : u8;
  20. class NSP : public ReadOnlyVfsDirectory {
  21. public:
  22. explicit NSP(VirtualFile file_, u64 title_id = 0, std::size_t program_index_ = 0);
  23. ~NSP() override;
  24. Loader::ResultStatus GetStatus() const;
  25. Loader::ResultStatus GetProgramStatus() const;
  26. // Should only be used when one title id can be assured.
  27. u64 GetProgramTitleID() const;
  28. u64 GetExtractedTitleID() const;
  29. std::vector<u64> GetProgramTitleIDs() const;
  30. bool IsExtractedType() const;
  31. // Common (Can be safely called on both types)
  32. VirtualFile GetRomFS() const;
  33. VirtualDir GetExeFS() const;
  34. // Type 0 Only (Collection of NCAs + Certificate + Ticket + Meta XML)
  35. std::vector<std::shared_ptr<NCA>> GetNCAsCollapsed() const;
  36. std::multimap<u64, std::shared_ptr<NCA>> GetNCAsByTitleID() const;
  37. std::map<u64, std::map<std::pair<TitleType, ContentRecordType>, std::shared_ptr<NCA>>> GetNCAs()
  38. const;
  39. std::shared_ptr<NCA> GetNCA(u64 title_id, ContentRecordType type,
  40. TitleType title_type = TitleType::Application) const;
  41. VirtualFile GetNCAFile(u64 title_id, ContentRecordType type,
  42. TitleType title_type = TitleType::Application) const;
  43. std::vector<Core::Crypto::Key128> GetTitlekey() const;
  44. std::vector<VirtualFile> GetFiles() const override;
  45. std::vector<VirtualDir> GetSubdirectories() const override;
  46. std::string GetName() const override;
  47. VirtualDir GetParentDirectory() const override;
  48. private:
  49. void SetTicketKeys(const std::vector<VirtualFile>& files);
  50. void InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files);
  51. void ReadNCAs(const std::vector<VirtualFile>& files);
  52. VirtualFile file;
  53. const u64 expected_program_id;
  54. const std::size_t program_index;
  55. bool extracted = false;
  56. Loader::ResultStatus status;
  57. std::map<u64, Loader::ResultStatus> program_status;
  58. std::shared_ptr<PartitionFilesystem> pfs;
  59. // Map title id -> {map type -> NCA}
  60. std::map<u64, std::map<std::pair<TitleType, ContentRecordType>, std::shared_ptr<NCA>>> ncas;
  61. std::set<u64> program_ids;
  62. std::vector<VirtualFile> ticket_files;
  63. Core::Crypto::KeyManager& keys;
  64. VirtualFile romfs;
  65. VirtualDir exefs;
  66. };
  67. } // namespace FileSys