Beispiel #1
0
 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;
 }
Beispiel #5
0
 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");
     }
 }
Beispiel #7
0
        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;
        }