public override void FromBytes(MySqlPacket data)
        {
            ProtocolVersion = data.ReadByte();
            ServerVersion   = data.ReadString();
            ThreadId        = data.ReadInteger(4);

            byte[] seedPart1 = data.ReadStringAsBytes();

            if (data.HasMoreData)
            {
                Flags = (ClientFlags)data.ReadInteger(2);
            }
            ServerCharsetNumber = (int)data.ReadByte();
            ServerStatus        = (ServerStatusFlags)data.ReadInteger(2);
            var serverCapsHigh = (uint)data.ReadInteger(2);

            Flags         |= (ClientFlags)(serverCapsHigh << 16);
            data.Position += 11;

            byte[] seedPart2 = data.ReadStringAsBytes();

            if ((Flags & ClientFlags.PLUGIN_AUTH) != 0)
            {
                AuthenticationMethod = data.ReadString();
            }
            else
            {
                AuthenticationMethod = "mysql_native_password";
            }

            EncryptionSeed = new byte[seedPart1.Length + seedPart2.Length];
            seedPart1.CopyTo(EncryptionSeed, 0);
            seedPart2.CopyTo(EncryptionSeed, seedPart1.Length);
        }
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return new MySqlByte(true)
                       {
                           TreatAsBoolean = TreatAsBoolean
                       }
            }
            ;

            MySqlByte b;

            if (length == -1)
            {
                b = new MySqlByte((sbyte)packet.ReadByte());
            }
            else
            {
                string s = packet.ReadString(length);
                b = new MySqlByte(SByte.Parse(s, NumberStyles.Any, CultureInfo.InvariantCulture));
            }

            b.TreatAsBoolean = TreatAsBoolean;
            return(b);
        }

        void IMySqlValue.SkipValue(MySqlPacket packet)
        {
            packet.ReadByte();
        }
示例#3
0
 public override void FromBytes(MySqlPacket data)
 {
     Header       = data.ReadByte();
     AffectedRows = data.ReadByte();
     InsertId     = data.ReadByte();
     //4. read server status
     ServerStatus = (ServerStatusFlags)data.ReadInteger(2);
     //5. read warning count
     WarningCount = data.ReadInteger(2);
     //6. read message
     Message = data.ReadLenString();
 }
示例#4
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlTimeSpan(true));
            }
            if (length >= 0L)
            {
                string s = packet.ReadString(length);
                this.ParseMySql(s);
                return(this);
            }
            long num  = (long)((ulong)packet.ReadByte());
            int  num2 = 0;

            if (num > 0L)
            {
                num2 = (int)packet.ReadByte();
            }
            this.isNull = false;
            if (num == 0L)
            {
                this.isNull = true;
            }
            else
            {
                if (num == 5L)
                {
                    this.mValue = new TimeSpan(packet.ReadInteger(4), 0, 0, 0);
                }
                else
                {
                    if (num == 8L)
                    {
                        this.mValue = new TimeSpan(packet.ReadInteger(4), (int)packet.ReadByte(), (int)packet.ReadByte(), (int)packet.ReadByte());
                    }
                    else
                    {
                        this.mValue = new TimeSpan(packet.ReadInteger(4), (int)packet.ReadByte(), (int)packet.ReadByte(), (int)packet.ReadByte(), packet.ReadInteger(4) / 1000000);
                    }
                }
            }
            if (num2 == 1)
            {
                this.mValue = this.mValue.Negate();
            }
            return(this);
        }
        private void HandleAuthChange(MySqlPacket packet)
        {
            packet.ReadByte();
            string arg_3D_0 = packet.ReadString();

            byte[] array = new byte[packet.Length - packet.Position];
            Array.Copy(packet.Buffer, packet.Position, array, 0, array.Length);
            MySqlAuthenticationPlugin.GetPlugin(arg_3D_0, this.driver, array).AuthenticationChange();
        }
示例#6
0
 public override void FromBytes(MySqlPacket data)
 {
     //1.read field count
     FieldCount = data.ReadByte();
     //2.read warning count
     WarningCount = data.ReadInteger(2);
     //3.read status flag
     StatusFlag = data.ReadInteger(2);
 }
示例#7
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlTimeSpan(true));
            }

            if (length >= 0)
            {
                string value = packet.ReadString(length);
                ParseMySql(value);
                return(this);
            }

            long bufLength = packet.ReadByte();
            int  negate    = 0;

            if (bufLength > 0)
            {
                negate = packet.ReadByte();
            }

            IsNull = false;
            if (bufLength == 0)
            {
                IsNull = true;
            }
            else if (bufLength == 5)
            {
                Value = new TimeSpan(packet.ReadInteger(4), 0, 0, 0);
            }
            else if (bufLength == 8)
            {
                Value = new TimeSpan(packet.ReadInteger(4),
                                     packet.ReadByte(), packet.ReadByte(), packet.ReadByte());
            }
            else
            {
                var days         = (int)packet.ReadInteger(4);
                var hours        = (int)packet.ReadByte();
                var minutes      = (int)packet.ReadByte();
                var seconds      = (int)packet.ReadByte();
                var microseconds = (int)packet.ReadInteger(4);
                Value = new TimeSpan(days, hours, minutes, seconds) + TimeSpan.FromTicks(microseconds * 10);
            }

            if (negate == 1)
            {
                Value = Value.Negate();
            }
            return(this);
        }
示例#8
0
 IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
 {
     if (nullVal)
     {
         return(new MySqlUByte(true));
     }
     if (length == -1L)
     {
         return(new MySqlUByte(packet.ReadByte()));
     }
     return(new MySqlUByte(byte.Parse(packet.ReadString(length))));
 }
示例#9
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlTimeSpan(true));
            }

            if (length >= 0)
            {
                string value = packet.ReadString(length);
                ParseMySql(value);
                return(this);
            }

            long bufLength = packet.ReadByte();
            int  negate    = 0;

            if (bufLength > 0)
            {
                negate = packet.ReadByte();
            }

            isNull = false;
            if (bufLength == 0)
            {
                isNull = true;
            }
            else if (bufLength == 5)
            {
                mValue = new TimeSpan(packet.ReadInteger(4), 0, 0, 0);
            }
            else if (bufLength == 8)
            {
                mValue = new TimeSpan(packet.ReadInteger(4),
                                      packet.ReadByte(), packet.ReadByte(), packet.ReadByte());
            }
            else
            {
                mValue = new TimeSpan(packet.ReadInteger(4),
                                      packet.ReadByte(), packet.ReadByte(), packet.ReadByte(),
                                      packet.ReadInteger(4) / 1000000);
            }

            if (negate == 1)
            {
                mValue = mValue.Negate();
            }
            return(this);
        }
示例#10
0
        /// <summary>
        /// 字节                  名称
        /// -----                 ----
        ///  1                      field_count, always = 0xff
        ///  2                      error
        ///  1                      sqlstate marker,always #
        ///  5                      sqlstate
        ///  n                      message
        /// </summary>
        public override void FromBytes(MySqlPacket data)
        {
            data.Position = 0;

            //1. read field count
            FieldCount = data.ReadByte();
            //2. read error no
            ErrorNumber = data.ReadInteger(2);
            //3. read marker
            //SqlStateMarker = data.ReadByte();
            //4. read sqlstate
            //data.Read(SqlState, 0, 5);
            //5. read message
            Message = data.ReadString();
        }
示例#11
0
        private void HandleAuthChange(MySqlPacket packet)
        {
            byte b = packet.ReadByte();

            Debug.Assert(b == 0xfe);

            string method = packet.ReadString();

            byte[] authData = new byte[packet.Length - packet.Position];
            Array.Copy(packet.Buffer, packet.Position, authData, 0, authData.Length);

            MySqlAuthenticationPlugin plugin = MySqlAuthenticationPlugin.GetPlugin(method, driver, authData);

            plugin.AuthenticationChange();
        }
示例#12
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlUByte(true));
            }

            if (length == -1)
            {
                return(new MySqlUByte((byte)packet.ReadByte()));
            }
            else
            {
                return(new MySqlUByte(Byte.Parse(packet.ReadString(length), CultureInfo.InvariantCulture)));
            }
        }
示例#13
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlByte(true));
            }
            if (length == -1L)
            {
                return(new MySqlByte((sbyte)packet.ReadByte()));
            }
            string s = packet.ReadString(length);

            return(new MySqlByte(sbyte.Parse(s, NumberStyles.Any, CultureInfo.InvariantCulture))
            {
                TreatAsBoolean = this.TreatAsBoolean
            });
        }
示例#14
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlByte(true));
            }

            if (length == -1)
            {
                return(new MySqlByte((sbyte)packet.ReadByte()));
            }
            else
            {
                var s = packet.ReadString(length);
                var b = new MySqlByte(SByte.Parse(s, NumberStyles.Any, CultureInfo.InvariantCulture));
                b.TreatAsBoolean = TreatAsBoolean;
                return(b);
            }
        }
示例#15
0
        /// <summary>
        /// ReadPacket is called by NativeDriver to start reading the next
        /// packet on the stream.
        /// </summary>
        public MySqlPacket ReadPacket()
        {
            LoadPacket();

            if (_packet.Buffer[0] == 0xff)
            {
                _packet.ReadByte();  // read off the 0xff

                int    code = _packet.ReadInteger(2);
                string msg  = String.Empty;

                msg = _packet.ReadString(Encoding.UTF8);

                if (msg.StartsWith("#", StringComparison.Ordinal))
                {
                    msg.Substring(1, 5);  /* state code */
                    msg = msg.Substring(6);
                }
                throw new DotCanalException(msg, code);
            }
            return(_packet);
        }
示例#16
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlDateTime(_type, true));
            }

            if (length >= 0)
            {
                string value = packet.ReadString(length);
                return(ParseMySql(value));
            }

            long bufLength = packet.ReadByte();
            int  year = 0, month = 0, day = 0;
            int  hour = 0, minute = 0, second = 0, microsecond = 0;

            if (bufLength >= 4)
            {
                year  = packet.ReadInteger(2);
                month = packet.ReadByte();
                day   = packet.ReadByte();
            }

            if (bufLength > 4)
            {
                hour   = packet.ReadByte();
                minute = packet.ReadByte();
                second = packet.ReadByte();
            }

            if (bufLength > 7)
            {
                microsecond = packet.Read3ByteInt();
                packet.ReadByte();
            }

            return(new MySqlDateTime(_type, year, month, day, hour, minute, second, microsecond));
        }
示例#17
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlTimeSpan(true));
            }
            if (length >= 0L)
            {
                string s = packet.ReadString(length);
                this.ParseMySql(s);
                return(this);
            }
            long num  = packet.ReadByte();
            int  num2 = 0;

            if (num > 0L)
            {
                num2 = packet.ReadByte();
            }
            this.isNull = false;
            switch (num)
            {
            case 0L:
                this.isNull = true;
                break;

            case 5L:
                this.mValue = new TimeSpan(packet.ReadInteger(4), 0, 0, 0);
                break;

            case 8L:
                this.mValue = new TimeSpan(packet.ReadInteger(4), packet.ReadByte(), packet.ReadByte(), packet.ReadByte());
                break;

            default:
                this.mValue = new TimeSpan(packet.ReadInteger(4), packet.ReadByte(), packet.ReadByte(), packet.ReadByte(), packet.ReadInteger(4) / 0xf4240);
                break;
            }
            if (num2 == 1)
            {
                this.mValue = this.mValue.Negate();
            }
            return(this);
        }
示例#18
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlDateTime(this.type, true));
            }
            if (length >= 0L)
            {
                string s = packet.ReadString(length);
                return(this.ParseMySql(s));
            }
            ulong arg_49_0 = (ulong)packet.ReadByte();
            int   num      = 0;
            int   num2     = 0;
            int   num3     = 0;
            int   num4     = 0;
            int   num5     = 0;
            int   num6     = 0;
            int   num7     = 0;

            if (arg_49_0 >= 4uL)
            {
                num  = packet.ReadInteger(2);
                num2 = (int)packet.ReadByte();
                num3 = (int)packet.ReadByte();
            }
            if (arg_49_0 > 4uL)
            {
                num4 = (int)packet.ReadByte();
                num5 = (int)packet.ReadByte();
                num6 = (int)packet.ReadByte();
            }
            if (arg_49_0 > 7uL)
            {
                num7 = packet.Read3ByteInt();
                packet.ReadByte();
            }
            return(new MySqlDateTime(this.type, num, num2, num3, num4, num5, num6, num7));
        }
示例#19
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MySqlDateTime(this.type, true));
            }
            if (length >= 0L)
            {
                string s = packet.ReadString(length);
                return(this.ParseMySql(s));
            }
            long num  = (long)((ulong)packet.ReadByte());
            int  num2 = 0;
            int  num3 = 0;
            int  num4 = 0;
            int  num5 = 0;
            int  num6 = 0;
            int  num7 = 0;
            int  num8 = 0;

            if (num >= 4L)
            {
                num2 = packet.ReadInteger(2);
                num3 = (int)packet.ReadByte();
                num4 = (int)packet.ReadByte();
            }
            if (num > 4L)
            {
                num5 = (int)packet.ReadByte();
                num6 = (int)packet.ReadByte();
                num7 = (int)packet.ReadByte();
            }
            if (num > 7L)
            {
                num8 = packet.Read3ByteInt();
                packet.ReadByte();
            }
            return(new MySqlDateTime(this.type, num2, num3, num4, num5, num6, num7, num8));
        }
示例#20
0
 void IMySqlValue.SkipValue(MySqlPacket packet)
 {
     packet.ReadByte();
 }
示例#21
0
        void IMySqlValue.SkipValue(MySqlPacket packet)
        {
            int len = packet.ReadByte();

            packet.Position += len;
        }
    private void HandleAuthChange(MySqlPacket packet)
    {
      var b = packet.ReadByte();
      Debug.Assert(b == 0xfe);

      var method = packet.ReadString();
      var authData = new byte[packet.Length - packet.Position];
      Array.Copy(packet.Buffer, packet.Position, authData, 0, authData.Length);

      var plugin = GetPlugin(method, driver, authData);
      plugin.AuthenticationChange();
    }
示例#23
0
        void IMySqlValue.SkipValue(MySqlPacket packet)
        {
            int num = (int)packet.ReadByte();

            packet.Position += num;
        }