private void GetAndSetCapabilities() { protocol.GetServerCapabilities(); Dictionary <string, object> clientCapabilities = new Dictionary <string, object>(); // validates TLS use if (Settings.SslMode != MySqlSslMode.None) { var capability = protocol.Capabilities.Capabilities_.FirstOrDefault(i => i.Name.ToLowerInvariant() == "tls"); if (capability != null) { serverSupportsTls = true; clientCapabilities.Add("tls", "1"); } } protocol.SetCapabilities(clientCapabilities); }
private void GetAndSetCapabilities() { protocol.GetServerCapabilities(); Dictionary <string, object> clientCapabilities = new Dictionary <string, object>(); // validates TLS use if (Settings.SslMode != MySqlSslMode.None) { var capability = protocol.Capabilities.Capabilities_.FirstOrDefault(i => i.Name.ToLowerInvariant() == "tls"); if (capability != null) { serverSupportsTls = true; clientCapabilities.Add("tls", "1"); } } // set connection-attributes if (Settings.ConnectionAttributes.ToLower() != "false") { clientCapabilities.Add("session_connect_attrs", GetConnectionAttributes(Settings.ConnectionAttributes)); } try { protocol.SetCapabilities(clientCapabilities); } catch (MySqlException ex) { if (ex.Message == "Capability 'session_connect_attrs' doesn't exist") { clientCapabilities.Remove("session_connect_attrs"); } protocol.SetCapabilities(clientCapabilities); } }
private void GetAndSetCapabilities() { protocol.GetServerCapabilities(); var clientCapabilities = new Dictionary <string, object>(); Mysqlx.Connection.Capability capability = null; // Validates TLS use. if (Settings.SslMode != MySqlSslMode.None) { capability = protocol.Capabilities.Capabilities_.FirstOrDefault(i => i.Name.ToLowerInvariant() == "tls"); if (capability != null) { serverSupportsTls = true; clientCapabilities.Add("tls", "1"); } } // Set connection-attributes. if (Settings.ConnectionAttributes.ToLower() != "false") { clientCapabilities.Add("session_connect_attrs", GetConnectionAttributes(Settings.ConnectionAttributes)); } // Set compression algorithm. if (Settings.Compression != CompressionType.Disabled) { capability = protocol.Capabilities.Capabilities_.FirstOrDefault(i => i.Name.ToLowerInvariant() == XCompressionController.COMPRESSION_KEY); // Raise error if client expects compression but server doesn't support it. if (Settings.Compression == CompressionType.Required && capability == null) { throw new NotSupportedException(ResourcesX.CompressionNotSupportedByServer); } // Update capabilities with the compression algorithm negotiation if server supports compression. if (capability != null) { var algorithmsDictionary = capability.Value.Obj.Fld.ToDictionary( field => field.Key, field => field.Value.Array.Value.ToDictionary(value => value.Scalar.VString.Value.ToStringUtf8().ToLowerInvariant()).Keys.ToList()); if (algorithmsDictionary.ContainsKey(XCompressionController.ALGORITHMS_SUBKEY)) { var supportedCompressionAlgorithms = algorithmsDictionary[XCompressionController.ALGORITHMS_SUBKEY].ToList().ToArray(); VerifyDefaultOrder(ref supportedCompressionAlgorithms); var userCompressionAlgorithms = NegotiateUserAgainstClientAlgorithms(Settings.CompressionAlgorithm); var compressionCapabilities = NegotiateCompression(supportedCompressionAlgorithms, userCompressionAlgorithms); if (compressionCapabilities != null) { clientCapabilities.Add(XCompressionController.COMPRESSION_KEY, compressionCapabilities); var compressionAlgorithm = compressionCapabilities.First().Value.ToString(); _readerCompressionController = new XCompressionController((CompressionAlgorithms)Enum.Parse(typeof(CompressionAlgorithms), compressionAlgorithm), false); _writerCompressionController = new XCompressionController((CompressionAlgorithms)Enum.Parse(typeof(CompressionAlgorithms), compressionAlgorithm), true); _reader = new XPacketReaderWriter(_stream, _readerCompressionController); _writer = new XPacketReaderWriter(_stream, _writerCompressionController); } } } } try { protocol.SetCapabilities(clientCapabilities); } catch (MySqlException ex) { if (ex.Message == "Capability 'session_connect_attrs' doesn't exist") { clientCapabilities.Remove("session_connect_attrs"); } protocol.SetCapabilities(clientCapabilities); } }