public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteUInt8((byte)BeatmapDifficultyMask); buffer.WriteUInt16((ushort)GameplayModifiersMask); buffer.WriteUInt64(SongPackBloomFilterTop); buffer.WriteUInt64(SongPackBloomFilterBottom); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteUInt8((byte)Platform); buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteVarBytes(SessionToken); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteString(Secret); buffer.WriteVarUInt(CurrentPlayerCount); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteVarUInt((uint)Certificates.Count); foreach (var certificate in Certificates) { buffer.WriteVarBytes(certificate); } }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteUInt32(MultipartMessageId); buffer.WriteVarUInt(Offset); buffer.WriteVarUInt(Length); buffer.WriteVarUInt(TotalLength); buffer.WriteBytes(Data); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteIPEndPoint(RemoteEndPoint); buffer.WriteBytes(Random); buffer.WriteVarBytes(PublicKey); buffer.WriteUInt8((byte)((IsConnectionOwner ? 1 : 0) | (IsDedicatedServer ? 2 : 0))); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteBytes(Random); buffer.WriteVarBytes(PublicKey); Configuration.WriteTo(ref buffer); buffer.WriteString(Secret); }
/// <inheritdoc cref="IEncryptedMessageWriter.WriteTo"/> public void WriteTo <T>(ref GrowingSpanBuffer buffer, T message, byte[] key, HMAC hmac) where T : class, IMessage { if (message is not IEncryptedMessage) { throw new Exception($"Message of type '{typeof(T).Name}' cannot be encrypted."); } var unencryptedBuffer = new GrowingSpanBuffer(stackalloc byte[412]); _messageWriter.WriteTo(ref unencryptedBuffer, message); var hashBuffer = new GrowingSpanBuffer(stackalloc byte[unencryptedBuffer.Size + 4]); hashBuffer.WriteBytes(unencryptedBuffer.Data); hashBuffer.WriteUInt32(((IEncryptedMessage)message).SequenceId); Span <byte> hash = stackalloc byte[32]; if (!hmac.TryComputeHash(hashBuffer.Data, hash, out _)) { throw new Exception("Failed to compute message hash."); } unencryptedBuffer.WriteBytes(hash.Slice(0, 10)); var iv = new byte[16]; _rngCryptoServiceProvider.GetBytes(iv); var paddingByteCount = (byte)((16 - ((unencryptedBuffer.Size + 1) & 15)) & 15); for (var i = 0; i < paddingByteCount + 1; i++) { unencryptedBuffer.WriteUInt8(paddingByteCount); } var encryptedBuffer = unencryptedBuffer.Data.ToArray(); using (var cryptoTransform = _aesCryptoServiceProvider.CreateEncryptor(key, iv)) { var bytesWritten = 0; for (var i = encryptedBuffer.Length; i >= cryptoTransform.InputBlockSize; i -= bytesWritten) { var inputCount = cryptoTransform.CanTransformMultipleBlocks ? (i / cryptoTransform.InputBlockSize * cryptoTransform.InputBlockSize) : cryptoTransform.InputBlockSize; bytesWritten = cryptoTransform.TransformBlock( encryptedBuffer, bytesWritten, inputCount, encryptedBuffer, bytesWritten ); } } buffer.WriteUInt32(((IEncryptedMessage)message).SequenceId); buffer.WriteBytes(iv); buffer.WriteBytes(encryptedBuffer); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteUInt8((byte)Result); if (!Success) { return; } buffer.WriteIPEndPoint(RemoteEndPoint); buffer.WriteString(Code); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteBytes(Random); buffer.WriteVarBytes(PublicKey); buffer.WriteString(Secret); buffer.WriteString(Code); buffer.WriteString(Password); buffer.WriteBool(UseRelay); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteString(ServerName); buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteString(Secret); buffer.WriteString(Password); buffer.WriteVarInt(CurrentPlayerCount); buffer.WriteVarInt(MaximumPlayerCount); buffer.WriteUInt8((byte)DiscoveryPolicy); buffer.WriteUInt8((byte)InvitePolicy); Configuration.WriteTo(ref buffer); buffer.WriteBytes(Random); buffer.WriteVarBytes(PublicKey); }
/// <inheritdoc cref="IMessageWriter.WriteTo"/> public void WriteTo <T>(ref GrowingSpanBuffer buffer, T message, byte packetProperty) where T : class, IMessage { var messageGroup = 0U; var messageId = 0U; try { var messageType = message.GetType(); messageGroup = _messageRegistries .First(kvp => kvp.Value.TryGetMessageId(messageType, out messageId)) .Key; } catch (InvalidOperationException) { throw new Exception( "Failed to retrieve identifier for message of type " + $"'{typeof(T).Name}'." ); } if (packetProperty != 0x00) { buffer.WriteUInt8(packetProperty); } buffer.WriteUInt32(messageGroup); buffer.WriteVarUInt(ProtocolVersion); var messageBuffer = new GrowingSpanBuffer(stackalloc byte[412]); messageBuffer.WriteVarUInt(messageId); if (message is IReliableRequest reliableRequest) { messageBuffer.WriteUInt32(reliableRequest.RequestId); } if (message is IReliableResponse reliableResponse) { messageBuffer.WriteUInt32(reliableResponse.ResponseId); } message.WriteTo(ref messageBuffer); buffer.WriteVarUInt((uint)messageBuffer.Size); // TODO: Remove byte array allocation buffer.WriteBytes(messageBuffer.Data.ToArray()); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteUInt8((byte)Result); if (!Success) { return; } buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteString(Secret); buffer.WriteUInt8((byte)DiscoveryPolicy); buffer.WriteUInt8((byte)InvitePolicy); buffer.WriteVarInt(MaximumPlayerCount); Configuration.WriteTo(ref buffer); buffer.WriteUInt8((byte)((IsConnectionOwner ? 1 : 0) | (IsDedicatedServer ? 2 : 0))); buffer.WriteIPEndPoint(RemoteEndPoint); buffer.WriteBytes(Random); buffer.WriteVarBytes(PublicKey); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteBytes(Random); buffer.WriteVarBytes(PublicKey); buffer.WriteVarBytes(Signature); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { AuthenticationToken.WriteTo(ref buffer); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteUInt8((byte)Result); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteBytes(Random); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteString(UserId); buffer.WriteString(UserName); buffer.WriteString(Secret); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteUInt32(CertificateResponseId); buffer.WriteBytes(Random); buffer.WriteBytes(Cookie); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteVarBytes(ClientPublicKey); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteBool(MessageHandled); }
public override void WriteTo(ref GrowingSpanBuffer buffer) { buffer.WriteBytes(Cookie); }