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
|
INCLUDES := source
|
||||||
|
|
||||||
# Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer
|
# Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer
|
||||||
VERSION := 3.0.4
|
VERSION := 3.0.5
|
||||||
|
|
||||||
APP_TITLE := MBMNET
|
APP_TITLE := MBMNET
|
||||||
APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk
|
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)
|
static void worker(void *arg)
|
||||||
{
|
{
|
||||||
(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;
|
Handle done;
|
||||||
snprintf(why, sizeof(why), "Werkzeuge: Server prüft noch ...");
|
snprintf(why, sizeof(why), "Werkzeuge: Server prüft noch ...");
|
||||||
if (R_FAILED(svcCreateEvent(&done, RESET_ONESHOT))) return;
|
if (R_FAILED(svcCreateEvent(&done, RESET_ONESHOT))) return;
|
||||||
u32 pid = 0;
|
u32 pid = 0;
|
||||||
svcGetProcessId(&pid, CUR_PROCESS_HANDLE);
|
svcGetProcessId(&pid, CUR_PROCESS_HANDLE);
|
||||||
Result rc = ACT_AcquireIndependentServiceToken(0xFE, CLIENT_ID, 0, false, false, pid, done);
|
Result rc = ACT_AcquireIndependentServiceToken(0xFE, CLIENT_ID, 0, false, true, pid, done);
|
||||||
if (R_SUCCEEDED(rc)) rc = svcWaitSynchronization(done, 15ULL * 1000 * 1000 * 1000);
|
Result wait = R_SUCCEEDED(rc) ? svcWaitSynchronization(done, 15ULL * 1000 * 1000 * 1000) : rc;
|
||||||
svcCloseHandle(done);
|
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;
|
static IndependentServiceTokenV1 tok;
|
||||||
memset(&tok, 0, sizeof(tok));
|
memset(&tok, 0, sizeof(tok));
|
||||||
if (R_FAILED(rc = ACT_GetIndependentServiceToken(&tok)) || !tok.token[0]) {
|
rc = ACT_GetIndependentServiceToken(&tok);
|
||||||
snprintf(why, sizeof(why), "Werkzeuge: Anmelde-Nachweis leer (%08lX).", (unsigned long)rc);
|
// 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user