private static PayloadWriter CreateCapabilitiesPayload(ProtocolCapabilities serverCapabilities, ConnectionSettings cs, bool useCompression, ProtocolCapabilities additionalCapabilities = 0) { var writer = new PayloadWriter(); writer.WriteInt32((int)( ProtocolCapabilities.Protocol41 | ProtocolCapabilities.LongPassword | ProtocolCapabilities.SecureConnection | (serverCapabilities & ProtocolCapabilities.PluginAuth) | (serverCapabilities & ProtocolCapabilities.PluginAuthLengthEncodedClientData) | ProtocolCapabilities.MultiStatements | ProtocolCapabilities.MultiResults | ProtocolCapabilities.LocalFiles | (string.IsNullOrWhiteSpace(cs.Database) ? 0 : ProtocolCapabilities.ConnectWithDatabase) | (cs.UseAffectedRows ? 0 : ProtocolCapabilities.FoundRows) | (useCompression ? ProtocolCapabilities.Compress : ProtocolCapabilities.None) | (serverCapabilities & ProtocolCapabilities.ConnectionAttributes) | (serverCapabilities & ProtocolCapabilities.DeprecateEof) | additionalCapabilities)); writer.WriteInt32(0x4000_0000); writer.WriteByte((byte)CharacterSet.Utf8Mb4Binary); writer.Write(new byte[23]); return(writer); }
public static PayloadData Create(string databaseName) { var writer = new PayloadWriter(); writer.WriteByte((byte)CommandKind.InitDatabase); writer.Write(Encoding.UTF8.GetBytes(databaseName)); return(writer.ToPayloadData()); }
public static PayloadData Create(string user, byte[] authResponse, string schemaName, byte[] connectionAttributes) { var writer = new PayloadWriter(); writer.WriteByte((byte)CommandKind.ChangeUser); writer.WriteNullTerminatedString(user); writer.WriteByte(checked ((byte)authResponse.Length)); writer.Write(authResponse); writer.WriteNullTerminatedString(schemaName ?? ""); writer.WriteByte((byte)CharacterSet.Utf8Mb4Binary); writer.WriteByte(0); writer.WriteNullTerminatedString("mysql_native_password"); if (connectionAttributes != null) { writer.Write(connectionAttributes); } return(writer.ToPayloadData()); }
/// <summary> /// Return a random outpoint and a random payload. /// </summary> private (Outpoint, Memory <byte>) MakeRandomRawTxo(int lowLimit, int upLimit) { var content = new byte[Outpoint.TotalSizeInBytes].AsMemory(); var temp = new byte[Outpoint.KeySizeInBytes - 4]; _rand.NextBytes(temp); temp.CopyTo(content); var index = _rand.Next(0, 20); BitConverter.GetBytes(index).CopyTo(content.Slice(Outpoint.KeySizeInBytes - 4, 4)); var payloadLength = _rand.Next(lowLimit, upLimit); BitConverter.GetBytes(payloadLength).CopyTo(content.Slice(Outpoint.KeySizeInBytes, 4)); var payload = new byte[payloadLength]; _rand.NextBytes(payload); var numberOfEvents = _rand.Next(1, 5); // write data length inside payload BitConverter.TryWriteBytes(payload.AsSpan(sizeof(ulong), sizeof(int)), payloadLength - sizeof(ulong) - sizeof(int) - BlockEvent.SizeInBytes * numberOfEvents); var writer = new PayloadWriter(payload.AsSpan(payloadLength - BlockEvent.SizeInBytes * numberOfEvents)); for (var i = 0; i < numberOfEvents; ++i) { var ev = new BlockEvent((uint)_rand.Next(0, 1_000_000)); writer.Write(ev); } return(Outpoint.Create(content.Span), payload); }
private static byte[] CreateConnectionAttributes() { var attributesWriter = new PayloadWriter(); attributesWriter.WriteLengthEncodedString("_client_name"); attributesWriter.WriteLengthEncodedString("MySqlConnector"); attributesWriter.WriteLengthEncodedString("_client_version"); attributesWriter.WriteLengthEncodedString(typeof(ServerSession).GetTypeInfo().Assembly.GetCustomAttribute <AssemblyInformationalVersionAttribute>().InformationalVersion); try { Utility.GetOSDetails(out var os, out var osDescription, out var architecture); if (os != null) { attributesWriter.WriteLengthEncodedString("_os"); attributesWriter.WriteLengthEncodedString(os); } attributesWriter.WriteLengthEncodedString("_os_details"); attributesWriter.WriteLengthEncodedString(osDescription); attributesWriter.WriteLengthEncodedString("_platform"); attributesWriter.WriteLengthEncodedString(architecture); } catch (PlatformNotSupportedException) { } using (var process = Process.GetCurrentProcess()) { attributesWriter.WriteLengthEncodedString("_pid"); attributesWriter.WriteLengthEncodedString(process.Id.ToString(CultureInfo.InvariantCulture)); } var connectionAttributes = attributesWriter.ToBytes(); var writer = new PayloadWriter(); writer.WriteLengthEncodedInteger((ulong)connectionAttributes.Length); writer.Write(connectionAttributes); return(writer.ToBytes()); }