using System.Buffers.Binary; using System.Security.Cryptography; namespace XFEEliteDangerous.NativeFormat.Replication; /// /// Pinned native RPC66/67: U64 system address; reply U64 and a narrow FString. /// This codec supports the explicit private policy of no post-generation overrides. /// 3CCCE80 treats an empty string as a successful no-change operation, leaving /// the native procedural world intact. It does not create or validate that world. /// public static class EdServerStellarForgeMessageCodec { public const byte RequestMethod = 66, ReplyMethod = 67; public static ulong ReadRequest(EdServerCallEnvelope message) { ArgumentNullException.ThrowIfNull(message); if (message.PayloadBits != 72) throw new InvalidDataException("Invalid native post-generation request shape."); var data = message.CopyPayload(); try { if (data[0] != RequestMethod) throw new InvalidDataException("Invalid native post-generation request method."); return BinaryPrimitives.ReadUInt64LittleEndian(data.AsSpan(1)); } finally { CryptographicOperations.ZeroMemory(data); } } public static EdServerCallEnvelope CreateNoOverridesReply(ulong reference, ulong systemAddress) { Span data = stackalloc byte[13]; data.Clear(); data[0] = ReplyMethod; BinaryPrimitives.WriteUInt64LittleEndian(data[1..], systemAddress); //626B40 reads a32-bit narrow byte count; zero means no override text. try { return new(reference, false, 104, data); } finally { data.Clear(); } } public static ulong ReadNoOverridesReply(EdServerCallEnvelope message) { ArgumentNullException.ThrowIfNull(message); if (message.Flag || message.PayloadBits != 104) throw new InvalidDataException("Invalid native empty post-generation reply shape."); var data = message.CopyPayload(); try { if (data[0] != ReplyMethod || BinaryPrimitives.ReadUInt32LittleEndian(data.AsSpan(9)) != 0) throw new InvalidDataException("Expected an explicit no-overrides post-generation reply."); return BinaryPrimitives.ReadUInt64LittleEndian(data.AsSpan(1)); } finally { CryptographicOperations.ZeroMemory(data); } } }