1
0
mirror of https://github.com/pumpitupdev/pumptools.git synced 2024-11-23 22:50:56 +01:00

nxahook: Support pumpnet

This commit is contained in:
icex2 2021-04-07 08:41:36 +02:00
parent 7d03f6b7dc
commit b2bbf8981d
7 changed files with 96 additions and 16 deletions

View File

@ -16,4 +16,4 @@ add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${HDD_RAW} ${DOG_KEY})
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-fPIC")
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
target_link_libraries(${PROJECT_NAME} asset-nxa crypt hook-core microdog40 patch ptapi-io-piuio-util util dl pthread)
target_link_libraries(${PROJECT_NAME} asset-nxa crypt hook-core microdog40 patch ptapi-io-piuio-util pumpnet-lib util dl pthread curl)

View File

@ -31,6 +31,12 @@ patch.net_profile.server=
# [int]: Machine id for pumpnet
patch.net_profile.machine_id=0000000000000000
# [bool (0/1/)]: Enable verbose log output for pumpnet related things, e.g. logging network traffic
patch.net_profile.verbose_log_output=0
# [str]: Path to a folder containing the client key, certificate and CA bundle to enable https communication
patch.net_profile.cert_dir_path=
# [str]: Path to library implementing the piuio api for piuio emulation
patch.piuio.emu_lib=

View File

@ -16,6 +16,7 @@
#include "hook/patch/main-loop.h"
#include "hook/patch/microdog40.h"
#include "hook/patch/mounts.h"
#include "hook/patch/net-profile.h"
#include "hook/patch/piuio-exit.h"
#include "hook/patch/piuio.h"
#include "hook/patch/redir.h"
@ -280,6 +281,18 @@ static void nxahook_patch_profile()
nxahook_profile_gen_init();
}
static void nxahook_patch_pumpnet(struct nxahook_options *options)
{
if (options->patch.net.server && options->patch.net.machine_id != 0) {
patch_net_profile_init(
ASSET_GAME_VERSION_NXA,
options->patch.net.server,
options->patch.net.machine_id,
options->patch.net.cert_dir_path,
options->patch.net.verbose_log_output);
}
}
void nxahook_constructor(void)
{
/* Nothing here */
@ -309,6 +322,11 @@ void nxahook_trap_before_main(int argc, char **argv)
nxahook_patch_dongle_init();
nxahook_patch_hdd_check_init();
nxahook_patch_piuio_init(&options);
// Init order of pumpnet and auto profile generating important: pumpnet hook,
// if active, needs to be applied before the auto gen profile hook. Otherwise,
// the game detects that no profile is available and auto generates one even
// it should take the pumpnet route to grab a profile from a remote server
nxahook_patch_pumpnet(&options);
nxahook_patch_profile();
free(game_data_path);
@ -318,6 +336,7 @@ void nxahook_trap_before_main(int argc, char **argv)
void nxahook_trap_after_main(void)
{
patch_net_profile_shutdown();
patch_piuio_shutdown();
}

View File

@ -16,6 +16,10 @@
#define NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_SERVER "patch.net_profile.server"
#define NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_MACHINE_ID \
"patch.net_profile.machine_id"
#define NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_VERBOSE_LOG_OUTPUT \
"patch.net_profile.verbose_log_output"
#define NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_CERT_DIR_PATH \
"patch.net_profile.cert_dir_path"
#define NXAHOOK_OPTIONS_STR_PATCH_PIUIO_EMU_LIB "patch.piuio.emu_lib"
#define NXAHOOK_OPTIONS_STR_PATCH_PIUIO_EXIT_TEST_SERV \
"patch.piuio_exit.test_serv"
@ -118,6 +122,25 @@ const struct util_options_def nxahook_options_def[] = {
.is_secret_data = true,
.default_value.str = "0000000000000000",
},
{
.name = NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_VERBOSE_LOG_OUTPUT,
.description = "Enable verbose log output for pumpnet related things, "
"e.g. logging network traffic",
.param = 'v',
.type = UTIL_OPTIONS_TYPE_BOOL,
.is_secret_data = false,
.default_value.b = false,
},
{
.name = NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_CERT_DIR_PATH,
.description =
"Path to a folder containing the client key, certificate and CA "
"bundle to enable https communication",
.param = 'c',
.type = UTIL_OPTIONS_TYPE_STR,
.is_secret_data = false,
.default_value.str = NULL,
},
{
.name = NXAHOOK_OPTIONS_STR_PATCH_PIUIO_EMU_LIB,
.description =
@ -212,11 +235,15 @@ bool nxahook_options_init(
options_opt, NXAHOOK_OPTIONS_STR_PATCH_HOOK_MAIN_LOOP_X11_INPUT_HANDLER);
options->patch.net.server = util_options_get_str(
options_opt, NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_SERVER);
options->patch.net.machine_id = strtoul(
options->patch.net.machine_id = strtoull(
util_options_get_str(
options_opt, NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_MACHINE_ID),
NULL,
16);
options->patch.net.verbose_log_output = util_options_get_bool(
options_opt, NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_VERBOSE_LOG_OUTPUT);
options->patch.net.cert_dir_path = util_options_get_str(
options_opt, NXAHOOK_OPTIONS_STR_PATCH_NET_PROFILE_CERT_DIR_PATH);
options->patch.piuio.api_lib = util_options_get_str(
options_opt, NXAHOOK_OPTIONS_STR_PATCH_PIUIO_EMU_LIB);
options->patch.piuio.exit_test_serv = util_options_get_bool(

View File

@ -31,7 +31,9 @@ struct nxahook_options {
struct net {
const char *server;
uint32_t machine_id;
uint64_t machine_id;
bool verbose_log_output;
const char *cert_dir_path;
} net;
struct piuio {

View File

@ -5,6 +5,8 @@
#include "asset/nx2/lib/usb-rank.h"
#include "asset/nx2/lib/usb-save.h"
#include "asset/nxa/lib/usb-rank.h"
#include "asset/nxa/lib/usb-save.h"
#include "capnhook/hook/filehook.h"
@ -77,8 +79,8 @@ static bool _patch_net_profile_close_pumpnet_profile_file(
static const struct profile_virtual_mnt_point_info
_patch_net_profile_virtual_mnt_point_infos[] = {
{.player = {
{.file_info =
{.player =
{{.file_info =
{{.player = 0,
.file_type = PUMPNET_LIB_FILE_TYPE_SAVE,
.file_path = "/mnt/0/nx2save.bin",
@ -95,7 +97,26 @@ static const struct profile_virtual_mnt_point_info
{.player = 1,
.file_type = PUMPNET_LIB_FILE_TYPE_RANK,
.file_path = "/mnt/1/nx2rank.bin",
.file_size = ASSET_NX2_USB_RANK_SIZE}}},
.file_size = ASSET_NX2_USB_RANK_SIZE}}}}},
{.player = {
{.file_info =
{{.player = 0,
.file_type = PUMPNET_LIB_FILE_TYPE_SAVE,
.file_path = "/mnt/0/nxasave.bin",
.file_size = ASSET_NXA_USB_SAVE_SIZE},
{.player = 0,
.file_type = PUMPNET_LIB_FILE_TYPE_RANK,
.file_path = "/mnt/0/nxarank.bin",
.file_size = ASSET_NXA_USB_RANK_SIZE}}},
{.file_info =
{{.player = 1,
.file_type = PUMPNET_LIB_FILE_TYPE_SAVE,
.file_path = "/mnt/1/nxasave.bin",
.file_size = ASSET_NXA_USB_SAVE_SIZE},
{.player = 1,
.file_type = PUMPNET_LIB_FILE_TYPE_RANK,
.file_path = "/mnt/1/nxarank.bin",
.file_size = ASSET_NXA_USB_RANK_SIZE}}},
}}};
static const struct profile_virtual_mnt_point_info
@ -566,10 +587,10 @@ void patch_net_profile_init(
idx = 0;
break;
// case PUMPNET_LIB_GAME_NXA:
// idx = 1;
// break;
//
case ASSET_GAME_VERSION_NXA:
idx = 1;
break;
// case PUMPNET_LIB_GAME_FST:
// idx = 2;
// break;
@ -581,7 +602,6 @@ void patch_net_profile_init(
// case PUMPNET_LIB_GAME_F2:
// idx = 4;
// break;
case ASSET_GAME_VERSION_NXA:
case ASSET_GAME_VERSION_FIESTA:
case ASSET_GAME_VERSION_FIESTA_EX:
case ASSET_GAME_VERSION_FIESTA_2:

View File

@ -29,6 +29,9 @@ static char *_pumpnet_lib_get_endpoint_save(
case ASSET_GAME_VERSION_NX2:
return util_str_merge(server_addr, USBPROFILE_ENDPOINT "/nx2/save");
case ASSET_GAME_VERSION_NXA:
return util_str_merge(server_addr, USBPROFILE_ENDPOINT "/nxa/save");
default:
log_die("Unsupported game version %d", game);
return NULL;
@ -42,6 +45,9 @@ static char *_pumpnet_lib_get_endpoint_rank(
case ASSET_GAME_VERSION_NX2:
return util_str_merge(server_addr, USBPROFILE_ENDPOINT "/nx2/rank");
case ASSET_GAME_VERSION_NXA:
return util_str_merge(server_addr, USBPROFILE_ENDPOINT "/nxa/rank");
default:
log_die("Unsupported game version %d", game);
return NULL;