taitools/platform/config.c

296 lines
7.3 KiB
C

#include <windows.h>
#include <winsock2.h>
#include <assert.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "platform/cert.h"
#include "platform/clock.h"
#include "platform/config.h"
#include "platform/dns.h"
#include "platform/misc.h"
#include "platform/netenv.h"
#include "platform/ttxsec.h"
#include "platform/platform.h"
#include "platform/syscfg.h"
#include "platform/vfs.h"
void platform_config_load(struct platform_config *cfg, const wchar_t *filename)
{
assert(cfg != NULL);
assert(filename != NULL);
cert_config_load(&cfg->cert, filename);
clock_config_load(&cfg->clock, filename);
dns_config_load(&cfg->dns, filename);
misc_config_load(&cfg->misc, filename);
netenv_config_load(&cfg->netenv, filename);
ttxsec_config_load(&cfg->ttxsec, filename);
vfs_config_load(&cfg->vfs, filename);
syscfg_config_load(&cfg->syscfg, filename);
}
void cert_config_load(struct cert_config *cfg, const wchar_t *filename)
{
assert(cfg != NULL);
assert(filename != NULL);
cfg->enable = GetPrivateProfileIntW(L"cert", L"enable", 1, filename);
GetPrivateProfileStringW(
L"cert",
L"path",
L"cert",
cfg->path,
_countof(cfg->path),
filename);
}
void clock_config_load(struct clock_config *cfg, const wchar_t *filename)
{
assert(cfg != NULL);
assert(filename != NULL);
cfg->timezone = GetPrivateProfileIntW(L"clock", L"timezone", 1, filename);
cfg->timewarp = GetPrivateProfileIntW(L"clock", L"timewarp", 0, filename);
cfg->writeable = GetPrivateProfileIntW(
L"clock",
L"writeable",
0,
filename);
}
void dns_config_load(struct dns_config *cfg, const wchar_t *filename)
{
wchar_t default_[128];
assert(cfg != NULL);
assert(filename != NULL);
cfg->enable = GetPrivateProfileIntW(L"dns", L"enable", 1, filename);
GetPrivateProfileStringW(
L"dns",
L"default",
L"localhost",
default_,
_countof(default_),
filename);
GetPrivateProfileStringW(
L"dns",
L"router",
default_,
cfg->router,
_countof(cfg->router),
filename);
GetPrivateProfileStringW(
L"dns",
L"cert",
default_,
cfg->cert,
_countof(cfg->cert),
filename);
GetPrivateProfileStringW(
L"dns",
L"data",
default_,
cfg->data,
_countof(cfg->data),
filename);
GetPrivateProfileStringW(
L"dns",
L"proxy",
default_,
cfg->proxy,
_countof(cfg->proxy),
filename);
GetPrivateProfileStringW(
L"dns",
L"nesys",
default_,
cfg->nesys,
_countof(cfg->nesys),
filename);
GetPrivateProfileStringW(
L"dns",
L"fjm",
default_,
cfg->fjm,
_countof(cfg->fjm),
filename);
}
void misc_config_load(struct misc_config *cfg, const wchar_t *filename)
{
assert(cfg != NULL);
assert(filename != NULL);
cfg->enable = GetPrivateProfileIntW(L"misc", L"enable", 1, filename);
}
void netenv_config_load(struct netenv_config *cfg, const wchar_t *filename)
{
wchar_t mac_addr[18];
assert(cfg != NULL);
assert(filename != NULL);
memset(cfg, 0, sizeof(*cfg));
cfg->enable = GetPrivateProfileIntW(L"netenv", L"enable", 0, filename);
cfg->addr_suffix = GetPrivateProfileIntW(
L"netenv",
L"addrSuffix",
11,
filename);
cfg->router_suffix = GetPrivateProfileIntW(
L"netenv",
L"routerSuffix",
254,
filename);
GetPrivateProfileStringW(
L"netenv",
L"macAddr",
L"01:02:03:04:05:06",
mac_addr,
_countof(mac_addr),
filename);
swscanf(mac_addr,
L"%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
&cfg->mac_addr[0],
&cfg->mac_addr[1],
&cfg->mac_addr[2],
&cfg->mac_addr[3],
&cfg->mac_addr[4],
&cfg->mac_addr[5],
&cfg->mac_addr[6]);
}
void ttxsec_config_load(struct ttxsec_config *cfg, const wchar_t *filename)
{
wchar_t keychip_id[17];
wchar_t game_id[5];
wchar_t platform_id[5];
wchar_t subnet[16];
unsigned int ip[4];
size_t i;
assert(cfg != NULL);
assert(filename != NULL);
memset(cfg, 0, sizeof(*cfg));
memset(keychip_id, 0, sizeof(keychip_id));
memset(game_id, 0, sizeof(game_id));
memset(platform_id, 0, sizeof(platform_id));
memset(subnet, 0, sizeof(subnet));
cfg->enable = GetPrivateProfileIntW(L"keychip", L"enable", 1, filename);
GetPrivateProfileStringW(
L"keychip",
L"id",
L"A69E-01A88888888",
keychip_id,
_countof(keychip_id),
filename);
GetPrivateProfileStringW(
L"keychip",
L"gameId",
L"",
game_id,
_countof(game_id),
filename);
GetPrivateProfileStringW(
L"keychip",
L"platformId",
L"",
platform_id,
_countof(platform_id),
filename);
cfg->region = GetPrivateProfileIntW(L"keychip", L"region", 1, filename);
cfg->billing_type = GetPrivateProfileIntW(L"keychip", L"billingType", 1, filename);
cfg->system_flag = GetPrivateProfileIntW(
L"keychip",
L"systemFlag",
0x64,
filename);
GetPrivateProfileStringW(
L"keychip",
L"subnet",
L"192.168.100.0",
subnet,
_countof(subnet),
filename);
for (i = 0 ; i < 16 ; i++) {
cfg->keychip_id[i] = (char) keychip_id[i];
}
for (i = 0 ; i < 4 ; i++) {
cfg->game_id[i] = (char) game_id[i];
}
for (i = 0 ; i < 4 ; i++) {
cfg->platform_id[i] = (char) platform_id[i];
}
swscanf(subnet, L"%u.%u.%u.%u", &ip[0], &ip[1], &ip[2], &ip[3]);
cfg->subnet = (ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | 0;
GetPrivateProfileStringW(
L"keychip",
L"billingCa",
L"DEVICE\\ca.crt",
cfg->billing_ca,
_countof(cfg->billing_ca),
filename);
GetPrivateProfileStringW(
L"keychip",
L"billingPub",
L"DEVICE\\billing.pub",
cfg->billing_pub,
_countof(cfg->billing_pub),
filename);
}
void syscfg_config_load(struct syscfg_config *cfg, const wchar_t *filename)
{
cfg->enable = GetPrivateProfileIntW(L"syscfg", L"enable", 1, filename);
cfg->log_level = GetPrivateProfileIntW(L"syscfg", L"log_level", 1, filename);
}
void vfs_config_load(struct vfs_config *cfg, const wchar_t *filename)
{
assert(cfg != NULL);
assert(filename != NULL);
cfg->enable = GetPrivateProfileIntW(L"vfs", L"enable", 1, filename);
GetPrivateProfileStringW(
L"vfs",
L"d_drive",
L"d_drive",
cfg->d_drive,
_countof(cfg->d_drive),
filename);
}