CNA-GAP-074: Guests cannot take part in PlayerMatch or Ranked sessions

CNA snapshot b0e97bb1  ·  Known Issues › Functional gaps  ·  source links pinned to b0e97bb1

✓

Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit b0e97bb1; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.

Guests of a signed-in account can play in Local, LocalWithLeaderboards and SystemLink sessions, but PlayerMatch and Ranked refuse them (GamerServicesNotAvailableException, or GamerPrivilegeException from AddLocalGamer): a guest has no service identity.

Identifier
CNA-GAP-074
Category
Functional gap
Subsystem
Networking & gamer services
Status
Open
Verified against
CNA b0e97bb1 (b0e97bb1bb876f9b3edd6f4ff1ef3067908ae8ac)
Evidence basis
Source-verified: read at TARGET, not executed
Tests touching this area
Yes: see Current tests
Affected contract
NetworkSession Create, Find and Join (and their Begin/End forms) and AddLocalGamer for PlayerMatch and Ranked sessions whose local gamers include a guest SignedInGamer

Expected behaviour

XNA 4.0's managed NetworkSession (decompiled; read, not executed) applies no guest check when creating, finding, joining or adding local gamers; a guest's state travels in the session roster (NetworkGamerState.IsGuest, NetworkGamer.IsGuest). CNA's own limitations register records XNA's guests of a signed-in LIVE profile (Guide.ShowSignIn(paneCount, onlineOnly: true)).

Actual behaviour at TARGET

ServiceLocalGamers in NetworkSession.cpp, used by PlayerMatch and Ranked create, find and join, skips guests when it picks the local gamers itself and throws GamerServicesNotAvailableException ("A local gamer is not authorized for CNA online sessions.") for a guest in an explicit list; AddLocalGamer on an online session refuses a gamer without a service identity with GamerPrivilegeException (OnlineSessionBinding.cpp). Local, LocalWithLeaderboards and SystemLink sessions accept guests. CNA records the gap itself in section 16 of gamer-services-known-limitations.md: a guest has no credential of its own, and online guests would need a service-side guest identity bound to its host account.

Source locations

Evidence

Read at b0e97bb1 and compared with the decompiled XNA 4.0 Microsoft.Xna.Framework.Net assembly; nothing was built or executed. The refusal is deliberate and documented by CNA ("Observable impact: online guests are refused").

Focused reproduction

No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.

Current tests

The guest rules of the other session types are tested (for example TwoProcessLoopbackTest.GuestsAreGuestsOnEveryMachineAcrossRealProcesses); no test admits a guest to a PlayerMatch or Ranked session.

Regression test

Once a service-side guest identity exists, create and join a PlayerMatch session with an account and its guest and expect both in the session with IsGuest set on the guest.

Blast radius

Online split-screen titles that bring a guest into PlayerMatch or Ranked sessions. Local, LocalWithLeaderboards and SystemLink play with guests is unaffected.

Workaround

Sign each online player in with an account of their own, or use SystemLink for split-screen play with guests.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.