- Python 100%
Extend the dynamic burst to the LOBBY/menu game (KNOWN_GOOD_0014, CreateOrJoinGame)
so the menu peer and mission peer share ONE coherent session identity - the crux of
the singleton-teardown test. Same BLAZE_DYNAMIC_MISSION_BURST flag (default OFF); the
static _patch_known_good_payload path is unchanged when off.
- build_lobby_game_setup: full lobby GAME{} + PROS[] from GAMEOBJ + lobby constants
(GTYP=frostbite_multiplayer, DHST=all-zeros/self-hosted, MCAP=29, top-level DLSC),
reusing the mission field writers.
- Coherence: lobby+mission derive PHST/CONG/HPID/HSES/persona from the same GAMEOBJ;
lobby DHST=0 cannot collide with the mission's UsidCONG+1 dedicated host.
- ProtoTunnel: lobby UUIDs feed no key derivation (self-hosted, no menu tunnel), so
lobby mints fresh uuid4s and deliberately does NOT publish DYNAMIC_MISSION_NGS_HEX
(that would corrupt the mission tunnel key).
- Round-trip test tests/test_dynamic_lobby_burst.py: build-with-captured-values ==
KNOWN_GOOD_0014 byte-for-byte (1157 B). Mission round-trip still passes.
- Hand-encoded the 56-byte PGSR blob length (BlazeFuncs.writeBlob mis-encodes lengths
in [50,63]: uses <0x32 single-byte threshold instead of <0x40).
|
||
|---|---|---|
| Components_Client | ||
| crt | ||
| Data | ||
| docs | ||
| tests | ||
| tools | ||
| Utils | ||
| .gitignore | ||
| .loadlevel_attempt.txt | ||
| .tinyevent_attempt.txt | ||
| _test_end_to_end_with_gameserver_udp.py | ||
| _test_sessionfeed_smoke.py | ||
| BlazeMain_Client.py | ||
| frostbite_protocol.py | ||
| Https.py | ||
| Init.bat | ||
| Init.py | ||
| mission_fsm.py | ||
| probe_protocol.py | ||
| README.md | ||
| reference_replay_bodies.py | ||
| replay_cid56_cid207.py | ||
| SessionFeed.py | ||
| smoke_intra_tunnel_probe.py | ||
| smoke_mission_fsm.py | ||
| test_destruction_encoder.py | ||
| test_loadlevel_roundtrip.py | ||
blaze_realudp_fork
Fork of blaze_test_share_experimental/ that uses real UDP only - no DLL inject bridge.
What is different from the main branch
| Item | Main branch | This fork |
|---|---|---|
| Port 21123 (PlaintextBridgeServer) | Active | Disabled (commented out in Init.py) |
| Port 21124 (ProbeBridgeServer) | Active | Disabled (commented out in Init.py) |
| Port 21122 (MissionUDPServer) | Secondary / fallback | Primary path |
| DLL requirement | AnthemLogger.dll with bridge::Start() | AnthemLogger_realudp.dll with bridge DISABLED |
| transport.write() replies | Injected via SocketControl('push') | Sent directly back to client source addr |
The assumption is that BRIDGE_DISABLE_HMAC in the companion DLL has already clobbed uHmacType=0
on the ProtoTunnel ref, so the wire is effectively plaintext and MissionUDPServer's transport.write()
replies are accepted by the game's ProtoTunnel layer.
How to run
Stop the main branch Blaze first. Then:
cd code/blaze_realudp_fork
C:\Python27\python.exe -B Init.py
Environment: set DATABASE_URL the same as the main API server.
Known gotchas
-
Source address must match what Blaze advertised. The game connects to the IP:port from
NotifyGameSetup(EXIP/INIP). If Blaze advertised127.0.0.1:21122, the game sends from127.0.0.1:<ephemeral>andtransport.write(addr)will reply correctly. If Blaze advertised a non-loopback IP, the game source addr will differ. -
Probe handshake on 21122. With the ProbeBridgeServer gone, bit-packed
0x8101probes arrive directly on 21122. MissionUDPServer already hasPROBE_REPLY_MODE = "bitflip"and_dispatch_handshake_probe- this should handle them without needing a separate bridge port. -
RC4 must be OFF. This fork is predicated on the DLL having clobbered
uHmacType=0(see AnthemLogger_realudp). If RC4 body encryption is somehow still active the wire bytes will be unreadable. -
Log files. Blaze logs to
blaze.log/blaze.log.errin the fork dir, separate from the main branch logs.