public MySqlField(Driver driver) { this.driver = driver; connVersion = driver.Version; maxLength = 1; binaryOk = true; }
public static CharacterSet GetCharacterSet(DBVersion version, string CharSetName) { CharacterSet cs = null; if (mapping.ContainsKey(CharSetName)) cs = (CharacterSet)mapping[CharSetName]; if (cs == null) throw new MySqlException("Character set '" + CharSetName + "' is not supported by .Net Framework."); return cs; }
public static Stream GetStream(string server, uint port, string pipename, uint keepalive, DBVersion v, uint timeout) { MySqlConnectionStringBuilder settings = new MySqlConnectionStringBuilder(); settings.Server = server; settings.Port = port; settings.PipeName = pipename; settings.Keepalive = keepalive; settings.ConnectionTimeout = timeout; return GetStream(settings); }
public StreamCreator(string hosts, uint port, string pipeName, uint keepalive, DBVersion driverVersion) { hostList = hosts; if (hostList == null || hostList.Length == 0) hostList = "localhost"; this.port = port; this.pipeName = pipeName; this.keepalive = keepalive; this.driverVersion = driverVersion; }
public StreamCreator(string hosts, uint port, string pipeName, uint keepalive, DBVersion driverVersion) { hostList = hosts; if (hostList == null || hostList.Length == 0) { hostList = "localhost"; } this.port = port; this.pipeName = pipeName; this.keepalive = keepalive; this.driverVersion = driverVersion; }
/// <summary> /// Returns the text encoding for a given MySQL character set name /// </summary> /// <param name="version">Version of the connection requesting the encoding</param> /// <param name="CharSetName">Name of the character set to get the encoding for</param> /// <returns>Encoding object for the given character set name</returns> public static Encoding GetEncoding(DBVersion version, string CharSetName) { try { CharacterSet cs = GetCharacterSet(version, CharSetName); return Encoding.GetEncoding(cs.name); } catch (NotSupportedException) { return Encoding.GetEncoding("utf-8"); } }
public static Stream GetStream(string server, uint port, string pipename, uint keepalive, DBVersion v, uint timeout) { MyCatConnectionStringBuilder settings = new MyCatConnectionStringBuilder(); settings.Server = server; settings.Port = port; settings.PipeName = pipename; settings.Keepalive = keepalive; settings.ConnectionTimeout = timeout; return(GetStream(settings)); }
public void Open() { // connect to one of our specified hosts try { baseStream = StreamCreator.GetStream(Settings); #if NET451 if (Settings.IncludeSecurityAsserts) MySqlSecurityPermission.CreatePermissionSet(false).Assert(); #endif } catch (System.Security.SecurityException) { throw; } catch (Exception ex) { throw new MySqlException(Resources.UnableToConnectToHost, (int)MySqlErrorCode.UnableToConnectToHost, ex); } if (baseStream == null) throw new MySqlException(Resources.UnableToConnectToHost, (int)MySqlErrorCode.UnableToConnectToHost); int maxSinglePacket = 255 * 255 * 255; stream = new MySqlStream(baseStream, Encoding, false); stream.ResetTimeout((int)Settings.ConnectionTimeout * 1000); // read off the welcome packet and parse out it's values packet = stream.ReadPacket(); int protocol = packet.ReadByte(); string versionString = packet.ReadString(); owner.isFabric = versionString.EndsWith("fabric", StringComparison.OrdinalIgnoreCase); version = DBVersion.Parse(versionString); if (!owner.isFabric && !version.isAtLeast(5, 0, 0)) throw new NotSupportedException(Resources.ServerTooOld); threadId = packet.ReadInteger(4); encryptionSeed = packet.ReadString(); maxSinglePacket = (256 * 256 * 256) - 1; // read in Server capabilities if they are provided ClientFlags serverCaps = 0; if (packet.HasMoreData) serverCaps = (ClientFlags)packet.ReadInteger(2); /* New protocol with 16 bytes to describe server characteristics */ owner.ConnectionCharSetIndex = (int)packet.ReadByte(); serverStatus = (ServerStatusFlags)packet.ReadInteger(2); // Since 5.5, high bits of server caps are stored after status. // Previously, it was part of reserved always 0x00 13-byte filler. uint serverCapsHigh = (uint)packet.ReadInteger(2); serverCaps |= (ClientFlags)(serverCapsHigh << 16); packet.Position += 11; string seedPart2 = packet.ReadString(); encryptionSeed += seedPart2; string authenticationMethod = ""; if ((serverCaps & ClientFlags.PLUGIN_AUTH) != 0) { authenticationMethod = packet.ReadString(); } else { // Some MySql versions like 5.1, don't give name of plugin, default to native password. authenticationMethod = "mysql_native_password"; } // based on our settings, set our connection flags SetConnectionFlags(serverCaps); packet.Clear(); packet.WriteInteger((int)connectionFlags, 4); if ((serverCaps & ClientFlags.SSL) == 0) { if ((Settings.SslMode != MySqlSslMode.None) && (Settings.SslMode != MySqlSslMode.Preferred)) { // Client requires SSL connections. string message = String.Format(Resources.NoServerSSLSupport, Settings.Server); throw new MySqlException(message); } } else if (Settings.SslMode != MySqlSslMode.None) { stream.SendPacket(packet); StartSSL(); packet.Clear(); packet.WriteInteger((int)connectionFlags, 4); } packet.WriteInteger(maxSinglePacket, 4); packet.WriteByte(8); packet.Write(new byte[23]); Authenticate(authenticationMethod, false); // if we are using compression, then we use our CompressedStream class // to hide the ugliness of managing the compression if ((connectionFlags & ClientFlags.COMPRESS) != 0) stream = new MySqlStream(baseStream, Encoding, true); // give our stream the server version we are connected to. // We may have some fields that are read differently based // on the version of the server we are connected to. packet.Version = version; stream.MaxBlockSize = maxSinglePacket; }