mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
チケット同期とIVS送信は1度に行う
ショップ接続してCloseしないモードの復活 acのResultチェックのためログ出力コードを挟む git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@242 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
6ff730a779
commit
fd358bb8ba
@ -117,7 +117,6 @@ typedef enum RestoreState
|
||||
DELETE_ACCOUNT, // ショップアカウントを削除する
|
||||
DELETE_ACCOUNT_DONE, // ショップアカウント削除完了
|
||||
SYNC_TICKET, // eTicketを同期する
|
||||
UPLOAD_IVS, // IVSを送信する
|
||||
READ_FILELIST, // ファイル一覧の読み込み
|
||||
RESTORE_TWL_NAND, // TWL NANDの書き込み中
|
||||
RESTORE_TWL_SOUND, // TWLサウンドの書き込み中
|
||||
@ -538,6 +537,12 @@ void ShopOperationSingleTemplate(
|
||||
{
|
||||
ShopOperationSuccess(op, logMessage, nextState);
|
||||
}
|
||||
else if(GetShopOperationSingleResult() == nn::ac::ResultFailedConnectAp())
|
||||
{
|
||||
COMMON_LOGGER("Failed Connect AccesPoint.");
|
||||
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromSeconds(5));
|
||||
|
||||
}
|
||||
// IVSがアップロードされていない場合もあるため
|
||||
// IVSを取得できない状況も成功として扱う
|
||||
else if(op == SHOP_OPERATION_GET_IVS && GetShopOperationSingleResult() == nn::nim::ResultCannotGetIvs())
|
||||
@ -1186,6 +1191,7 @@ void ControlState(common::HardwareStateManager& manager, ::std::vector<std::stri
|
||||
s_RestoreState = FAIL;
|
||||
}
|
||||
|
||||
COMMON_LOGGER("Sync eTicket\n");
|
||||
s_RestoreState = SYNC_TICKET;
|
||||
}
|
||||
break;
|
||||
@ -1193,15 +1199,7 @@ void ControlState(common::HardwareStateManager& manager, ::std::vector<std::stri
|
||||
case SYNC_TICKET:
|
||||
{
|
||||
ShopOperationSingleTemplate(manager, operationMessage, SHOP_OPERATION_CONNECT, "Shop Connect",
|
||||
"Shop Connect Finished.\n", "Shop Connect Failed. Retrying...", UPLOAD_IVS);
|
||||
}
|
||||
break;
|
||||
|
||||
// 本体更新が発生しない状況でNUPすることでIVSが送信される
|
||||
// UPLOAD_IN_PROGRESSでのNUP実行後、サーバが更新されないという前提なので注意
|
||||
case UPLOAD_IVS:
|
||||
{
|
||||
UpdateOperation(manager, operationMessage, DOWNLOAD_TWL);
|
||||
"Shop Connect Finished.\n", "Shop Connect Failed. Retrying...", DOWNLOAD_TWL);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ namespace
|
||||
nn::Result s_ShopResult = nn::ResultSuccess();
|
||||
|
||||
const size_t UNREGISTER_THREAD_STACK_SIZE = 0x1000;
|
||||
nn::os::Thread s_UnregisterThread;
|
||||
nn::os::Thread s_ShopOperationThread;
|
||||
nn::os::StackBuffer<UNREGISTER_THREAD_STACK_SIZE> s_UnregisterThreadStack;
|
||||
|
||||
const size_t EC_BUFFER_SIZE = 128 * 1024;
|
||||
@ -194,45 +194,52 @@ void PrintECAccountInfo(const ECAccountInfo& accountInfo)
|
||||
|
||||
nn::Result PrintNetworkSetting()
|
||||
{
|
||||
nn::Result result;
|
||||
nn::ac::NetworkSetting networkSetting;
|
||||
NN_UTIL_RETURN_IF_FAILED(nn::ac::LoadNetworkSetting(0, networkSetting));
|
||||
result = nn::ac::LoadNetworkSetting(0, networkSetting);
|
||||
COMMON_LOGGER("SSID: %s\n", networkSetting.wireless.essidSecurity.ssid);
|
||||
COMMON_LOGGER("DNS : %d.%d.%d.%d\n",
|
||||
networkSetting.ip.dns[0][0], networkSetting.ip.dns[0][1],
|
||||
networkSetting.ip.dns[0][2], networkSetting.ip.dns[0][3]);
|
||||
return nn::ResultSuccess();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
nn::Result ConnectNetwork()
|
||||
{
|
||||
nn::Result result = nn::ResultSuccess();
|
||||
nn::Result result;
|
||||
nn::ac::Config config;
|
||||
|
||||
result = nn::ac::CreateDefaultConfig(&config);
|
||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
result = nn::ac::ConnectWithoutEula(config);
|
||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
NN_LOG("Success nn::ac::ConnectWithoutEula\n");
|
||||
|
||||
NN_UTIL_RETURN_IF_FAILED(PrintNetworkSetting());
|
||||
result = PrintNetworkSetting();
|
||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
return nn::ResultSuccess();
|
||||
return result;
|
||||
}
|
||||
|
||||
nn::Result InitializeInternal()
|
||||
{
|
||||
nn::Result result = nn::ResultSuccess();
|
||||
nn::Result result;
|
||||
|
||||
result = nn::ac::InitializeInternal();
|
||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
result = ConnectNetwork();
|
||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
return nn::ResultSuccess();
|
||||
return result;
|
||||
}
|
||||
|
||||
nn::Result FinalizeInternal()
|
||||
@ -244,7 +251,7 @@ nn::Result FinalizeInternal()
|
||||
result = nn::ac::FinalizeInternal();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
return nn::ResultSuccess();
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@ -344,10 +351,13 @@ namespace
|
||||
// メイン関数
|
||||
void ShopOperationSingleThreadFunc(ShopThreadParam param)
|
||||
{
|
||||
nn::Result result;
|
||||
|
||||
s_ShopResult = nn::ResultSuccess();
|
||||
|
||||
NN_LOG("util::ac::Initialize\n");
|
||||
nn::Result result = InitializeInternal();
|
||||
result = InitializeInternal();
|
||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||
NIM_SHOP_RESULT_CHECK(result);
|
||||
|
||||
switch(param.op)
|
||||
@ -361,16 +371,8 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param)
|
||||
|
||||
case SHOP_OPERATION_GET_IVS:
|
||||
{
|
||||
result = ShopOperationConnect();
|
||||
if(result.IsFailure())
|
||||
{
|
||||
// ResultNeedGetIvsは発生するのでエラーとしない
|
||||
if(result != nn::nim::ResultNeedGetIvs())
|
||||
{
|
||||
NIM_SHOP_RESULT_CHECK(result);
|
||||
}
|
||||
|
||||
}
|
||||
result = ShopOperationInitialize();
|
||||
NIM_SHOP_RESULT_CHECK(result);
|
||||
// IVSを取得する
|
||||
result = nn::nim::Shop::ImportIvsFromInfrastructure();
|
||||
NIM_SHOP_RESULT_CHECK(result);
|
||||
@ -400,10 +402,16 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param)
|
||||
}
|
||||
break;
|
||||
|
||||
case SHOP_OPERATION_DOWNLOAD_TITLE:
|
||||
case SHOP_OPERATION_CONNECT_WITHOUT_CLOSE:
|
||||
{
|
||||
result = ShopOperationConnect();
|
||||
NIM_SHOP_RESULT_CHECK(result);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
case SHOP_OPERATION_DOWNLOAD_TITLE:
|
||||
NN_LOG("Try Download %016llx\n", param.config.titleId);
|
||||
result = nn::nim::Shop::StartDownload(param.config);
|
||||
|
||||
@ -473,12 +481,12 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param)
|
||||
|
||||
void StartShopOperationSingle(ShopOperation op, nn::nim::TitleConfig config)
|
||||
{
|
||||
NN_LOG("Start ShopOperationSingle\n");
|
||||
NN_LOG("Start ShopOperationSingle, %s\n", SHOP_OPERATION_STR[op]);
|
||||
|
||||
ShopThreadParam param;
|
||||
param.op = op;
|
||||
param.config = config;
|
||||
s_UnregisterThread.Start(ShopOperationSingleThreadFunc, param, s_UnregisterThreadStack);
|
||||
s_ShopOperationThread.Start(ShopOperationSingleThreadFunc, param, s_UnregisterThreadStack);
|
||||
}
|
||||
|
||||
void StartShopOperationSingle(ShopOperation op)
|
||||
@ -486,20 +494,20 @@ void StartShopOperationSingle(ShopOperation op)
|
||||
ShopThreadParam param;
|
||||
param.op = op;
|
||||
|
||||
NN_LOG("Start ShopOperationSingle\n");
|
||||
s_UnregisterThread.Start(ShopOperationSingleThreadFunc, param, s_UnregisterThreadStack);
|
||||
NN_LOG("Start ShopOperationSingle, %s\n", SHOP_OPERATION_STR[op]);
|
||||
s_ShopOperationThread.Start(ShopOperationSingleThreadFunc, param, s_UnregisterThreadStack);
|
||||
}
|
||||
|
||||
void FinalizeShopOperationSingle()
|
||||
{
|
||||
NN_LOG("Finalize ShopOperationSingle\n");
|
||||
s_UnregisterThread.Join();
|
||||
s_UnregisterThread.Finalize();
|
||||
s_ShopOperationThread.Join();
|
||||
s_ShopOperationThread.Finalize();
|
||||
}
|
||||
|
||||
bool IsShopOperationSingleFinished()
|
||||
{
|
||||
return s_UnregisterThread.IsValid() && !s_UnregisterThread.IsAlive();
|
||||
return s_ShopOperationThread.IsValid() && !s_ShopOperationThread.IsAlive();
|
||||
}
|
||||
|
||||
nn::Result GetShopOperationSingleResult()
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
#include <nn.h>
|
||||
#include <nn/nim.h>
|
||||
|
||||
#define CONSOLE_RESTORE_TIN "987654321"
|
||||
const char* const CONSOLE_RESTORE_TIN = "987654321";
|
||||
|
||||
namespace ConsoleRestore
|
||||
{
|
||||
@ -29,11 +29,21 @@ typedef enum SHOP_OPERATION
|
||||
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_DOWNLOAD_TITLE, // Titleをダウンロードする
|
||||
SHOP_OPERATION_NUM_MAX
|
||||
|
||||
} ShopOperation;
|
||||
|
||||
const char* const SHOP_OPERATION_STR[] =
|
||||
{
|
||||
"Connect",
|
||||
"Get Ivs",
|
||||
"Unregister",
|
||||
"Connect Without Close",
|
||||
"Download Title"
|
||||
};
|
||||
|
||||
void StartShopOperationSingle(ShopOperation op, nn::nim::TitleConfig config);
|
||||
void StartShopOperationSingle(ShopOperation op);
|
||||
void FinalizeShopOperationSingle();
|
||||
|
||||
@ -32,8 +32,8 @@ namespace
|
||||
bit8 s_buffer1[400 * 1024];
|
||||
|
||||
const size_t TITLE_DOWNLOADER_STACK_SIZE = 0x1000;
|
||||
nn::os::Thread s_TitleDownloaderThread;
|
||||
nn::os::StackBuffer<TITLE_DOWNLOADER_STACK_SIZE> s_TitleDownloaderThreadStack;
|
||||
nn::os::Thread s_TitleDownloaderThread;
|
||||
nn::os::StackBuffer<TITLE_DOWNLOADER_STACK_SIZE> s_TitleDownloaderThreadStack;
|
||||
|
||||
nn::fs::MediaType GetMediaType(const ES_NAMESPACE::ESTitleId titleId)
|
||||
{
|
||||
@ -71,8 +71,18 @@ nn::Result GetEntry(ES_NAMESPACE::ESTitleId titleId, EC_NAMESPACE::ECTitleCatalo
|
||||
NULL, 0,
|
||||
&titleCatalog, s_buffer1, sizeof(s_buffer1));
|
||||
|
||||
*entry = &(titleCatalog->entries[0]);
|
||||
if(result.IsSuccess())
|
||||
{
|
||||
if(titleCatalog->nEntries == 1)
|
||||
{
|
||||
*entry = &(titleCatalog->entries[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return nn::MakeStatusResult(nn::Result::SUMMARY_NOT_FOUND, nn::Result::MODULE_COMMON, nn::Result::DESCRIPTION_NOT_FOUND);
|
||||
}
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -180,10 +190,12 @@ void TitleDownloader::Start()
|
||||
|
||||
for(u8 i = 0; i < m_TwlTiteNum; i++)
|
||||
{
|
||||
StartShopOperationSingle(SHOP_OPERATION_CONNECT_WITHOUT_CLOSE);
|
||||
WaitShopOperationAndFinalize();
|
||||
|
||||
nn::nim::TitleConfig config;
|
||||
result = GetTitleConfig(m_ProgramIdList[i], &config);
|
||||
COMMON_LOGGER_RESULT_IF_FAILED(result);
|
||||
if (result.IsSuccess())
|
||||
{
|
||||
StartShopOperationSingle(SHOP_OPERATION_DOWNLOAD_TITLE, config);
|
||||
@ -194,9 +206,8 @@ void TitleDownloader::Start()
|
||||
|
||||
nn::Result TitleDownloader::ListUp()
|
||||
{
|
||||
COMMON_LOGGER("Export TwlTitle List.\n");
|
||||
COMMON_LOGGER("Read TwlTitle List.\n");
|
||||
|
||||
nn::Result result;
|
||||
size_t heapSize = common::HeapManager::GetHeap()->GetAllocatableSize();
|
||||
char* titleListBuf = reinterpret_cast<char*> (common::HeapManager::GetHeap()->Allocate(heapSize));
|
||||
|
||||
@ -206,23 +217,24 @@ nn::Result TitleDownloader::ListUp()
|
||||
common::SdReaderWriter sdReader;
|
||||
m_Result = sdReader.ReadBufWithCmac(common::TWL_TITLELIST_PATHNAME, titleListBuf, heapSize, &readSize);
|
||||
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(m_Result);
|
||||
|
||||
u32 listHead = 0;
|
||||
for (u32 i = 0; i < readSize; i++)
|
||||
if (m_Result.IsSuccess())
|
||||
{
|
||||
if (titleListBuf[i] == '\n')
|
||||
u32 listHead = 0;
|
||||
for (u32 i = 0; i < readSize; i++)
|
||||
{
|
||||
char ProgramIdStr[32];
|
||||
char *error;
|
||||
std::memcpy(ProgramIdStr, &titleListBuf[listHead], i - listHead);
|
||||
m_ProgramIdList[m_TwlTiteNum] = std::strtoull(ProgramIdStr, &error, 16);
|
||||
m_TwlTiteNum++;
|
||||
NN_LOG("%016llx\n", m_ProgramIdList[m_TwlTiteNum - 1]);
|
||||
if (titleListBuf[i] == '\n')
|
||||
{
|
||||
char ProgramIdStr[32];
|
||||
char *error;
|
||||
std::memcpy(ProgramIdStr, &titleListBuf[listHead], i - listHead);
|
||||
m_ProgramIdList[m_TwlTiteNum] = std::strtoull(ProgramIdStr, &error, 16);
|
||||
m_TwlTiteNum++;
|
||||
NN_LOG("%016llx\n", m_ProgramIdList[m_TwlTiteNum - 1]);
|
||||
|
||||
listHead = i + 1;
|
||||
listHead = i + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
common::HeapManager::GetHeap()->Free(titleListBuf);
|
||||
}
|
||||
else
|
||||
|
||||
@ -58,8 +58,6 @@ nn::os::StackBuffer<UPDATER_THREAD_STACK_SIZE> s_UpdaterThreadStack;
|
||||
|
||||
u64 s_Progress = 0;
|
||||
|
||||
}
|
||||
|
||||
nn::Result PrintNetworkSetting()
|
||||
{
|
||||
nn::ac::NetworkSetting networkSetting;
|
||||
@ -87,7 +85,7 @@ nn::Result ConnectNetwork()
|
||||
|
||||
NN_UTIL_RETURN_IF_FAILED(PrintNetworkSetting());
|
||||
|
||||
return nn::ResultSuccess();
|
||||
return result;
|
||||
}
|
||||
|
||||
nn::Result InitializeInternal()
|
||||
@ -100,7 +98,7 @@ nn::Result InitializeInternal()
|
||||
result = ConnectNetwork();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
return nn::ResultSuccess();
|
||||
return result;
|
||||
}
|
||||
|
||||
nn::Result FinalizeInternal()
|
||||
@ -112,7 +110,9 @@ nn::Result FinalizeInternal()
|
||||
result = nn::ac::FinalizeInternal();
|
||||
NN_UTIL_RETURN_IF_FAILED(result);
|
||||
|
||||
return nn::ResultSuccess();
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void UpdateThreadFunc()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user