Add support for choosing network service (incl Pretendo+Custom) (#302)

This commit is contained in:
MythicalPlayz 2022-10-11 04:04:47 +02:00 committed by GitHub
parent 52cc7c5996
commit b07e9efba4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 345 additions and 22 deletions

View file

@ -20,7 +20,7 @@ void ActiveSettings::LoadOnce()
g_config.SetFilename(GetPath("settings.xml").generic_wstring());
g_config.Load();
LaunchSettings::ChangeNetworkServiceURL(GetConfig().account.active_service);
std::wstring additionalErrorInfo;
s_has_required_online_files = iosuCrypt_checkRequirementsForOnlineMode(additionalErrorInfo) == IOS_CRYPTO_ONLINE_REQ_OK;
}
@ -121,6 +121,10 @@ bool ActiveSettings::HasRequiredOnlineFiles()
return s_has_required_online_files;
}
NetworkService ActiveSettings::GetNetworkService() {
return static_cast<NetworkService>(GetConfig().account.active_service.GetValue());
}
bool ActiveSettings::DumpShadersEnabled()
{
return s_dump_shaders;

View file

@ -1,6 +1,7 @@
#pragma once
#include "config/CemuConfig.h"
#include "config/NetworkSettings.h"
// global active settings for fast access (reflects settings from command line and game profile)
class ActiveSettings
@ -92,7 +93,7 @@ public:
[[nodiscard]] static uint32 GetPersistentId();
[[nodiscard]] static bool IsOnlineEnabled();
[[nodiscard]] static bool HasRequiredOnlineFiles();
[[nodiscard]] static NetworkService GetNetworkService();
// dump options
[[nodiscard]] static bool DumpShadersEnabled();
[[nodiscard]] static bool DumpTexturesEnabled();

View file

@ -6,6 +6,8 @@ add_library(CemuConfig
ConfigValue.h
LaunchSettings.cpp
LaunchSettings.h
NetworkSettings.cpp
NetworkSettings.h
PermanentConfig.cpp
PermanentConfig.h
PermanentStorage.cpp

View file

@ -322,7 +322,7 @@ void CemuConfig::Load(XMLConfigParser& parser)
auto acc = parser.get("Account");
account.m_persistent_id = acc.get("PersistentId", account.m_persistent_id);
account.online_enabled = acc.get("OnlineEnabled", account.online_enabled);
account.active_service = acc.get("ActiveService",account.active_service);
// debug
auto debug = parser.get("Debug");
#if BOOST_OS_WINDOWS
@ -497,7 +497,7 @@ void CemuConfig::Save(XMLConfigParser& parser)
auto acc = config.set("Account");
acc.set("PersistentId", account.m_persistent_id.GetValue());
acc.set("OnlineEnabled", account.online_enabled.GetValue());
acc.set("ActiveService",account.active_service.GetValue());
// debug
auto debug = config.set("Debug");
#if BOOST_OS_WINDOWS

View file

@ -471,6 +471,7 @@ struct CemuConfig
{
ConfigValueBounds<uint32> m_persistent_id{ Account::kMinPersistendId, Account::kMinPersistendId, 0xFFFFFFFF };
ConfigValue<bool> online_enabled{false};
ConfigValue<int> active_service{0};
}account{};
// input

View file

@ -9,6 +9,7 @@
#include <wx/msgdlg.h>
#include "config/ActiveSettings.h"
#include "config/NetworkSettings.h"
#include "util/crypto/aes128.h"
#include "Cafe/Filesystem/FST/FST.h"
@ -265,3 +266,26 @@ bool LaunchSettings::ExtractorTool(std::wstring_view wud_path, std::string_view
}
void LaunchSettings::ChangeNetworkServiceURL(int ID){
NetworkService Network = static_cast<NetworkService>(ID);
switch (Network)
{
case NetworkService::Nintendo:
serviceURL_ACT = NintendoURLs::ACTURL;
serviceURL_ECS = NintendoURLs::ECSURL;
break;
case NetworkService::Pretendo:
serviceURL_ACT = PretendoURLs::ACTURL;
serviceURL_ECS = PretendoURLs::ECSURL;
break;
case NetworkService::Custom:
serviceURL_ACT = GetNetworkConfig().urls.ACT.GetValue();
serviceURL_ECS = GetNetworkConfig().urls.ECS.GetValue();
break;
default:
serviceURL_ACT = NintendoURLs::ACTURL;
serviceURL_ECS = NintendoURLs::ECSURL;
break;
}
}

View file

@ -30,6 +30,7 @@ public:
static std::string GetActURLPrefix() { return serviceURL_ACT; }
static std::string GetServiceURL_ecs() { return serviceURL_ECS; }
static void ChangeNetworkServiceURL(int ID);
private:
inline static std::optional<fs::path> s_load_game_file{};
@ -46,8 +47,8 @@ private:
inline static std::optional<uint32> s_persistent_id{};
// service URLS
inline static std::string serviceURL_ACT = "https://account.nintendo.net";
inline static std::string serviceURL_ECS = "https://ecs.wup.shop.nintendo.net/ecs/services/ECommerceSOAP";
inline static std::string serviceURL_ACT;
inline static std::string serviceURL_ECS;
// todo - npts and other boss urls

View file

@ -0,0 +1,43 @@
#include "NetworkSettings.h"
#include "LaunchSettings.h"
#include "CemuConfig.h"
#include <boost/dll/runtime_symbol_info.hpp>
#include "Common/FileStream.h"
XMLNetworkConfig_t n_config(L"network_services.xml");
void NetworkConfig::LoadOnce() {
s_full_path = boost::dll::program_location().generic_wstring();
s_path = s_full_path.parent_path();
n_config.SetFilename(GetPath("network_services.xml").generic_wstring());
if(XMLExists()) {
n_config.Load();
}
}
void NetworkConfig::Load(XMLConfigParser& parser){
auto config = parser.get("content");
networkname = config.get("networkname","[Nintendo]");
disablesslver = config.get("disablesslverification",disablesslver);
auto u = config.get("urls");
urls.ACT = u.get("act",NintendoURLs::ACTURL);
urls.ECS = u.get("ecs",NintendoURLs::ECSURL);
urls.NUS = u.get("nus",NintendoURLs::NUSURL);
urls.IAS = u.get("ias",NintendoURLs::IASURL);
urls.CCSU = u.get("ccsu",NintendoURLs::CCSUURL);
urls.CCS = u.get("ccs",NintendoURLs::CCSURL);
urls.IDBE = u.get("idbe",NintendoURLs::IDBEURL);
urls.BOSS = u.get("boss",NintendoURLs::BOSSURL);
urls.TAGAYA = u.get("tagaya",NintendoURLs::TAGAYAURL);
if (static_cast<NetworkService>(GetConfig().account.active_service.GetValue()) == NetworkService::Custom) {
LaunchSettings::ChangeNetworkServiceURL(2);
}
}
bool NetworkConfig::XMLExists() {
if (!fs::exists(GetPath("network_services.xml"))) {
if (static_cast<NetworkService>(GetConfig().account.active_service.GetValue()) == NetworkService::Custom) {
LaunchSettings::ChangeNetworkServiceURL(0);
GetConfig().account.active_service = 0;
}
return false;
} else {return true;}
}

View file

@ -0,0 +1,77 @@
#pragma once
#include "ConfigValue.h"
#include "XMLConfig.h"
enum class NetworkService {
Nintendo,
Pretendo,
Custom,
};
struct NetworkConfig {
NetworkConfig()
{
};
NetworkConfig(const NetworkConfig&) = delete;
ConfigValue<std::string> networkname;
ConfigValue<bool> disablesslver = false;
struct
{
ConfigValue<std::string> ACT;
ConfigValue<std::string> ECS;
ConfigValue<std::string> NUS;
ConfigValue<std::string> IAS;
ConfigValue<std::string> CCSU;
ConfigValue<std::string> CCS;
ConfigValue<std::string> IDBE;
ConfigValue<std::string> BOSS;
ConfigValue<std::string> TAGAYA;
}urls{};
public:
static void LoadOnce();
void Load(XMLConfigParser& parser);
void Save(XMLConfigParser& parser);
static bool XMLExists();
private:
inline static fs::path s_path;
inline static fs::path s_full_path;
[[nodiscard]] static fs::path GetPath(std::string_view p)
{
std::basic_string_view<char8_t> s((const char8_t*)p.data(), p.size());
return s_path / fs::path(s);
}
};
struct NintendoURLs {
inline static std::string ACTURL = "https://account.nintendo.net";
inline static std::string ECSURL = "https://ecs.wup.shop.nintendo.net/ecs/services/ECommerceSOAP";
inline static std::string NUSURL = "https://nus.wup.shop.nintendo.net/nus/services/NetUpdateSOAP";
inline static std::string IASURL = "https://ias.wup.shop.nintendo.net/ias/services/IdentityAuthenticationSOAP";
inline static std::string CCSUURL = "https://ccs.wup.shop.nintendo.net/ccs/download";
inline static std::string CCSURL = "http://ccs.cdn.wup.shop.nintendo.net/ccs/download";
inline static std::string IDBEURL = "https://idbe-wup.cdn.nintendo.net/icondata";
inline static std::string BOSSURL = "https://npts.app.nintendo.net/p01/tasksheet";
inline static std::string TAGAYAURL = "https://tagaya.wup.shop.nintendo.net/tagaya/versionlist";
};
struct PretendoURLs {
inline static std::string ACTURL = "https://account.pretendo.cc";
inline static std::string ECSURL = "https://ecs.wup.shop.pretendo.cc/ecs/services/ECommerceSOAP";
inline static std::string NUSURL = "https://nus.c.shop.pretendo.cc/nus/services/NetUpdateSOAP";
inline static std::string IASURL = "https://ias.c.shop.pretendo.cc/ias/services/IdentityAuthenticationSOAP";
inline static std::string CCSUURL = "https://ccs.c.shop.pretendo.cc/ccs/download";
inline static std::string CCSURL = "http://ccs.cdn.c.shop.pretendo.cc/ccs/download";
inline static std::string IDBEURL = "https://idbe-wup.cdn.pretendo.cc/icondata";
inline static std::string BOSSURL = "https://npts.app.pretendo.cc/p01/tasksheet";
inline static std::string TAGAYAURL = "https://tagaya.wup.shop.pretendo.cc/tagaya/versionlist";
};
typedef XMLDataConfig<NetworkConfig, &NetworkConfig::Load, &NetworkConfig::Save> XMLNetworkConfig_t;
extern XMLNetworkConfig_t n_config;
inline NetworkConfig& GetNetworkConfig() { return n_config.data();};