Files
AnyPS5/docs/dev/debt/libSceNpCppWebApi.md
T

5.9 KiB

libSceNpCppWebApi technical debt

Silent stubs

  • sce::Np::CppWebApi::Common (libSceNpCppWebApi) - the finish overrides of TransactionBase<...> (8 instantiations), DownStreamTransaction<...> (2 instantiations) and Vector<IntrusivePtr<Leaderboards::V1::User>>::pushBack return success without doing work; a failed request never produces a transaction to finish
  • sce::Np::CppWebApi::Leaderboards::V1 (libSceNpCppWebApi) - request-body and parameter bookkeeping succeeds without storing state: GetRankingRequestBody::set{StartSerialRank,Group,Limit,Users,Offset}, RecordScoreRequestBody::set{Comment,SmallData,NeedsTmpRank,ComparedDateTime,PcId}, User::{setAccountId,setPcId}, BoardsApi::ParameterToGetBoardDefinition::{initialize,terminate}, RecordApi::ParameterToRecordLargeData::{initialize,terminate}, RecordApi::ParameterToRecordScore::{initialize,setxPsnAtomicOperation,terminate}, ViewApi::ParameterToGetLargeDataByObjectId::{initialize,terminate}, ViewApi::ParameterToGetRanking::{initialize,setgetRankingRequestBody,terminate}
  • sce::Np::CppWebApi::SessionManager::V1 (libSceNpCppWebApi) - parameter bookkeeping succeeds without storing state: PlayerSessionsApi::ParameterToCreatePlayerSessions::{ctor,dtor,initialize}, PlayerSessionsApi::ParameterToGetPlayerSessionInvitations::{ctor,dtor,initialize,setfields,setinvitationInvalidFilter}, PlayerSessionsApi::ParameterToJoinPlayerSessionAsPlayer::{ctor,dtor,initialize,terminate}, PlayerSessionsApi::ParameterToLeavePlayerSession::{ctor,dtor,initialize}, RequestPlayerSession::set{MaxSpectators,InvitableUserType,JoinableUserType,ExclusiveLeaderPrivileges}, RequestPlayerSessionPlayer::setPushContexts
  • sce::Np::CppWebApi::TitleCloudStorage::V1 (libSceNpCppWebApi) - DataApi::ParameterToDownloadData::{initialize,terminate} succeed without storing state

Unknown function info

  • sce::Np::CppWebApi (libSceNpCppWebApi) - every request entry point (API calls, transaction start/getResponse/readData, the *Factory::creates) returns SCE_NP_WEBAPI_ERROR_NOT_SIGNED_IN offline. The constant's name and value follow the reference tables in shadPS4 np_error.h and fpPS4 np_error.pas, where 0x80552907 is ORBIS_NP_WEBAPI_ERROR_NOT_SIGNED_IN and 0x80552901 is OUT_OF_MEMORY (no UNAVAILABLE exists in the 0x80552901-0x8055291F range); it is the code a signed-out console returns from these entry points. The earlier 0x80552901 value came from the module the previous implementation shipped, which used the same incorrect constant
  • sce::Np::CppWebApi::Common::IntrusivePtr (libSceNpCppWebApi) - the 0x18-byte layout (object, deleter, LibContext*) and the offset of the 32-bit reference count in the pointee (0x00, 0x30 for Vector) come from the module bundled with one title (PPSA21564); other SDK versions are not checked. The destructor throws on the last reference of a pointer without a deleter: destroying the object needs its destructor and the LibContext allocator, which are not implemented
  • sce::Np::CppWebApi::Common::String (libSceNpCppWebApi) - the 0x20-byte layout (32-bit reference count, buffer at 0x08, buffer size at 0x10, LibContext* at 0x18) comes from the module bundled with one title (PPSA21564); other SDK versions are not checked. append grows the buffer with the host allocator and the destructor frees it, instead of going through the LibContext allocator. pushBack into Vector<String> stores a deep copy, so a destroyed temporary cannot invalidate the stored element; a title that byte-copies a String with a live buffer would still double-free, as nothing increments the reference count
  • sce::Np::CppWebApi::Common::Vector (libSceNpCppWebApi) - imported by PPSA03671, whose dump ships no libSceNpCppWebApi.prx. A Vector handle is an IntrusivePtr over a shared body; bodies created by pushBack use a host-side layout with the reference count at 0x30, matching the adopted-body convention measured on PPSA21564. The pointer/deleter constructor adopts a title-provided body released through the stored deleter; pushBack on such a body throws, since its element layout is unknown. begin, end, iterators and operator[] throw: the only Vectors the title reads back come from failed transactions, which never produce one
  • sce::Np::CppWebApi::SessionManager2V1 (libSceNpCppWebApi) - imported by PPSA03671. Offline, the factories, PlayerSessionsApi calls and transaction start/getResponse/readData fail with SCE_NP_WEBAPI_ERROR_NOT_SIGNED_IN; parameter setters, initialize, terminate, constructors and destructors succeed without keeping state, as no request is ever sent. Response-body accessors (getSessionId, getPlayerSessions, getInvitations, the IsSet queries) throw: a failed request never produces a response object
  • libSceNpCppWebApi (libSceNpCppWebApi) - unimplemented stubs have their parameter lists, const qualifiers and return types aligned with the demangled symbols confirmed by NID matching in #8143. They cover response-body accessors, iterators, and uninstantiated transactions in Leaderboards::V1, SessionManager::V1, InGameCatalog::V5, TitleCloudStorage::V1, and Common templates: each mangled name gives the method and parameter types, but the runtime layout of response objects and errors are unverified on console, so each call continues to throw NotImplemented_nid_no_patch. No call site is recorded for them