docs(debt): name what the emulators do for sceHttpAbortRequest

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
xXPBSXxandClaude Sonnet 5.5 committed 2026-11-01 08:35:56 +01:00
1 parent ff4203c36e
commit 69caac191f
1 file changed
+1
+1
View File
@@ -13,6 +13,7 @@
- [sceHttpSetCookieEnabled](../../../core/libs/prx/libSceHttp/Export.cpp) - the two-argument signature and 0/1 enable values follow [VitaSDK](https://github.com/vitasdk/vita-headers/blob/master/include/psp2/net/http.h) and [shadPS4](https://github.com/shadps4-emu/shadPS4/blob/main/src/core/libraries/network/http.cpp); PPSA01521 passes 0 to disable cookies. A value above 1 returns the same error as `sceHttpSetInflateGZIPEnabled` before the init check; otherwise either value is stored in the template, connection or request options, an unknown id returns `ERROR_INVALID_ID`, and `sceHttpGetCookieEnabled` reads the value back. No cookie is kept or sent, as no request reaches the network. The default (disabled) and the order of the checks are unverified on a PS5
- [sceHttpParseResponseHeader](../../../core/libs/prx/libSceHttp/Export.cpp) (libSceHttp) - signature follows [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/main/src/SharpProspero/Interop/Net/Http.cs); the result, value bounds and error codes follow a payload process on a PS5 (firmware 13.60). Unmeasured there: a bare carriage return, and vertical tab or form feed around the value, which are skipped as blanks before it as before. A value end above `INT_MAX` throws instead of wrapping. PPSA01494 01.100.002 (at 0x34F6BA6) and PPSA34502 01.010.000 (0x71BB8E, 0x71D463), disassembled for this entry, pass the arguments in that order, the two outputs on the stack. PPSA01494 treats only a negative result as a failure; PPSA34502 treats 0 as one too, so for it an empty value is a missing field, and it compares the value length with its own buffer size before copying
- [sceHttpAbortRequest](../../../core/libs/prx/libSceHttp/Export.cpp) (libSceHttp) - returns 0 for every request ID, before `sceHttpInit` and for an unknown ID too; no request reaches the network, so nothing is aborted. `sceHttpAbortRequestForce` calls it. [GuestHttpOptions.cpp](../../../core/libs/tests/GuestHttpOptions.cpp) tests only a live request, and the commit that added it names no measurement. shadPS4 (PS4, `src/core/libraries/network/http.cpp`, commit 0614ce324be092791b758d79f93d9f1ca5b10a81) returns `BEFORE_INIT` without a context and `INVALID_ID` for an unknown request, and marks a request that is created or sending as aborted; KytyPS5 (PS5, `src/libs/network.cpp`, commit 5e837a9beac82c031868eaad9348d6a48245fb99) returns `INVALID_ID` for an unknown request and otherwise OK without aborting; fpPS4 (PS4, `src/ps4_libscehttp.pas`, commit 04cefd43e6fddd1ab033e7980cd356d14c964905) always returns 0.
- [sceHttpParseStatusLine](../../../core/libs/prx/libSceHttp/src/Parse.cpp) (libSceHttp) - follows a payload process on a PS5 (firmware 13.60) for 124 lines and lengths. As on the console, `lineLen` is only checked to be at least 8 and to leave the 3 code digits (`lineLen - index < 3` in unsigned arithmetic): the version digits and the `.` and space after them are read past `lineLen`, and the line feed is searched up to and including the byte at `lineLen`, so a length that stops right before the line feed still parses. When the version ends past `lineLen` both subtractions wrap and the search goes on until a line feed; what the console does when none follows in readable memory was not measured
- [sceHttpUriMerge](../../../core/libs/prx/libSceHttp/src/Uri.cpp) (libSceHttp) - signature follows [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/main/src/SharpProspero/Interop/Net/Http.cs); results, errors and `require` (the base's `sceHttpUriParse` size plus 2 and twice the two string lengths, also for a reference copied unchanged) follow a payload process on a PS5 (firmware 13.60). A reference with an authority (`//` after an optional scheme) is copied unchanged; any other, including `mailto:x`, `http:d`, `?q` and `#f`, is appended unswept to the base path up to its last `/`, and the base query and fragment are dropped. A reference that `sceHttpUriParse` rejects returns that error, which was not measured.
- [sceHttpUriParse](../../../core/libs/prx/libSceHttp/src/Uri.cpp) (libSceHttp) - follows a payload process on a PS5 (firmware 13.60) for every ASCII byte inside a scheme, userinfo and hostname, and for letters, digits, `+`, `-` and `.` at the start of a scheme, where a digit ends it; other bytes at the start of a scheme are taken as they are inside one. The userinfo ends at the first `@` after bytes from the RFC 3986 userinfo set; a hostname is letters, digits, `-`, `_` and `.` without a leading `.`, and the first byte outside it starts the path instead of failing (`http://bad host/` has the host `bad` and the path ` host/`). A port is up to 5 digits that end at `/` or the end, at most 65536, which reads as 0; an empty port takes 443 for a scheme starting with `https`, 80 for one starting with `http` (case-insensitive) and 0 otherwise. The path is swept as `sceHttpUriSweepPath` does, while the pool keeps room for the unswept path. With a pool too small the console returns `ERROR_OUT_OF_MEMORY`, leaves `require` alone and has already written part of the pool; how much is not known, so nothing is written here.