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

4.4 KiB

libSceHttp2 technical debt

Silent stubs

  • libSceHttp2 - no request reaches the network, so sceHttp2SetMinSslVersion has no TLS connection to restrict and its value is ignored, as for sceHttp2SslEnableOption and sceHttp2SslDisableOption. The three setters validate id against the live handle registry and return SCE_HTTP2_ERROR_INVALID_ID (0x817B1100) for an invalid handle, following prosper. Whether the console restricts the object kind these setters accept, and what it does with an id from a previous init/term cycle, is unverified, so any live handle kind is accepted and ids are never reused. sceHttp2Term, sceHttp2DeleteTemplate, sceHttp2DeleteRequest, sceHttp2CreateTemplate, sceHttp2CreateRequestWithURL and sceHttp2SendRequestAsync also return the invalid-id error for a handle of the wrong kind or no longer live, following prosper (not measured on a console)

Unknown function info

  • sceHttp2DeleteCookieBox (libSceHttp2) - imported by PPSA35943's Unity player. The (int cookieBoxId) signature follows SharpProspero. A box sceHttp2CreateCookieBox returned is discarded; an unknown or already deleted id returns the library's invalid-id error (0x817B1100), as prosper does; not measured on a console

  • sceHttp2SetResolveRetry (libSceHttp2) - signature (int id, int32_t retry) from libSceHttp's sceHttpSetResolveRetry; the value is accepted and ignored like the other Http2 settings, since no request reaches the network

  • libSceHttp2 cookie boxes (libSceHttp2) - sceHttp2CreateCookieBox takes a machine-sized pool size, requires at least 64 KiB and allocates independently of HTTP contexts. The host reserves the pool with 16 KiB rounding but does not reproduce native cookie-heap bookkeeping, identifier ranges or retained request references. Its delete signature and invalid-ID error are confirmed. sceHttp2SetRequestNoContentLength takes only the request id. Cookies are never stored, so sceHttp2CookieFlush has nothing to discard

  • libSceHttp2 pending exports - 18 named callable exports were identified in the PS5 3.20 export table and cross-checked against firmware 13.60. Signatures and behavior remain unverified; declarations use the unknown-signature convention and throw through NotImplemented_nid_no_patch. Evidence: 3.20 export list.

Functional

  • libSceHttp2 asynchronous requests (libSceHttp2) never reach the network: sceHttp2SendRequestAsync accepts the request, queues a completion whose result is the library's network error and triggers the user event named by the kqueue option (equeue at offset 0, event id at 8, user data at 16, layout inferred from PPSA17221); sceHttp2WaitAsync returns that completion. The completion's event_type value is unknown and left 0. PPSA17221 completes its request object only after sceHttp2SendRequestAsync returns, and its handler for a synchronous failure calls shared_from_this before that, so a send must not fail synchronously. PPSA15508 passes null kqueue and extra options at original VA 0xb63931, then calls sceHttp2WaitAsync with a 24-byte result and a 2,000,000 timeout, and checks the result at offset 8. A null kqueue option therefore retains the same offline completion for direct waiting without an event notification. The timeout is not used because the offline result is already complete. This path follows the original title call and caller control flow, not a console measurement. A supplied kqueue with a missing user event, an extra option, and a wait with no completed operation still throw

  • WebSocket ping settings: both setters take a 32-bit request ID and a 32-bit interval/timeout in microseconds, confirmed by the timer consumer and its clock conversion. The protected implementations remain unchanged.