Files
BlackBearReloaded c2b50141fd Local wireless multiplayer through Eden rooms (#101)
* Validate Eden room packets and add offline interoperability checks

* Bound proxy decompression and receive queues

* Add asynchronous room controller and cancellable connections

* Wire room settings and lifecycle into the launcher

* Bound outgoing room queues and test stalled peers

* Own room receive callbacks per proxy socket

* Support proxy polling and release sockets between games

* Retain guest sockets across descriptor changes

* Record offline qualification and freeze fresh candidates

* Record room server and read-only console preflight evidence

* Show room members and reported games in a scrollable list

* Document Tailscale capabilities and verify room rejection recovery

* Record remaining hardware validation prerequisites

* Record successful room transport over Tailscale

* Record verified console deployment for operator testing

* Use a supported keyboard type for masked password entry

* Remember room passwords and report connection failures

* Report ENet handshake errors and packet counts

* Parse numeric room addresses before invoking the resolver

* Record operator-confirmed PS5 room connection

* Use the room virtual interface for guest wireless networking

* Compose room interfaces with the native getifaddrs adaptation

* Exercise LDN discovery and peer connection through a real room

* Record PS5 Mario Kart wireless lobby validation

* Record live LDN traffic, recovery and Tailscale component validation

* Prepare official desktop reference and correct room interface guidance

* Record public room connection and native DNS failure

* Show multiplayer connection status on home and settings

* Make external Tailscale qualification optional

* Invalidate network compiler cache for generated room headers

* Use the pinned Boost version in multiplayer host checks

* Show room server ping in the game overlay

* Record verified ping overlay deployment to PS5

* Respect detailed logging settings for multiplayer diagnostics

* Make the room socket non-blocking on the console so the member loop can send the join request

* Add public room browser beside private multiplayer connection

* Keep multiplayer destination choice selectable while connected

* Record local public browser validation and deferred console test

* Explain multiplayer connection failures in a persistent UI panel

* Define idle-only multiplayer validation on console .40

* Record console .40 public directory and private room validation

* Update public room notes for PR publication

* Keep the saved private room on public joins, save the private form as typed, and harden the public room list

* Translate the multiplayer and public room texts in all 29 languages
2026-10-11 01:02:48 -04:00

44 lines
1.6 KiB
C++

// SPDX-License-Identifier: GPL-3.0-or-later
// Exercise native parameter construction against the system dialog's password/type rule.
#define PS5_NATIVE
#include "system_keyboard.cpp"
#include <cassert>
static int expected_type;
static bool expected_password;
extern "C" {
int sceSysmoduleLoadModule(std::uint16_t) { return 0; }
int sceCommonDialogInitialize() { return 0; }
int sceUserServiceGetForegroundUser(std::int32_t* user) { *user = 1; return 0; }
int sceImeDialogInit(const ImeParam* param, const void*) {
assert(param->type == expected_type);
assert(bool(param->option & 4) == expected_password);
if ((param->option & 4) && param->type != 1 && param->type != 4)
return static_cast<int>(0x80bc0030u);
assert(param->max_text_length == 128);
assert(param->input_text_buffer[0] == u't');
return 0;
}
int sceImeDialogGetStatus() { return 2; }
int sceImeDialogGetResult(ImeResult* result) { result->outcome = 0; return 0; }
int sceImeDialogTerm() { return 0; }
int sceImeDialogAbort() { return 0; }
}
int main() {
std::atomic<bool> stop{};
for (bool password : {false, true}) {
for (bool numbers : {false, true}) {
Eden::TextRequest request;
request.initial = u"test";
request.max_length = 128;
request.password = expected_password = password;
request.numbers = numbers;
expected_type = numbers ? 4 : password ? 1 : 0;
const auto answer = Eden::AskSystemKeyboard(request, stop);
assert(answer.outcome == Eden::TextOutcome::accepted);
assert(answer.text == request.initial);
}
}
}