From 878819630c1a1e8b26b2c82c7f6bf53367ba7f86 Mon Sep 17 00:00:00 2001 From: N2614 Date: Wed, 27 Apr 2011 12:58:24 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88?= =?UTF-8?q?=E7=A7=BB=E8=A1=8C=E3=81=AE=E3=81=9F=E3=82=81=E3=81=AEState?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20IVS=E3=82=92=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=8F=E5=8F=96=E5=BE=97=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@239 385bec56-5757-e545-9c3a-d8741f4650f1 --- .../sources/ConsoleRestore/Controller.cpp | 47 ++++++++- .../sources/ConsoleRestore/Importer.cpp | 25 +++-- .../sources/ConsoleRestore/Importer.h | 4 +- .../sources/ConsoleRestore/Shop.cpp | 97 +++++++++++-------- .../sources/ConsoleRestore/Shop.h | 4 +- .../ConsoleRestore/TitleDownloader.cpp | 1 - .../sources/common/FileChecker.cpp | 16 +++ .../sources/common/FileChecker.h | 5 + .../sources/common/FileName.h | 1 + 9 files changed, 147 insertions(+), 53 deletions(-) diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp index 5718334..f94e581 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp @@ -106,6 +106,8 @@ typedef enum RestoreState UPDATE_DONE, // アップデート完了 NUP_ONLY_WAIT_SD_EJECT, // NUP_ONLYモードでSDカード抜き待ち NUP_ONLY_WAIT_NEXT, // NUP_ONLYモードでキー入力待ち + TRANSFER_ACCOUNT, // アカウント転送を完了させる + TRANSFER_ACCOUNT_DONE, // アカウント転送完了 DOWNLOAD_IVS, // インフラからIVSを取得する DOWNLOAD_IVS_DONE, // インフラからIVSを取得完了 CHECK_IVS, // IVSとSDカードのセーブデータディレクトリの一致を確認 @@ -148,6 +150,7 @@ void CheckApSetting(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep); void CheckDownloadIvs(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep); void CheckAccountDeleted(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep); +void CheckAccountTransfered(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep); void CheckWriteFinished(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep); void CheckReadIvs(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep); void CheckConsoleInitialized(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep); @@ -284,6 +287,7 @@ void CheckDownloadIvs(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep) +{ + // アカウント移行確認ファイルがあるか? + if (common::ExistsTransferAccountChecked()) + { + CheckDownloadIvs(manager, message, goNextStep); + } + else + { + COMMON_LOGGER("Transfer Account\n"); + s_RestoreState = TRANSFER_ACCOUNT; + } +} + // 書き込み完了かどうかチェック void CheckWriteFinished(common::HardwareStateManager& manager, ::std::vector& message, bool& goNextStep) { @@ -524,6 +544,13 @@ void ShopOperationSingleTemplate( { ShopOperationSuccess(op, logMessage, nextState); } + else if(op == SHOP_OPERATION_CONNECT && nextState == TRANSFER_ACCOUNT_DONE && + GetShopOperationSingleResult() == nn::nim::ResultNeedGetIvs()) + + { + NN_LOG("ResultNeedGetIvs\n"); + ShopOperationSuccess(op, logMessage, nextState); + } else { if (s_ShopOperationRetryCount[op]++ < RETRY_MAX) @@ -942,6 +969,20 @@ void ControlState(common::HardwareStateManager& manager, ::std::vector s_UnregisterThreadStack; -static const size_t EC_BUFFER_SIZE = 128 * 1024; -static u8 s_EcBufffer[EC_BUFFER_SIZE]; +const size_t EC_BUFFER_SIZE = 128 * 1024; +u8 s_EcBufffer[EC_BUFFER_SIZE]; +bool s_IsNimShopInitialized = false; struct ShopThreadParam { @@ -251,11 +252,11 @@ nn::Result FinalizeInternal() namespace ConsoleRestore{ -void ShopOperationConnect(); -void ShopOperationFinalize(); +nn::Result ShopOperationConnect(); +nn::Result ShopOperationFinalize(); -void ShopOperationConnect(ECAccountInfo** pAccountInfo) +nn::Result ShopOperationConnect(ECAccountInfo** pAccountInfo) { nn::Result result = nn::ResultSuccess(); @@ -264,22 +265,28 @@ void ShopOperationConnect(ECAccountInfo** pAccountInfo) -------------------------------------------------------------------- */ NN_LOG("nim::Shop::Connect\n"); result = nn::nim::Shop::Connect(pAccountInfo, s_EcBufffer, EC_BUFFER_SIZE); - NIM_SHOP_RESULT_CHECK(result); + NN_UTIL_RETURN_IF_FAILED(result); PrintECAccountInfo(**pAccountInfo); NN_LOG("\n"); + + return result; } -void ShopOperationInitialize() +nn::Result ShopOperationInitialize() { nn::Result result = nn::ResultSuccess(); /* ------------------------------------------------------------------- Initialize -------------------------------------------------------------------- */ - NN_LOG("nim::InitializeForShop\n"); - result = nn::nim::InitializeForShop(); - NIM_SHOP_RESULT_CHECK(result); + if (!s_IsNimShopInitialized) + { + NN_LOG("nim::InitializeForShop\n"); + result = nn::nim::InitializeForShop(); + NN_UTIL_RETURN_IF_FAILED(result); + s_IsNimShopInitialized = true; + } /* ------------------------------------------------------------------- SetParameter @@ -287,25 +294,32 @@ void ShopOperationInitialize() NN_LOG("nim::Shop::SetApplication Id\n"); nn::nim::Shop::SetApplicationId(); - NIM_SHOP_RESULT_CHECK(result); + NN_UTIL_RETURN_IF_FAILED(result); NN_LOG("nim::Shop::SetTIN\n"); result = nn::nim::Shop::SetTin(CONSOLE_RESTORE_TIN); - NIM_SHOP_RESULT_CHECK(result); + NN_UTIL_RETURN_IF_FAILED(result); + + return result; } -void ShopOperationConnect() +nn::Result ShopOperationConnect() { - ShopOperationInitialize(); + nn::Result result; + result = ShopOperationInitialize(); + NN_UTIL_RETURN_IF_FAILED(result); /* ------------------------------------------------------------------- Connect -------------------------------------------------------------------- */ ECAccountInfo* pAccountInfo; - ShopOperationConnect(&pAccountInfo); + result = ShopOperationConnect(&pAccountInfo); + NN_UTIL_RETURN_IF_FAILED(result); + + return result; } -void ShopOperationFinalize() +nn::Result ShopOperationFinalize() { nn::Result result = nn::ResultSuccess(); @@ -314,11 +328,14 @@ void ShopOperationFinalize() -------------------------------------------------------------------- */ NN_LOG("nim::FinalizeForShop\n"); result = nn::nim::FinalizeForShop(); - NIM_SHOP_RESULT_CHECK(result); + NN_UTIL_RETURN_IF_FAILED(result); + s_IsNimShopInitialized = false; NN_LOG("util::ac::Finalize\n"); result = FinalizeInternal(); - NIM_SHOP_RESULT_CHECK(result); + NN_UTIL_RETURN_IF_FAILED(result); + + return result; } namespace @@ -329,34 +346,31 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param) { s_ShopResult = nn::ResultSuccess(); - if(param.op == SHOP_OPERATION_CLOSE_WITHOUT_CONNECT) - { - ShopOperationFinalize(); - return; - } - NN_LOG("util::ac::Initialize\n"); - InitializeInternal(); - - nn::Result result = nn::ResultSuccess(); + nn::Result result = InitializeInternal(); + NIM_SHOP_RESULT_CHECK(result); switch(param.op) { - case SHOP_OPERATION_CONNECT_WITHOUT_CLOSE: + case SHOP_OPERATION_CONNECT: { - ShopOperationConnect(); - return; - } - - case SHOP_OPERATION_CONNECT_ONLY: - { - ShopOperationConnect(); + result = ShopOperationConnect(); + NIM_SHOP_RESULT_CHECK(result); } break; case SHOP_OPERATION_GET_IVS: { - ShopOperationConnect(); + result = ShopOperationConnect(); + if(result.IsFailure()) + { + // ResultNeedGetIvsは発生するのでエラーとしない + if(result != nn::nim::ResultNeedGetIvs()) + { + NIM_SHOP_RESULT_CHECK(result); + } + + } // IVSを取得する result = nn::nim::Shop::ImportIvsFromInfrastructure(); NIM_SHOP_RESULT_CHECK(result); @@ -365,9 +379,11 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param) case SHOP_OPERATION_UNREGISTER: { - ShopOperationInitialize(); + result = ShopOperationInitialize(); + NIM_SHOP_RESULT_CHECK(result); ECAccountInfo* pAccountInfo; - ShopOperationConnect(&pAccountInfo); + result = ShopOperationConnect(&pAccountInfo); + NIM_SHOP_RESULT_CHECK(result); if (pAccountInfo->accountStatus && pAccountInfo->accountStatus[0] == 'R') { /* --------------------------------------------------------------- @@ -386,6 +402,8 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param) case SHOP_OPERATION_DOWNLOAD_TITLE: { + result = ShopOperationConnect(); + NIM_SHOP_RESULT_CHECK(result); NN_LOG("Try Download %016llx\n", param.config.titleId); result = nn::nim::Shop::StartDownload(param.config); @@ -447,7 +465,8 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param) break; } - ShopOperationFinalize(); + result = ShopOperationFinalize(); + NIM_SHOP_RESULT_CHECK(result); } } diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Shop.h b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Shop.h index 2e124e0..f26134c 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Shop.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Shop.h @@ -26,11 +26,9 @@ namespace ConsoleRestore typedef enum SHOP_OPERATION { - SHOP_OPERATION_CONNECT_ONLY, // Shop::ConnectしてCloseするだけ + SHOP_OPERATION_CONNECT, // Shop::ConnectしてCloseするだけ SHOP_OPERATION_GET_IVS, // Shop::ImportIvsFromInfrastructureを実行 SHOP_OPERATION_UNREGISTER, // Shop::Unregisterを実行 - SHOP_OPERATION_CONNECT_WITHOUT_CLOSE, // Shop::ConnectしてCloseしない - SHOP_OPERATION_CLOSE_WITHOUT_CONNECT, // Shop::ConnectせずいきなりCloseする SHOP_OPERATION_DOWNLOAD_TITLE, // Titleをダウンロードする SHOP_OPERATION_NUM_MAX diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp index 148e326..800b51e 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp @@ -180,7 +180,6 @@ void TitleDownloader::Start() for(u8 i = 0; i < m_TwlTiteNum; i++) { - StartShopOperationSingle(SHOP_OPERATION_CONNECT_WITHOUT_CLOSE); WaitShopOperationAndFinalize(); nn::nim::TitleConfig config; diff --git a/trunk/ConsoleDataMigration/sources/common/FileChecker.cpp b/trunk/ConsoleDataMigration/sources/common/FileChecker.cpp index 69723cf..adbf808 100644 --- a/trunk/ConsoleDataMigration/sources/common/FileChecker.cpp +++ b/trunk/ConsoleDataMigration/sources/common/FileChecker.cpp @@ -65,6 +65,17 @@ bool ExistsFile(FileExistsCheck index) return s_FileExistsCheckeResult[index]; } +void ClearFileCheck(FileExistsCheck index) +{ + if(index > EXISTS_MAX) + { + NN_LOG("Invalid File index!!\n"); + return; + } + + s_FileExistsChecked[index] = false; +} + bool ExistsUpdateCheckedFile() { return ExistsFile(EXISTS_UPDATE_FINISHED); @@ -120,6 +131,11 @@ bool ExistsDeleteAccountChecked() return ExistsFile(EXISTS_DELETE_ACCOUNT); } +bool ExistsTransferAccountChecked() +{ + return ExistsFile(EXISTS_TRANSFER_ACCOUNT); +} + bool ExistsDownloadIvsCheckedFile() { return ExistsFile(EXISTS_DOWNLOAD_IVS); diff --git a/trunk/ConsoleDataMigration/sources/common/FileChecker.h b/trunk/ConsoleDataMigration/sources/common/FileChecker.h index 8c20a4b..a6821c5 100644 --- a/trunk/ConsoleDataMigration/sources/common/FileChecker.h +++ b/trunk/ConsoleDataMigration/sources/common/FileChecker.h @@ -34,6 +34,7 @@ typedef enum FILE_EXISTS_CHECK EXISTS_VERSION_DATA, EXISTS_REGION_DATA, EXISTS_DELETE_ACCOUNT, + EXISTS_TRANSFER_ACCOUNT, EXISTS_DOWNLOAD_IVS, EXISTS_MAX } FileExistsCheck; @@ -51,6 +52,7 @@ const wchar_t* const FILENAME_TABLE[EXISTS_MAX] = common::VERSION_DATA_PATHNAME, common::REGION_DATA_PATHNAME, common::DELETE_ACCOUNT_CHECK_PATHNAME, + common::TRANSFER_ACCOUNT_CHECK_PATHNAME, common::DOWNLOAD_IVS_CHECK_PATHNAME }; @@ -66,8 +68,11 @@ bool ExistsCountryLanguageFile(); bool ExistsVersionData(); bool ExistsRegionData(); bool ExistsDeleteAccountChecked(); +bool ExistsTransferAccountChecked(); bool ExistsDownloadIvsCheckedFile(); +void ClearFileCheck(FileExistsCheck index); + void InitializeFileCheck(); } diff --git a/trunk/ConsoleDataMigration/sources/common/FileName.h b/trunk/ConsoleDataMigration/sources/common/FileName.h index 0cf1b11..87f2926 100644 --- a/trunk/ConsoleDataMigration/sources/common/FileName.h +++ b/trunk/ConsoleDataMigration/sources/common/FileName.h @@ -51,6 +51,7 @@ const wchar_t* const SDMC_ROOT_DIRECTORY_PATH = L"sdmc:/"; const wchar_t* const WRITE_FINISHED_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/WriteFinished"; const wchar_t* const UPDATE_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/UpdateFinished"; const wchar_t* const DELETE_ACCOUNT_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/AccountDeletedChecked"; +const wchar_t* const TRANSFER_ACCOUNT_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/AccountTransferedChecked"; const wchar_t* const DOWNLOAD_IVS_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/DownloadIvsFinished"; const wchar_t* const INITIALIZED_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/ConsoleInitialized"; const wchar_t* const RTC_SYNC_CHECK_PATHNAME = L"sdmc:/CTR_Console_Repair/RtcSyncFinished";