diff --git a/Makefile b/Makefile index 3b2ec92..993da9b 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ SOURCES := source INCLUDES := source # Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer -VERSION := 3.0.1 +VERSION := 3.0.2 APP_TITLE := MBMNET APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk diff --git a/source/patcher.c b/source/patcher.c index be450db..98ff2bb 100644 --- a/source/patcher.c +++ b/source/patcher.c @@ -63,6 +63,7 @@ typedef struct { const char *label; // Name für Meldungen Rule rules[MAX_RULES]; bool optional; // Anwendung statt Systemmodul: nur patchen, wenn installiert und Adresse gefunden + bool soft; // Systemmodul, aber verzichtbar: Adresse nicht gefunden = ohne diesen Patch weiter } Target; #define TITLES_DIR "sdmc:/luma/titles" @@ -79,6 +80,13 @@ static const Target targets[] = { { RULE_EXACT, "https://%s%saccount.nintendo.net/v%u/api/", "/v1/api/" }, { RULE_PREFIX, "https://account.nintendo.net" }, } }, + // SpotPass (BOSS): holt vor jedem Abruf die Policy-Liste von nppl.c.app.nintendowifi.net (abgeschaltet). + // Die App stellt die Adresse zwar zur Laufzeit um (boss:P SetPolicyListUrl), nach einem Neustart gilt + // aber wieder Nintendos - dann scheitern alle Abrufe im Hintergrund, bis man die App öffnet. Der Patch + // macht die MBMNET-Adresse dauerhaft. Verzichtbar: Fehlt die Adresse im Modul, läuft alles andere weiter. + { 0x0004013000003402ULL, SYSMODULE_DIR, "SpotPass", { + { RULE_PREFIX, "https://nppl.c.app.nintendowifi.net" }, + }, false, true }, // Miiverse (JPN, USA, EUR): fragt zuerst den Discovery-Server, wohin es geht, und lädt dann seine Seiten // per HTTPS. Gebaut wird der Patch in olvpatch.c (die Regel hier dient nur der Diagnose). Nur die // installierte Region wird gepatcht. Luma lädt Patches für Anwendungen aus /luma/titles//code.ips (wie Nimbus). @@ -365,7 +373,7 @@ static bool build_patch(const Target *t, const char *server, Patch *p, char *msg } free(code); - if (p->count == 0 && t->optional) return false; + if (p->count == 0 && (t->optional || t->soft)) return false; if (p->count == 0) { char diag[64]; patch_diagnose(diag, sizeof(diag)); @@ -540,7 +548,7 @@ bool patch_enable(const char *server, bool *changed, char *msg, size_t msglen) if (ipsLen[i]) continue; static Patch patch; if (!build_patch(&targets[i], server, &patch, msg, msglen)) { - if (targets[i].optional) { ipsLen[i] = 0; continue; } // nicht installiert: auslassen + if (targets[i].optional || targets[i].soft) { ipsLen[i] = 0; msg[0] = 0; continue; } // auslassen return false; } ipsLen[i] = build_ips(&patch, ips[i], IPS_CAP);