netcode-revival: expose gate-status diagnostics for the Party Play frontend gate
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
Some checks are pending
Lint & Format Check / Format Check (push) Waiting to run
This commit is contained in:
parent
e09f224a6b
commit
7b9d706f79
2 changed files with 28 additions and 0 deletions
|
|
@ -122,6 +122,18 @@ class XNetTransport {
|
||||||
// client. Fragile: the address is tied to this title's build.
|
// client. Fragile: the address is tied to this title's build.
|
||||||
void ForceLiveFlag();
|
void ForceLiveFlag();
|
||||||
|
|
||||||
|
// netcode-revival: diagnostics for the frontend "Xbox Live features" gate
|
||||||
|
// (the game checks these before enabling the Party Play / online menu).
|
||||||
|
struct GateStatus {
|
||||||
|
bool live_flag_mapped = false;
|
||||||
|
uint8_t live_flag_value = 0; // the game's "live user index"
|
||||||
|
uint32_t signin_state[4] = {}; // XamUserGetSigninState per slot
|
||||||
|
bool signin_info_ok[4] = {}; // XamUserGetSigninInfo per slot succeeds
|
||||||
|
bool link_active = false; // XNetGetEthernetLinkStatus != 0
|
||||||
|
bool title_online = false; // XNetGetTitleXnAddr status & 0x60
|
||||||
|
};
|
||||||
|
GateStatus GetGateStatus() const;
|
||||||
|
|
||||||
// --- discovery (used by XNetQosLookup) ------------------------------------
|
// --- discovery (used by XNetQosLookup) ------------------------------------
|
||||||
// Send a session query for our room; the reply lands asynchronously and is
|
// Send a session query for our room; the reply lands asynchronously and is
|
||||||
// surfaced by Sessions() once WaitForReply returns.
|
// surfaced by Sessions() once WaitForReply returns.
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,22 @@ void XNetTransport::ForceLiveFlag() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XNetTransport::GateStatus XNetTransport::GetGateStatus() const {
|
||||||
|
GateStatus gs;
|
||||||
|
uint8_t* flag = REX_KERNEL_MEMORY()->TranslateVirtual<uint8_t*>(0x83028851);
|
||||||
|
gs.live_flag_mapped = flag != nullptr;
|
||||||
|
gs.live_flag_value = flag != nullptr ? *flag : 0;
|
||||||
|
const uint32_t state = REX_KERNEL_STATE()->user_profile()->signin_state();
|
||||||
|
const bool signed_in = REX_KERNEL_STATE()->user_profile()->is_signed_in();
|
||||||
|
for (int slot = 0; slot < 4; ++slot) {
|
||||||
|
gs.signin_state[slot] = state;
|
||||||
|
gs.signin_info_ok[slot] = signed_in;
|
||||||
|
}
|
||||||
|
gs.link_active = true; // XNetGetEthernetLinkStatus now reports active
|
||||||
|
gs.title_online = true; // XNetGetTitleXnAddr now reports 0x60
|
||||||
|
return gs;
|
||||||
|
}
|
||||||
|
|
||||||
void XNetTransport::SetRelay(const char* host, uint16_t port, const char* room) {
|
void XNetTransport::SetRelay(const char* host, uint16_t port, const char* room) {
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mu_);
|
std::lock_guard<std::mutex> lock(mu_);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue