#include #include "gcard.h" #include "https.h" #include "loader/utils.h" #include "gecko/gecko.hpp" #include "memory/mem2.hpp" #define MAX_URL_SIZE 263 // 128 + 129 + 6 struct provider { char url[128]; char key[129]; }; struct provider *providers = NULL; int amount_of_providers = 0; u8 register_card_provider(const char *url, const char *key) { if(strlen(url) > 0 && strlen(key) > 0 && strstr(url, "{KEY}") != NULL && strstr(url, "{ID6}") != NULL) { providers = (struct provider*)MEM2_realloc(providers, (amount_of_providers + 1) * sizeof(struct provider)); memset(&providers[amount_of_providers], 0, sizeof(struct provider)); strncpy(providers[amount_of_providers].url, url, 127); strncpy(providers[amount_of_providers].key, key, 128); amount_of_providers++; gprintf("Gamercard provider is valid!\n"); return 0; } gprintf("Gamertag provider is NOT valid!\n"); return -1; } u8 has_enabled_providers() { if (amount_of_providers != 0 && providers != NULL) return 1; return 0; } void add_game_to_card(const char *gameid) { int i; char *url = (char *)MEM2_alloc(MAX_URL_SIZE); // Too much memory, but only like 10 bytes memset(url, 0, MAX_URL_SIZE); for(i = 0; i < amount_of_providers && providers != NULL; i++) { strcpy(url, providers[i].url); str_replace(url, "{KEY}", providers[i].key, MAX_URL_SIZE); str_replace(url, "{ID6}", gameid, MAX_URL_SIZE); gprintf("Gamertag URL: %s\n", url); struct download file = {}; file.skip_response = 1; downloadfile(url, &file); } MEM2_free(url); }