mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@762 385bec56-5757-e545-9c3a-d8741f4650f1
230 lines
5.5 KiB
C++
230 lines
5.5 KiB
C++
/*---------------------------------------------------------------------------*
|
|
Project: Horizon
|
|
File: AcChanger.cpp
|
|
|
|
Copyright 2009-2011 Nintendo. All rights reserved.
|
|
|
|
These coded instructions, statements, and computer programs contain
|
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
Company Ltd., and are protected by Federal copyright law. They may
|
|
not be disclosed to third parties or copied or duplicated in any form,
|
|
in whole or in part, without the prior written consent of Nintendo.
|
|
|
|
$Rev$
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#include "AcChanger.h"
|
|
#include <nn/cfg.h>
|
|
#include <nn/cfg/CTR/cfg_ApiSys.h>
|
|
#include <nn/cfg/CTR/detail/cfg_Keys.h>
|
|
#include <nn/cfg/CTR/detail/cfg_DataStructures.h>
|
|
#include <nn/cfg/CTR/cfg_NtrSettings.h>
|
|
#include <nn/cfg/CTR/cfg_ApiNor.h>
|
|
#include <nn/ac/CTR/private/ac_InternalApi.h>
|
|
#include <nn/ac/CTR/private/ac_NetworkSetting.h>
|
|
|
|
namespace
|
|
{
|
|
|
|
struct SaveData
|
|
{
|
|
// インターネット接続設定
|
|
nn::ac::CTR::NetworkSetting m_NetworkSetting[3];
|
|
};
|
|
|
|
SaveData s_SaveData;
|
|
|
|
}
|
|
|
|
AcChanger::AcChanger()
|
|
{
|
|
// TODO 自動生成されたコンストラクター・スタブ
|
|
|
|
}
|
|
|
|
AcChanger::~AcChanger()
|
|
{
|
|
// TODO Auto-generated destructor stub
|
|
}
|
|
|
|
nn::Result AcChanger::RestoreFromBackup()
|
|
{
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::MountSaveData("data:")
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
CheckBackupFormat()
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
RestoreAcDataFromBackup()
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::Unmount("data:")
|
|
);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result AcChanger::CheckBackupFormat()
|
|
{
|
|
size_t maxFiles;
|
|
size_t maxDirectories;
|
|
bool isDuplicateAll;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::GetSaveDataFormatInfo(&maxFiles, &maxDirectories, &isDuplicateAll)
|
|
);
|
|
|
|
NN_LOG("MaxFile = %d, MaxDirectory = %d, Duplicate = %d\n", maxFiles, maxDirectories, isDuplicateAll);
|
|
|
|
if(maxFiles != FILE_NUM ||
|
|
maxDirectories != DIR_NUM ||
|
|
isDuplicateAll != DUPLICATE
|
|
)
|
|
{
|
|
return nn::MakePermanentResult(nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_APPLICATION,
|
|
nn::Result::DESCRIPTION_INVALID_RESULT_VALUE);
|
|
}
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result AcChanger::ImportToBackup()
|
|
{
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
GetAcData()
|
|
);
|
|
|
|
// バックアップメモリをフォーマットします
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::FormatSaveData(FILE_NUM, DIR_NUM, DUPLICATE)
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
ImportAcDatatoBackup()
|
|
);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result AcChanger::GetAcData()
|
|
{
|
|
nn::Result result;
|
|
|
|
// インターネット接続設定取得
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::ac::CTR::InitializeInternal()
|
|
);
|
|
|
|
|
|
ClearNetworkSettingCheck();
|
|
for (s32 i = 0; i < 3; i++)
|
|
{
|
|
result = nn::ac::CTR::LoadNetworkSetting(i, s_SaveData.m_NetworkSetting[i]);
|
|
if (result.IsFailure())
|
|
{
|
|
std::memset(&s_SaveData.m_NetworkSetting[i], 0, sizeof(s_SaveData.m_NetworkSetting[i]));
|
|
}
|
|
else
|
|
{
|
|
m_IsNetworkSettingValid[i] = true;
|
|
}
|
|
}
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::ac::CTR::FinalizeInternal()
|
|
);
|
|
|
|
// 設定が1つも書かれていない
|
|
if(IsNetworkSettingAllInvalid())
|
|
{
|
|
return nn::MakePermanentResult(nn::Result::SUMMARY_NOT_FOUND, nn::Result::MODULE_APPLICATION,
|
|
nn::Result::DESCRIPTION_NOT_FOUND);
|
|
}
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result AcChanger::ImportAcDatatoBackup()
|
|
{
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::MountSaveData("data:")
|
|
);
|
|
|
|
nn::fs::FileOutputStream file;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
file.TryInitialize(L"data:/savedata.bin", true)
|
|
);
|
|
|
|
s32 writeSize;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
file.TryWrite(&writeSize, &s_SaveData, sizeof(s_SaveData), true)
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::CommitSaveData("data:")
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::Unmount("data:")
|
|
);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result AcChanger::RestoreAcDataFromBackup()
|
|
{
|
|
nn::fs::FileInputStream file;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
file.TryInitialize(L"data:/savedata.bin")
|
|
);
|
|
|
|
s32 readSize;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
file.TryRead(&readSize, &s_SaveData, sizeof(s_SaveData))
|
|
);
|
|
|
|
// インターネット接続設定
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::ac::CTR::InitializeInternal()
|
|
);
|
|
|
|
for (s32 i = 0; i < 3; i++)
|
|
{
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::ac::CTR::UpdateNetworkSetting(i, s_SaveData.m_NetworkSetting[i])
|
|
);
|
|
}
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::ac::CTR::FlushNetworkSetting()
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::ac::CTR::FinalizeInternal()
|
|
);
|
|
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
void AcChanger::ClearNetworkSettingCheck()
|
|
{
|
|
for(s32 i = 0; i < 3; i++)
|
|
{
|
|
m_IsNetworkSettingValid[i] = false;
|
|
}
|
|
}
|
|
|
|
bool AcChanger::IsNetworkSettingAllInvalid()
|
|
{
|
|
if(!m_IsNetworkSettingValid[0] && !m_IsNetworkSettingValid[1] && !m_IsNetworkSettingValid[2])
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|