in MySQL.Data/src/X/Sessions/XInternalSession.cs [83:166]
protected override void Open()
{
bool isUnix = Settings.ConnectionProtocol == MySqlConnectionProtocol.Unix ||
Settings.ConnectionProtocol == MySqlConnectionProtocol.UnixSocket;
_stream = MyNetworkStream.CreateStreamAsync(
Settings.Server == "127.0.0.1" || Settings.Server == "::1"
? "localhost"
: Settings.Server,
Settings.ConnectTimeout,
Settings.Keepalive,
Settings.Port,
isUnix, false).GetAwaiter().GetResult();
_myNetworkStream = (MyNetworkStream)_stream;
if (_stream == null)
throw new MySqlException(ResourcesX.UnableToConnect);
_packetReaderWriter = new XPacketReaderWriter(_stream, _myNetworkStream.Socket);
_protocol = new XProtocol(_packetReaderWriter);
Settings.CharacterSet = string.IsNullOrWhiteSpace(Settings.CharacterSet) ? "utf8mb4" : Settings.CharacterSet;
var encoding = CharSetMap.GetEncoding(Settings.CharacterSet);
SetState(SessionState.Connecting, false);
try
{
GetAndSetCapabilities();
}
catch (Exception)
{
throw;
}
// Validates use of TLS.
if (Settings.SslMode != MySqlSslMode.Disabled)
{
if (_serverSupportsTls)
{
var result = new Ssl(
Settings.Server,
Settings.SslMode,
Settings.CertificateFile,
Settings.CertificateStoreLocation,
Settings.CertificatePassword,
Settings.CertificateThumbprint,
Settings.SslCa,
Settings.SslCert,
Settings.SslKey,
Settings.TlsVersion,
Settings.ConnectTimeout)
.StartSSLAsync(_stream, encoding, Settings.ToString(), CancellationToken.None, false).GetAwaiter().GetResult();
_stream = result.Item2;
if (_readerCompressionController != null && _readerCompressionController.IsCompressionEnabled)
{
_packetReaderWriter = new XPacketReaderWriter(_stream, _readerCompressionController, _writerCompressionController, _myNetworkStream.Socket);
}
else
{
_packetReaderWriter = new XPacketReaderWriter(_stream, _myNetworkStream.Socket);
}
_protocol.SetXPackets(_packetReaderWriter);
}
else
{
// Client requires SSL connections.
string message = String.Format(Resources.NoServerSSLSupport,
Settings.Server);
throw new MySqlException(message);
}
}
else if (_readerCompressionController != null && _readerCompressionController.IsCompressionEnabled)
{
_packetReaderWriter = new XPacketReaderWriter(_stream, _readerCompressionController, _writerCompressionController, _myNetworkStream.Socket);
_protocol.SetXPackets(_packetReaderWriter);
}
Authenticate();
SetState(SessionState.Open, false);
}