gameserver: consume Cycle's extra header bit -> bunches align (NMT_Hello parses)
Build Game Server / build (push) Successful in 22s
Build Game Server / build (push) Successful in 22s
Bit-decoded real client packets: the header is 65 bits (not stock UE 4.27's 64). One extra bit sits between the ack history and the packet-info payload; consuming it realigns bHasPacketInfoPayload + jitter + bHasServerFrameTime, and the first control-channel bunch parses (ChIndex 0, open, reliable = NMT_Hello). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -532,6 +532,19 @@ public abstract class UNetConnection : UPlayer
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The Cycle client (UE4 R3.5.0) writes one extra bit between the packet's
|
||||||
|
// ack history and the packet-info payload that stock UE 4.27 (EngineNetVer
|
||||||
|
// 16) does not. Bit-decoding real client packets showed the header is 65
|
||||||
|
// bits, not 64: consuming this bit realigns everything downstream — the
|
||||||
|
// bHasPacketInfoPayload flag, the 10-bit jitter clock and bHasServerFrameTime
|
||||||
|
// then land exactly, and the first control-channel bunch parses cleanly
|
||||||
|
// (ChIndex 0, NMT_Hello). Observed always 0 in captures.
|
||||||
|
var bCycleExtraHeaderBit = reader.ReadBit();
|
||||||
|
if (bCycleExtraHeaderBit)
|
||||||
|
{
|
||||||
|
Logger.Warning("[HS-HDR] Cycle extra header bit was set (expected 0)");
|
||||||
|
}
|
||||||
|
|
||||||
var bHasPacketInfoPayload = true;
|
var bHasPacketInfoPayload = true;
|
||||||
|
|
||||||
if (reader.EngineNetVer() > EEngineNetworkVersionHistory.HISTORY_JITTER_IN_HEADER)
|
if (reader.EngineNetVer() > EEngineNetworkVersionHistory.HISTORY_JITTER_IN_HEADER)
|
||||||
|
|||||||
Reference in New Issue
Block a user