From f1e2f001cb1730266b29dbbff7bdcd7d9f4783e5 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Fri, 17 Sep 2021 09:32:33 +1000 Subject: [PATCH] ncm: skeleton new commands --- .../stratosphere/ncm/ncm_host_content.hpp | 21 ++++++++ .../ncm/ncm_i_content_storage.hpp | 4 +- .../source/ncm/ncm_content_storage_impl.cpp | 8 +++ .../source/ncm/ncm_content_storage_impl.hpp | 2 + .../ncm/ncm_content_storage_impl_base.hpp | 2 + .../ncm_read_only_content_storage_impl.cpp | 50 +++++++++++-------- .../ncm_read_only_content_storage_impl.hpp | 2 + .../ncm/ncm_remote_content_storage_impl.hpp | 8 +++ .../include/vapours/results/ncm_results.hpp | 3 +- 9 files changed, 77 insertions(+), 23 deletions(-) create mode 100644 libraries/libstratosphere/include/stratosphere/ncm/ncm_host_content.hpp diff --git a/libraries/libstratosphere/include/stratosphere/ncm/ncm_host_content.hpp b/libraries/libstratosphere/include/stratosphere/ncm/ncm_host_content.hpp new file mode 100644 index 000000000..fdfe59fcc --- /dev/null +++ b/libraries/libstratosphere/include/stratosphere/ncm/ncm_host_content.hpp @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2019-2020 Adubbz, Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once +#include + +namespace ams::ncm { + +} diff --git a/libraries/libstratosphere/include/stratosphere/ncm/ncm_i_content_storage.hpp b/libraries/libstratosphere/include/stratosphere/ncm/ncm_i_content_storage.hpp index 232e48cee..5f1a848ce 100644 --- a/libraries/libstratosphere/include/stratosphere/ncm/ncm_i_content_storage.hpp +++ b/libraries/libstratosphere/include/stratosphere/ncm/ncm_i_content_storage.hpp @@ -50,6 +50,8 @@ AMS_SF_METHOD_INFO(C, H, 24, Result, FlushPlaceHolder, (), (), hos::Version_3_0_0) \ AMS_SF_METHOD_INFO(C, H, 25, Result, GetSizeFromPlaceHolderId, (sf::Out out, ncm::PlaceHolderId placeholder_id), (out, placeholder_id), hos::Version_4_0_0) \ AMS_SF_METHOD_INFO(C, H, 26, Result, RepairInvalidFileAttribute, (), (), hos::Version_4_0_0) \ - AMS_SF_METHOD_INFO(C, H, 27, Result, GetRightsIdFromPlaceHolderIdWithCache, (sf::Out out_rights_id, ncm::PlaceHolderId placeholder_id, ncm::ContentId cache_content_id), (out_rights_id, placeholder_id, cache_content_id), hos::Version_8_0_0) + AMS_SF_METHOD_INFO(C, H, 27, Result, GetRightsIdFromPlaceHolderIdWithCache, (sf::Out out_rights_id, ncm::PlaceHolderId placeholder_id, ncm::ContentId cache_content_id), (out_rights_id, placeholder_id, cache_content_id), hos::Version_8_0_0) \ + AMS_SF_METHOD_INFO(C, H, 28, Result, RegisterPath, (const ncm::ContentId &content_id, const ncm::Path &path), (content_id, path), hos::Version_13_0_0) \ + AMS_SF_METHOD_INFO(C, H, 29, Result, ClearRegisteredPath, (), (), hos::Version_13_0_0) AMS_SF_DEFINE_INTERFACE(ams::ncm, IContentStorage, AMS_NCM_I_CONTENT_STORAGE_INTERFACE_INFO) diff --git a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp index d79b98673..63cb1f30e 100644 --- a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp +++ b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.cpp @@ -897,4 +897,12 @@ namespace ams::ncm { return ResultSuccess(); } + Result ContentStorageImpl::RegisterPath(const ContentId &content_id, const Path &path) { + return ncm::ResultInvalidOperation(); + } + + Result ContentStorageImpl::ClearRegisteredPath() { + return ncm::ResultInvalidOperation(); + } + } diff --git a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.hpp b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.hpp index bb823270d..7d321a5be 100644 --- a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.hpp +++ b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl.hpp @@ -100,6 +100,8 @@ namespace ams::ncm { virtual Result GetSizeFromPlaceHolderId(sf::Out out, PlaceHolderId placeholder_id) override; virtual Result RepairInvalidFileAttribute() override; virtual Result GetRightsIdFromPlaceHolderIdWithCache(sf::Out out_rights_id, PlaceHolderId placeholder_id, ContentId cache_content_id) override; + virtual Result RegisterPath(const ContentId &content_id, const Path &path) override; + virtual Result ClearRegisteredPath() override; }; } diff --git a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl_base.hpp b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl_base.hpp index 0d44056e8..455c55582 100644 --- a/libraries/libstratosphere/source/ncm/ncm_content_storage_impl_base.hpp +++ b/libraries/libstratosphere/source/ncm/ncm_content_storage_impl_base.hpp @@ -75,6 +75,8 @@ namespace ams::ncm { virtual Result GetSizeFromPlaceHolderId(sf::Out out, PlaceHolderId placeholder_id) = 0; virtual Result RepairInvalidFileAttribute() = 0; virtual Result GetRightsIdFromPlaceHolderIdWithCache(sf::Out out_rights_id, PlaceHolderId placeholder_id, ContentId cache_content_id) = 0; + virtual Result RegisterPath(const ContentId &content_id, const Path &path) = 0; + virtual Result ClearRegisteredPath() = 0; }; static_assert(ncm::IsIContentStorage); diff --git a/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp b/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp index 5e5b5a254..e44a5d620 100644 --- a/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp +++ b/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.cpp @@ -61,31 +61,31 @@ namespace ams::ncm { } Result ReadOnlyContentStorageImpl::GeneratePlaceHolderId(sf::Out out) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::CreatePlaceHolder(PlaceHolderId placeholder_id, ContentId content_id, s64 size) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::DeletePlaceHolder(PlaceHolderId placeholder_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::HasPlaceHolder(sf::Out out, PlaceHolderId placeholder_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::WritePlaceHolder(PlaceHolderId placeholder_id, s64 offset, const sf::InBuffer &data) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::Register(PlaceHolderId placeholder_id, ContentId content_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::Delete(ContentId content_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::Has(sf::Out out, ContentId content_id) { @@ -134,23 +134,23 @@ namespace ams::ncm { } Result ReadOnlyContentStorageImpl::GetPlaceHolderPath(sf::Out out, PlaceHolderId placeholder_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::CleanupAllPlaceHolder() { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::ListPlaceHolder(sf::Out out_count, const sf::OutArray &out_buf) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::GetContentCount(sf::Out out_count) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::ListContentId(sf::Out out_count, const sf::OutArray &out_buf, s32 offset) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::GetSizeFromContentId(sf::Out out_size, ContentId content_id) { @@ -175,11 +175,11 @@ namespace ams::ncm { } Result ReadOnlyContentStorageImpl::RevertToPlaceHolder(PlaceHolderId placeholder_id, ContentId old_content_id, ContentId new_content_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::SetPlaceHolderSize(PlaceHolderId placeholder_id, s64 size) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::ReadContentIdFile(const sf::OutBuffer &buf, ContentId content_id, s64 offset) { @@ -199,11 +199,11 @@ namespace ams::ncm { } Result ReadOnlyContentStorageImpl::GetRightsIdFromPlaceHolderIdDeprecated(sf::Out out_rights_id, PlaceHolderId placeholder_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::GetRightsIdFromPlaceHolderId(sf::Out out_rights_id, PlaceHolderId placeholder_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::GetRightsIdFromContentIdDeprecated(sf::Out out_rights_id, ContentId content_id) { @@ -232,7 +232,7 @@ namespace ams::ncm { } Result ReadOnlyContentStorageImpl::WriteContentForDebug(ContentId content_id, s64 offset, const sf::InBuffer &data) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::GetFreeSpaceSize(sf::Out out_size) { @@ -246,19 +246,27 @@ namespace ams::ncm { } Result ReadOnlyContentStorageImpl::FlushPlaceHolder() { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::GetSizeFromPlaceHolderId(sf::Out out, PlaceHolderId placeholder_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::RepairInvalidFileAttribute() { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); } Result ReadOnlyContentStorageImpl::GetRightsIdFromPlaceHolderIdWithCache(sf::Out out_rights_id, PlaceHolderId placeholder_id, ContentId cache_content_id) { - return ncm::ResultWriteToReadOnlyContentStorage(); + return ncm::ResultNotSupported(); + } + + Result ReadOnlyContentStorageImpl::RegisterPath(const ContentId &content_id, const Path &path) { + return ncm::ResultInvalidOperation(); + } + + Result ReadOnlyContentStorageImpl::ClearRegisteredPath() { + return ncm::ResultInvalidOperation(); } } diff --git a/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.hpp b/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.hpp index 3461ce39e..f06db0516 100644 --- a/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.hpp +++ b/libraries/libstratosphere/source/ncm/ncm_read_only_content_storage_impl.hpp @@ -54,6 +54,8 @@ namespace ams::ncm { virtual Result GetSizeFromPlaceHolderId(sf::Out out, PlaceHolderId placeholder_id) override; virtual Result RepairInvalidFileAttribute() override; virtual Result GetRightsIdFromPlaceHolderIdWithCache(sf::Out out_rights_id, PlaceHolderId placeholder_id, ContentId cache_content_id) override; + virtual Result RegisterPath(const ContentId &content_id, const Path &path) override; + virtual Result ClearRegisteredPath() override; }; } diff --git a/libraries/libstratosphere/source/ncm/ncm_remote_content_storage_impl.hpp b/libraries/libstratosphere/source/ncm/ncm_remote_content_storage_impl.hpp index 11889c492..9ac113fbe 100644 --- a/libraries/libstratosphere/source/ncm/ncm_remote_content_storage_impl.hpp +++ b/libraries/libstratosphere/source/ncm/ncm_remote_content_storage_impl.hpp @@ -189,6 +189,14 @@ namespace ams::ncm { ::NcmRightsId *out = reinterpret_cast<::NcmRightsId *>(out_rights_id.GetPointer()); return ncmContentStorageGetRightsIdFromPlaceHolderIdWithCache(std::addressof(this->srv), out, Convert(placeholder_id), Convert(cache_content_id)); } + + Result RegisterPath(const ContentId &content_id, const Path &path) { + AMS_ABORT("TODO"); + } + + Result ClearRegisteredPath() { + AMS_ABORT("TODO"); + } }; static_assert(ncm::IsIContentStorage); diff --git a/libraries/libvapours/include/vapours/results/ncm_results.hpp b/libraries/libvapours/include/vapours/results/ncm_results.hpp index a1885b395..518df4d40 100644 --- a/libraries/libvapours/include/vapours/results/ncm_results.hpp +++ b/libraries/libvapours/include/vapours/results/ncm_results.hpp @@ -38,7 +38,7 @@ namespace ams::ncm { R_DEFINE_ERROR_RESULT(InvalidInstallTaskState, 160); R_DEFINE_ERROR_RESULT(InvalidPlaceHolderFile, 170); R_DEFINE_ERROR_RESULT(BufferInsufficient, 180); - R_DEFINE_ERROR_RESULT(WriteToReadOnlyContentStorage, 190); + R_DEFINE_ERROR_RESULT(NotSupported, 190); R_DEFINE_ERROR_RESULT(NotEnoughInstallSpace, 200); R_DEFINE_ERROR_RESULT(SystemUpdateNotFoundInPackage, 210); R_DEFINE_ERROR_RESULT(ContentInfoNotFound, 220); @@ -69,6 +69,7 @@ namespace ams::ncm { R_DEFINE_ERROR_RESULT(CreatePlaceHolderCancelled, 291); R_DEFINE_ERROR_RESULT(WritePlaceHolderCancelled, 292); + R_DEFINE_ERROR_RESULT(InvalidOperation, 8180); R_DEFINE_ERROR_RANGE(InvalidArgument, 8181, 8191); R_DEFINE_ERROR_RESULT(InvalidOffset, 8182);