v3.0.5: Anmelde-Nachweis für die Admin-Prüfung geteilt anfordern, Ergebnis von act prüfen, Zwischenspeicher als Notlösung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d1f5f5add3
commit
072b19d227
@@ -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
|
||||
|
||||
+15
-6
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user