From 072b19d22764f56bcefe957ebcaf8e65c74ca134 Mon Sep 17 00:00:00 2001 From: Nico Meister Date: Mon, 26 Oct 2026 20:34:31 +0100 Subject: [PATCH] =?UTF-8?q?v3.0.5:=20Anmelde-Nachweis=20f=C3=BCr=20die=20A?= =?UTF-8?q?dmin-Pr=C3=BCfung=20geteilt=20anfordern,=20Ergebnis=20von=20act?= =?UTF-8?q?=20pr=C3=BCfen,=20Zwischenspeicher=20als=20Notl=C3=B6sung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- Makefile | 2 +- source/admin.c | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index bad6857..0f3e9a7 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.4 +VERSION := 3.0.5 APP_TITLE := MBMNET APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk diff --git a/source/admin.c b/source/admin.c index 3f1cd0e..850f037 100644 --- a/source/admin.c +++ b/source/admin.c @@ -23,20 +23,29 @@ static char why[96] = "Werkzeuge: kein MBMNET-Konto angemeldet."; // warum (no static void worker(void *arg) { (void)arg; - // 1. Anmelde-Nachweis vom Konto-Dienst (für das gerade angemeldete Konto) + // 1. Anmelde-Nachweis vom Konto-Dienst (für das gerade angemeldete Konto). "shared": danach für jeden + // Prozess abholbar - nur für diesen Prozess angefordert, gab act ihn nicht heraus (E0A14CCE). Handle done; snprintf(why, sizeof(why), "Werkzeuge: Server prüft noch ..."); if (R_FAILED(svcCreateEvent(&done, RESET_ONESHOT))) return; u32 pid = 0; svcGetProcessId(&pid, CUR_PROCESS_HANDLE); - Result rc = ACT_AcquireIndependentServiceToken(0xFE, CLIENT_ID, 0, false, false, pid, done); - if (R_SUCCEEDED(rc)) rc = svcWaitSynchronization(done, 15ULL * 1000 * 1000 * 1000); + Result rc = ACT_AcquireIndependentServiceToken(0xFE, CLIENT_ID, 0, false, true, pid, done); + Result wait = R_SUCCEEDED(rc) ? svcWaitSynchronization(done, 15ULL * 1000 * 1000 * 1000) : rc; svcCloseHandle(done); - if (rc != 0) { snprintf(why, sizeof(why), "Werkzeuge: Anmelde-Nachweis nicht erhalten (%08lX).", (unsigned long)rc); return; } + if (wait != 0) { snprintf(why, sizeof(why), "Werkzeuge: Anmelde-Nachweis nicht erhalten (%08lX).", (unsigned long)wait); return; } + // Ergebnis der Anfrage beim Account-Server (z. B. abgelehnt oder keine Verbindung) + Result result = ACT_GetLastResponseResult(); static IndependentServiceTokenV1 tok; memset(&tok, 0, sizeof(tok)); - if (R_FAILED(rc = ACT_GetIndependentServiceToken(&tok)) || !tok.token[0]) { - snprintf(why, sizeof(why), "Werkzeuge: Anmelde-Nachweis leer (%08lX).", (unsigned long)rc); + rc = ACT_GetIndependentServiceToken(&tok); + // Notlösung: aus dem Zwischenspeicher von act (gerade eben geholt) + if (R_FAILED(rc) || !tok.token[0]) rc = ACT_GetCachedIndependentServiceToken(&tok, 0xFE, CLIENT_ID, 3600, false, true); + if (R_FAILED(rc) || !tok.token[0]) { + Result shown = R_FAILED(result) ? result : rc; + Result code = ACT_ResultToErrorCode(shown); // 022-XXXX wie in den Einstellungen + snprintf(why, sizeof(why), "Werkzeuge: kein Anmelde-Nachweis vom Server\n(%08lX, Fehler %03lu-%04lu).", + (unsigned long)shown, (unsigned long)(code / 10000), (unsigned long)(code % 10000)); return; }