mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 17:13:13 -05:00
The 73 sceNpCppWebApiUnknown<nn> stubs carried an APS5_EXPORT alias because their names were placeholders. aerolib names all of them, and each name recomputes to the NID a title imports, so the alias is dropped and the loader derives the NID from the real symbol name, as the rest of the library does. Behaviour is unchanged: every one of them throws. The stubs are ordered by demangled name instead of by NID, so the Common template instantiations and the V1/V5 accessors sit together, as the rest of the file does. No symbol changes: the built .prx exports the same 359 NIDs as main.
5.9 KiB
5.9 KiB
libSceNpCppWebApi technical debt
Silent stubs
- sce::Np::CppWebApi::Common (libSceNpCppWebApi) - the
finishoverrides ofTransactionBase<...>(8 instantiations),DownStreamTransaction<...>(2 instantiations) andVector<IntrusivePtr<Leaderboards::V1::User>>::pushBackreturn 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) returnsSCE_NP_WEBAPI_ERROR_NOT_SIGNED_INoffline. The constant's name and value follow the reference tables in shadPS4np_error.hand fpPS4np_error.pas, where0x80552907isORBIS_NP_WEBAPI_ERROR_NOT_SIGNED_INand0x80552901isOUT_OF_MEMORY(noUNAVAILABLEexists in the0x80552901-0x8055291Frange); it is the code a signed-out console returns from these entry points. The earlier0x80552901value 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 forVector) 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 theLibContextallocator, 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.appendgrows the buffer with the host allocator and the destructor frees it, instead of going through theLibContextallocator.pushBackintoVector<String>stores a deep copy, so a destroyed temporary cannot invalidate the stored element; a title that byte-copies aStringwith 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. AVectorhandle is anIntrusivePtrover a shared body; bodies created bypushBackuse 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;pushBackon such a body throws, since its element layout is unknown.begin,end, iterators andoperator[]throw: the onlyVectors the title reads back come from failed transactions, which never produce one - sce::Np::CppWebApi::SessionManager2V1 (libSceNpCppWebApi) - imported by PPSA03671. Offline, the factories,
PlayerSessionsApicalls and transactionstart/getResponse/readDatafail withSCE_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, theIsSetqueries) throw: a failed request never produces a response object - libSceNpCppWebApi (libSceNpCppWebApi) - 73 exports are named from aerolib, so each name recomputes to the NID a title imports (
tools/nid_names.py), and each throws. They are theCommontemplate members (IntrusivePtr,Vector,Iterator,ConstIterator,Transaction,TransactionBase) and theTitleCloudStorage::V1andInGameCatalog::V5accessors: a mangled name gives the class, the method and the argument types, but the layout of the object the call is made on, the values the caller reads back and the console's errors are unknown, so no call can be answered without writing to memory no source describes. No call site is recorded for any of them