#include "SceTypes.hpp" #include extern "C" { int APS5_VABI sceNpRegisterNpReachabilityStateCallback(void*, void*); int APS5_VABI sceNpUnregisterNpReachabilityStateCallback(); int APS5_VABI sceNpGetNpReachabilityState(int, uint32_t*); int APS5_VABI sceNpCheckCallback(); int APS5_VABI sceNpCheckNpAvailability(int, const NpOnlineId*); } static constexpr int ErrorArgument = static_cast(0x80550003); static constexpr int ErrorAlreadyRegistered = static_cast(0x80550008); static constexpr int ErrorNotRegistered = static_cast(0x80550009); static constexpr int ErrorUserNotFound = static_cast(0x80550007); static void Require(bool value) { if (!value) std::abort(); } static void APS5_VABI Callback(int, uint32_t, void*) { std::abort(); } int main() { int userdata = 0; auto* callback = reinterpret_cast(&Callback); Require(sceNpUnregisterNpReachabilityStateCallback() == ErrorNotRegistered); Require(sceNpRegisterNpReachabilityStateCallback(nullptr, &userdata) == ErrorArgument); Require(sceNpRegisterNpReachabilityStateCallback(callback, &userdata) == 0); Require(sceNpRegisterNpReachabilityStateCallback(callback, nullptr) == ErrorAlreadyRegistered); Require(sceNpRegisterNpReachabilityStateCallback(nullptr, nullptr) == ErrorArgument); uint32_t state = 99; Require(sceNpGetNpReachabilityState(0, &state) == 0 && state == 0); Require(sceNpCheckCallback() == 0); Require(sceNpUnregisterNpReachabilityStateCallback() == 0); Require(sceNpUnregisterNpReachabilityStateCallback() == ErrorNotRegistered); Require(sceNpRegisterNpReachabilityStateCallback(callback, nullptr) == 0); Require(sceNpUnregisterNpReachabilityStateCallback() == 0); NpOnlineId onlineId{}; onlineId.data[0] = 'p'; Require(sceNpCheckNpAvailability(1, &onlineId) == ErrorUserNotFound); Require(sceNpCheckNpAvailability(1, nullptr) == ErrorArgument); }