v2.9.5: schnelleres Umschalten (Miiverse-CA aus dem SD-Zwischenspeicher, kurzes Warten beim Beenden)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9ffe07ff48
commit
93efce6f58
+24
-2
@@ -13,6 +13,7 @@
|
||||
#include <3ds.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "olvpatch.h"
|
||||
|
||||
@@ -47,17 +48,38 @@ static u32 fetch(const char *server, const char *path, u8 *buf, u32 cap)
|
||||
return R_SUCCEEDED(rc) && status == 200 && got < cap ? got : 0;
|
||||
}
|
||||
|
||||
bool olvpatch_fetch_ca(const char *server, u8 *der, u32 *derLen)
|
||||
// Zwischenspeicher der CA auf der SD: Beim Umschalten nicht jedes Mal den Server fragen (das dauerte
|
||||
// Sekunden, solange das WLAN noch verbindet). Frisch geholt wird beim Auffrischen im Hintergrund.
|
||||
#define CA_DER_CACHE "sdmc:/3ds/mbmnet/cache/olv-ca.der"
|
||||
|
||||
static u32 read_cached(u8 *der)
|
||||
{
|
||||
FILE *f = fopen(CA_DER_CACHE, "rb");
|
||||
if (!f) return 0;
|
||||
u32 n = fread(der, 1, CA_MAX + 1, f);
|
||||
fclose(f);
|
||||
FILE *pem = fopen(CA_PEM_FILE, "rb"); // die PEM-Datei für den Browser muss auch da sein
|
||||
if (!pem) return 0;
|
||||
fclose(pem);
|
||||
return n > 0 && n <= CA_MAX ? n : 0;
|
||||
}
|
||||
|
||||
bool olvpatch_fetch_ca(const char *server, u8 *der, u32 *derLen, bool fresh)
|
||||
{
|
||||
if (!fresh && (*derLen = read_cached(der))) return true;
|
||||
static u8 pem[2048];
|
||||
u32 n = fetch(server, "/olv/ca.der", der, CA_MAX + 1);
|
||||
if (n == 0 || n > CA_MAX) return false;
|
||||
if (n == 0 || n > CA_MAX) return !fresh ? false : (*derLen = read_cached(der)) != 0;
|
||||
u32 p = fetch(server, "/olv/ca.pem", pem, sizeof(pem));
|
||||
if (p == 0) return false;
|
||||
// Der Browser der Miiverse-App liest die CA von der SD-Karte
|
||||
FILE *f = fopen(CA_PEM_FILE, "wb");
|
||||
bool ok = f && fwrite(pem, 1, p, f) == p;
|
||||
if (f) fclose(f);
|
||||
mkdir("sdmc:/3ds/mbmnet", 0777);
|
||||
mkdir("sdmc:/3ds/mbmnet/cache", 0777);
|
||||
f = fopen(CA_DER_CACHE, "wb");
|
||||
if (f) { fwrite(der, 1, n, f); fclose(f); }
|
||||
*derLen = n;
|
||||
return ok;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user