- fix(fps): measure PS4 BC frame rate with a remote GNM detour
and hide the pkg install result code in the finish notification
- feat(utils): integrate ShadowMount+ alongside the FTPSRV service
for game scanning, mounting and installation
- feat(DPI): add the packet package server (pkgserver) with its
Web UI and full REST/SSE API surface
- feat(tests): add new host test suites (multipart, builtin
services, pkg XML, FPS formula, toolbox i18n/route, language)
- build: add Docker support for building and running the tests
- docs: update credits, README, architecture, util-arch, api and
third-party documentation; add contributor credit and i18n keys
- i18n: remove the pkg finish result code from every locale
Firmware reasserts its own curve after a one-shot /dev/icc_fan
ioctl. Rewrite the configured threshold every 2s independently of
the app-jailbreak listener, and reuse the shared cooling constants.
get_ip_address had three independent implementations (shellui, util, daemon)
because each module also carried its own copy of SceNetCtlInfo and its own
prototype for sceNetCtlGetInfo, with the pointer typed as SceNetCtlInfo* in
two of them and void* in the third.
The shellui and util copies stored the result in an unsigned int and tested
`ret < 0`, which is never true for an unsigned value. Their error branch was
unreachable, so a failed lookup returned success, left not_connected clear,
and copied an uninitialised SceNetCtlInfo to the caller instead of the
IP NOT FOUND placeholder. util's rest-mode network-recovery retry keys off
that return value and therefore never ran.
Declare the netctl ABI once in source/include/ps5/net_ctl.h, add
onion_net_get_ip_address to libonion_platform with an explicit buffer-size
contract, and keep util's not_connected latch in util where it belongs.
Cover the status mapping, the placeholder length and buffer validation with
host tests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Require user payloads to launch through :9020 with an exact PID response, removing the :9021 fallback and process-snapshot PID inference.
Supervise the private loader from daemon, recover it through :9021 before restarting util through :9020, and protect synchronous launches with a bounded busy marker.
Add strict loader tests, update runtime documentation, and remove obsolete elfldr and process-snapshot compatibility APIs.
Remove FPS calculation from the shellui monitor bar while keeping CPU,
GPU, RAM, and IP metrics, and delete the full game-process inject path
(fps_elf, fps.prx, SHM) so titles are no longer soft-injected.
Clear any legacy fps_overlay ready marker on daemon/shellui start, and
bound CPU sampling retries so a stuck probe cannot block other metrics.
Rename product, namespaces, libraries, paths, and assets from Orion/orion
to Onion/onion across the tree. TCP stack-shutdown magic is now ONIO
(0x4F4E494F) to match the corrected branding.
Introduce g_stack_shutting_down so stack teardown does not reuse
is_handler_enabled. Arm it before killing util so fifo_and_dumper_thread
will not relaunch util over 9021.
Add BREW_SHUTDOWN_STACK (0xDEAD0002): kill util.elf, ForceKill SceShellUI,
then exit the crit daemon. Expose the same sequence on TCP port 9048 with
ORIO magic frames so a PC can tear down OrionHEN over the LAN.
Provide scripts/shutdown_orion.py (kill_daemon.py becomes a thin alias) and
IPC_Client::ShutdownStack for on-console Unix clients.
Serialize IPC_Client with a per-target mutex and full-frame send/recv plus
NUL-terminated payloads. Escape reply JSON vars, null-check daemon FS paths,
handle BREW_UTIL_TEST_CONNECTION, and track BREW_LAST_RET from the last reply.
Introduce SettingsStore (mutex snapshot/update), dual-path config mtime gating,
and fan IPC persistence to twin config files. Stop cold-start toolbox delay on
util_booted; fix jailbreak hijack retry to stop only when dead or maxed.
Add host tests for IPC wire helpers, toolbox timing policy, and hijack retry.
Break daemon/commands.cpp into playtime, jailbreak, and utils TUs. Introduce
ToolboxUiState with compatibility aliases, extract pure toolbox resource
routing for host unit tests, and fix superuser empty-XML pass-through.
Keep IPC_loop as the only transport entry in msg.cpp. Move toolbox/fps
injection, LoadSettings, and remount/chmod/reply helpers into dedicated
TUs behind daemon_ops.hpp so inject changes no longer touch the IPC ring.