Files
AnyPS5/core/libs/prx/libSceNpSessionSignaling/Export.cpp
T
xXPBSXxandClaude Sonnet 5.5 a03afed4c3 fix(exports): export the calls PPSA07411 imports
PPSA07411 (Resident Evil 4) fails to load without these imports that no library exports. Their signatures are unknown, so they are declared without parameters and throw until they are implemented. Adds one test and a TechnicalDebt entry.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 18:35:00 +02:00

103 lines
3.0 KiB
C++

#include <cstdint>
#include <cstddef>
#include "SceTypes.hpp"
#include "prx/libc/include/General.hpp"
#include <atomic>
// Peer-to-peer signaling needs the network: contexts exist, but sessions never activate.
static constexpr int SCE_NP_SESSION_SIGNALING_ERROR_INVALID_ARGUMENT = static_cast<int>(0x80553303);
static constexpr int SCE_NP_SESSION_SIGNALING_ERROR_UNAVAILABLE = static_cast<int>(0x80552D06);
static std::atomic<uint32_t> g_nextContext{1};
extern "C" {
int APS5_VABI sceNpSessionSignalingInitialize(void* param) {
(void)param;
return 0;
}
int APS5_VABI sceNpSessionSignalingActivateSession(void) {
return SCE_NP_SESSION_SIGNALING_ERROR_UNAVAILABLE;
}
int APS5_VABI sceNpSessionSignalingCreateContext2(const void* param, uint32_t* context_id) {
(void)param;
if (!context_id) return SCE_NP_SESSION_SIGNALING_ERROR_INVALID_ARGUMENT;
*context_id = g_nextContext.fetch_add(1, std::memory_order_relaxed);
return 0;
}
int APS5_VABI sceNpSessionSignalingCreateContext(const void* param, uint32_t* context_id) {
return sceNpSessionSignalingCreateContext2(param, context_id);
}
int APS5_VABI sceNpSessionSignalingDeactivate(uint32_t context_id) {
(void)context_id;
return 0;
}
int APS5_VABI sceNpSessionSignalingDestroyContext(uint32_t context_id) {
(void)context_id;
return 0;
}
int APS5_VABI sceNpSessionSignalingGetConnectionInfo(void) {
return SCE_NP_SESSION_SIGNALING_ERROR_UNAVAILABLE;
}
int APS5_VABI sceNpSessionSignalingActivateUser(void) {
return SCE_NP_SESSION_SIGNALING_ERROR_UNAVAILABLE;
}
int APS5_VABI sceNpSessionSignalingGetConnectionFromPeerAddress2(void) {
return SCE_NP_SESSION_SIGNALING_ERROR_UNAVAILABLE;
}
int APS5_VABI sceNpSessionSignalingTerminate(void) {
return 0;
}
int32_t APS5_VABI sceNpSessionSignalingGetConnectionStatus(int32_t context_id, int32_t connection_id, int32_t* status, void* peer_address, uint16_t* peer_port) {
(void)context_id;
(void)connection_id;
(void)status;
(void)peer_address;
(void)peer_port;
NotImplemented_nid_no_patch(__func__);
return 0;
}
int32_t APS5_VABI sceNpSessionSignalingGetLocalNetInfo(int32_t context_id, void* info) {
(void)context_id;
if (!info) return SCE_NP_SESSION_SIGNALING_ERROR_INVALID_ARGUMENT;
return SCE_NP_SESSION_SIGNALING_ERROR_UNAVAILABLE;
}
int APS5_VABI sceNpSessionSignalingRequestPrepare(uint32_t contextId, uint32_t* requestId) {
(void)contextId;
if (!requestId) return SCE_NP_SESSION_SIGNALING_ERROR_INVALID_ARGUMENT;
return SCE_NP_SESSION_SIGNALING_ERROR_UNAVAILABLE;
}
int APS5_VABI sceNpSessionSignalingGetMemoryInfo(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceNpSessionSignalingGetConnectionStatistics(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceNpSessionSignalingGetConnectionFromPeerAddress(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceNpSessionSignalingGetGroupFromSessionId(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}