diff --git a/Source/Core/Core/Config/MainSettings.cpp b/Source/Core/Core/Config/MainSettings.cpp index 502f106c65..4b4b91f43e 100644 --- a/Source/Core/Core/Config/MainSettings.cpp +++ b/Source/Core/Core/Config/MainSettings.cpp @@ -210,6 +210,9 @@ const Info MAIN_ENABLE_SAVESTATES{{System::Main, "Core", "EnableSaveStates const Info MAIN_REAL_WII_REMOTE_REPEAT_REPORTS{ {System::Main, "Core", "RealWiiRemoteRepeatReports"}, true}; +// Empty means use the Dolphin default URL +const Info MAIN_WII_NUS_SHOP_URL{{System::Main, "Core", "WiiNusShopUrl"}, ""}; + // Main.Display const Info MAIN_FULLSCREEN_DISPLAY_RES{ diff --git a/Source/Core/Core/Config/MainSettings.h b/Source/Core/Core/Config/MainSettings.h index 638d52d226..63b89cbadb 100644 --- a/Source/Core/Core/Config/MainSettings.h +++ b/Source/Core/Core/Config/MainSettings.h @@ -131,6 +131,7 @@ extern const Info MAIN_ENABLE_SAVESTATES; extern const Info MAIN_FALLBACK_REGION; extern const Info MAIN_REAL_WII_REMOTE_REPEAT_REPORTS; extern const Info MAIN_OVERRIDE_BOOT_IOS; +extern const Info MAIN_WII_NUS_SHOP_URL; // Main.DSP diff --git a/Source/Core/Core/WiiUtils.cpp b/Source/Core/Core/WiiUtils.cpp index 8bb48ad6b1..9b230359b1 100644 --- a/Source/Core/Core/WiiUtils.cpp +++ b/Source/Core/Core/WiiUtils.cpp @@ -458,11 +458,24 @@ OnlineSystemUpdater::Response OnlineSystemUpdater::GetSystemTitles() doc.save(stream); const std::string request = stream.str(); - // Note: We don't use HTTPS because that would require the user to have - // a device certificate which cannot be redistributed with Dolphin. - // This is fine, because IOS has signature checks. + std::string base_url = Config::Get(Config::MAIN_WII_NUS_SHOP_URL); + if (base_url.empty()) + { + // The NUS servers for the Wii are offline (https://bugs.dolphin-emu.org/issues/12865), + // but the backing data CDN is still active and accessible from other URLs. We take advantage + // of this by hosting our own NetUpdateSOAP endpoint which serves the correct list of titles to + // install along with URLs for the Wii U CDN. +#ifdef ANDROID + // HTTPS is unsupported on Android (https://bugs.dolphin-emu.org/issues/11772). + base_url = "http://fakenus.dolphin-emu.org"; +#else + base_url = "https://fakenus.dolphin-emu.org"; +#endif + } + + const std::string url = fmt::format("{}/nus/services/NetUpdateSOAP", base_url); const Common::HttpRequest::Response response = - m_http.Post("http://nus.shop.wii.com/nus/services/NetUpdateSOAP", request, + m_http.Post(url, request, { {"SOAPAction", "urn:nus.wsapi.broadon.com/GetSystemUpdate"}, {"User-Agent", "wii libnup/1.0"},