mirror of
https://github.com/AldySan/ps4_remote_pkg_installer_nextgen.git
synced 2026-10-29 00:00:09 +01:00
* feat: project skeleton, build system, and CI (#1) Stage 1/6: OpenOrbis Makefile (.pkg verified), SDL2 smoke screen, module loader, logging facade, cJSON + dbglogger vendored, GitHub Actions CI, assets. Title ID RPIN00001. * feat: core services — network monitor, storage, pkg/SFO parsing, HTTP client (#2) * feat: transfer engine — BGFT wrappers, task manager, installer, adaptive prefetch (#3) Stage 3/6: BGFT wrappers (legacy already-installed semantics), AppInstUtil wrappers, task manager with 1 Hz progress poller + speed/percent + completion detection, full install pipeline (direct + ref_pkg_url), adaptive N-segment prefetch engine with shared chunk frontier, create-fself SDK-stub shim build fix. * feat: HTTP server — legacy API 1:1, v2 API, accelerated piece proxy (#4) Stage 4/6: threaded socket server, byte-compatible legacy API, v2 API (system/jobs/install/storage/logs), piece proxy streaming through the adaptive prefetch engine, log ring, netmon-driven server lifecycle. * feat: live on-screen dashboard — transfer cards, controls, activity log (#5) Stage 5/6: embedded bitmap font (generated, tintable atlas), dashboard with status strip + transfer cards (progress/speed/ETA) + activity log pane, controller controls incl. per-item pause/resume/stop/re-transfer, taskman is_ref. * docs: full API reference and README polish (#6) Stage 6/6: docs/API.md (legacy wire-compatible formats + v2 API), README polish (controls table, examples, dev layout), roadmap complete. * fix: audit pass — 8 bug fixes + keep-alive session reuse in transfer engine (#7) * fix: net stack teardown order and bounded SFO key reads - netmon: sceNetPoolDestroy was called with the mem id after it was already reset to -1, so the real pool leaked at shutdown. - sfo: key comparison read up to 64 bytes past the key table on malformed SFO data; bound it to the actual key length. * fix(taskman): reclaim terminal job slots, release already-installed jobs Terminal-state jobs kept their slots forever, so the registry filled up after 32 installs and every new install failed until the app restarted. When full, the oldest terminal slot is now reclaimed (the dashboard keeps showing the most recent jobs). ALREADY_INSTALLED jobs never fired the terminal event, so their proxy slot and temp manifest/icon leaked per attempt; they are now cleaned up and released when the BGFT task reports already-installed (task id -1). Also documents that the event hook runs with the registry lock held. * fix(server,installer): legacy error_code response for BGFT failures The original responds {"status":"fail","error_code":...} (HTTP 200) when BGFT task registration fails; the rewrite returned HTTP 500 with an error message instead. The BGFT error code is now carried through install_result_t and the legacy byte-compatible response is restored. Also: bound the shutdown wait for in-flight connections (a send stuck on a dead link could stall the netmon thread forever and block network-up recovery) and drop a needless 16-byte copy in the /api/v2/jobs/<id> route that truncated long ids. * fix(ui): run the re-transfer pipeline off the UI thread action_retry ran the full install prepare (pkg header, entry table, SFO/icon fetches plus one probe per piece) on the UI thread, freezing the dashboard and controller input for the duration; it now runs in a detached worker thread with the URL copied out of the job snapshot. * perf(http,prefetch): keep-alive session reuse, race-free teardown Every 2 MiB prefetch chunk previously created and destroyed its own template + connection, paying a full TCP/TLS handshake and slow start per chunk (thousands per large package). Workers now hold a reusable keep-alive session for the piece (one handshake), with a single retry on a stale connection. http_client_term() could destroy the HTTP context while prefetch workers were mid-request (network drop mid-transfer = crash risk); teardown is now deferred by an in-flight counter until the last request/session finishes. One-shot requests keep the previous behavior (fresh template per request). Also hoists the duplicated worker_ctx typedef to file scope. * chore(release): bump version to 0.0.1 (#8)