Beispiel #1
0
        private void WritePassword(MyCatPacket packet)
        {
            bool   secure   = (Flags & ClientFlags.SECURE_CONNECTION) != 0;
            object password = GetPassword();

            if (password is string)
            {
                if (secure)
                {
                    packet.WriteLenString((string)password);
                }
                else
                {
                    packet.WriteString((string)password);
                }
            }
            else if (password == null)
            {
                packet.WriteByte(0);
            }
            else if (password is byte[])
            {
                packet.Write(password as byte[]);
            }
            else
            {
                throw new MyCatException("Unexpected password format: " + password.GetType());
            }
        }
Beispiel #2
0
        private void AuthenticationChange()
        {
            MyCatPacket packet = driver.Packet;

            packet.Clear();
            byte[] moreData = MoreData(null);
            while (moreData != null && moreData.Length > 0)
            {
                packet.Clear();
                packet.Write(moreData);
                driver.SendPacket(packet);

                packet = ReadPacket();
                byte prefixByte = packet.Buffer[0];
                if (prefixByte != 1)
                {
                    return;
                }

                // a prefix of 0x01 means need more auth data
                byte[] responseData = new byte[packet.Length - 1];
                Array.Copy(packet.Buffer, 1, responseData, 0, responseData.Length);
                moreData = MoreData(responseData);
            }
            // we get here if MoreData returned null but the last packet read was a more data packet
            ReadPacket();
        }
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            MyCatGuid g = new MyCatGuid();

            g.isNull   = true;
            g.OldGuids = OldGuids;
            if (!nullVal)
            {
                if (OldGuids)
                {
                    return(ReadOldGuid(packet, length));
                }
                string s = String.Empty;
                if (length == -1)
                {
                    s = packet.ReadLenString();
                }
                else
                {
                    s = packet.ReadString(length);
                }
                g.mValue = new Guid(s);
                g.isNull = false;
            }
            return(g);
        }
Beispiel #4
0
 void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
 {
   decimal v = (val is decimal) ? (decimal)val : Convert.ToDecimal(val);
   string valStr = v.ToString(CultureInfo.InvariantCulture);
   if (binary)
     packet.WriteLenString(valStr);
   else
     packet.WriteStringNoNull(valStr);
 }
Beispiel #5
0
    IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
    {
      if (nullVal)
        return new MyCatDecimal(true);

      string s = String.Empty;
      if (length == -1)
        s = packet.ReadLenString();
      else
        s = packet.ReadString(length);
      return new MyCatDecimal(s);
    }
        public void WriteValue(MyCatPacket packet, bool binary, object value, int length)
        {
            ulong v = (value is UInt64) ? (UInt64)value : Convert.ToUInt64(value);

            if (binary)
            {
                packet.WriteInteger((long)v, 8);
            }
            else
            {
                packet.WriteStringNoNull(v.ToString());
            }
        }
Beispiel #7
0
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            long v = (val is Int64) ? (Int64)val : Convert.ToInt64(val);

            if (binary)
            {
                packet.WriteInteger(v, 8);
            }
            else
            {
                packet.WriteStringNoNull(v.ToString());
            }
        }
Beispiel #8
0
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            double v = (val is double) ? (double)val : Convert.ToDouble(val);

            if (binary)
            {
                packet.Write(BitConverter.GetBytes(v));
            }
            else
            {
                packet.WriteStringNoNull(v.ToString("R", CultureInfo.InvariantCulture));
            }
        }
Beispiel #9
0
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            sbyte v = (val is sbyte) ? (sbyte)val : Convert.ToSByte(val);

            if (binary)
            {
                packet.WriteByte((byte)v);
            }
            else
            {
                packet.WriteStringNoNull(v.ToString());
            }
        }
Beispiel #10
0
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            int v = (val is Int32) ? (int)val : Convert.ToInt32(val);

            if (binary)
            {
                packet.WriteInteger((long)v, is24Bit ? 3 : 4);
            }
            else
            {
                packet.WriteStringNoNull(v.ToString());
            }
        }
Beispiel #11
0
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object v, int length)
        {
            uint val = (v is uint) ? (uint)v : Convert.ToUInt32(v);

            if (binary)
            {
                packet.WriteInteger((long)val, is24Bit ? 3 : 4);
            }
            else
            {
                packet.WriteStringNoNull(val.ToString());
            }
        }
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            int v = (val is UInt16) ? (UInt16)val : Convert.ToUInt16(val);

            if (binary)
            {
                packet.WriteInteger((long)v, 2);
            }
            else
            {
                packet.WriteStringNoNull(v.ToString());
            }
        }
Beispiel #13
0
        internal void Authenticate(bool reset)
        {
            CheckConstraints();

            MyCatPacket packet = driver.Packet;

            // send auth response
            packet.WriteString(GetUsername());

            // now write the password
            WritePassword(packet);

            if ((Flags & ClientFlags.CONNECT_WITH_DB) != 0 || reset)
            {
                if (!String.IsNullOrEmpty(Settings.Database))
                {
                    packet.WriteString(Settings.Database);
                }
            }

            if (reset)
            {
                packet.WriteInteger(8, 2);
            }

            if ((Flags & ClientFlags.PLUGIN_AUTH) != 0)
            {
                packet.WriteString(PluginName);
            }

            driver.SetConnectAttrs();
            driver.SendPacket(packet);
            //read server response
            packet = ReadPacket();
            byte[] b = packet.Buffer;
            if (b[0] == 0xfe)
            {
                if (packet.IsLastPacket)
                {
                    driver.Close(true);
                    throw new MyCatException(Resources.OldPasswordsNotSupported);
                }
                else
                {
                    HandleAuthChange(packet);
                }
            }
            driver.ReadOk(false);
            AuthenticationSuccessful();
        }
Beispiel #14
0
 private MyCatPacket ReadPacket()
 {
     try
     {
         MyCatPacket p = driver.ReadPacket();
         return(p);
     }
     catch (MyCatException ex)
     {
         // make sure this is an auth failed ex
         AuthenticationFailed(ex);
         return(null);
     }
 }
        private MyCatGuid ReadOldGuid(MyCatPacket packet, long length)
        {
            if (length == -1)
            {
                length = (long)packet.ReadFieldLength();
            }

            byte[] buff = new byte[length];
            packet.Read(buff, 0, (int)length);
            MyCatGuid g = new MyCatGuid(buff);

            g.OldGuids = OldGuids;
            return(g);
        }
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatTimeSpan(true));
            }

            if (length >= 0)
            {
                string value = packet.ReadString(length);
                ParseMyCat(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);
        }
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            byte[] buffToWrite = (val as byte[]);
            if (buffToWrite == null)
            {
                char[] valAsChar = (val as Char[]);
                if (valAsChar != null)
                {
                    buffToWrite = packet.Encoding.GetBytes(valAsChar);
                }
                else
                {
                    string s = val.ToString();
                    if (length == 0)
                    {
                        length = s.Length;
                    }
                    else
                    {
                        s = s.Substring(0, length);
                    }
                    buffToWrite = packet.Encoding.GetBytes(s);
                }
            }

            // we assume zero length means write all of the value
            if (length == 0)
            {
                length = buffToWrite.Length;
            }

            if (buffToWrite == null)
            {
                throw new MyCatException("Only byte arrays and strings can be serialized by MyCatBinary");
            }

            if (binary)
            {
                packet.WriteLength(length);
                packet.Write(buffToWrite, 0, length);
            }
            else
            {
                packet.WriteStringNoNull("X");
                packet.WriteStringNoNull("\'");
                packet.WriteStringNoNull(ToHexString(buffToWrite));
                packet.WriteStringNoNull("\'");
            }
        }
        private void SerializeText(MyCatPacket packet, MyCatDateTime value)
        {
            string val = String.Empty;

            val = String.Format("{0:0000}-{1:00}-{2:00}",
                                value.Year, value.Month, value.Day);
            if (type != MyCatDbType.Date)
            {
                val = value.Microsecond > 0 ? String.Format("{0} {1:00}:{2:00}:{3:00}.{4:000000}", val,
                                                            value.Hour, value.Minute, value.Second, value.Microsecond) : String.Format("{0} {1:00}:{2:00}:{3:00} ", val,
                                                                                                                                       value.Hour, value.Minute, value.Second);
            }

            packet.WriteStringNoNull("'" + val + "'");
        }
Beispiel #19
0
        private void HandleAuthChange(MyCatPacket 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);

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

            plugin.AuthenticationChange();
        }
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            Guid   guid        = Guid.Empty;
            string valAsString = val as string;

            byte[] valAsByte = val as byte[];

            if (val is Guid)
            {
                guid = (Guid)val;
            }
            else
            {
                try
                {
                    if (valAsString != null)
                    {
                        guid = new Guid(valAsString);
                    }
                    else if (valAsByte != null)
                    {
                        guid = new Guid(valAsByte);
                    }
                }
                catch (Exception ex)
                {
                    throw new MyCatException(Resources.DataNotInSupportedFormat, ex);
                }
            }

            if (OldGuids)
            {
                WriteOldGuid(packet, guid, binary);
            }
            else
            {
                guid.ToString("D");

                if (binary)
                {
                    packet.WriteLenString(guid.ToString("D"));
                }
                else
                {
                    packet.WriteStringNoNull("'" + MyCatHelper.EscapeString(guid.ToString("D")) + "'");
                }
            }
        }
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatUInt16(true));
            }

            if (length == -1)
            {
                return(new MyCatUInt16((ushort)packet.ReadInteger(2)));
            }
            else
            {
                return(new MyCatUInt16(UInt16.Parse(packet.ReadString(length))));
            }
        }
Beispiel #22
0
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatInt64(true));
            }

            if (length == -1)
            {
                return(new MyCatInt64((long)packet.ReadULong(8)));
            }
            else
            {
                return(new MyCatInt64(Int64.Parse(packet.ReadString(length))));
            }
        }
Beispiel #23
0
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatSingle(true));
            }

            if (length == -1)
            {
                byte[] b = new byte[4];
                packet.Read(b, 0, 4);
                return(new MyCatSingle(BitConverter.ToSingle(b, 0)));
            }
            return(new MyCatSingle(Single.Parse(packet.ReadString(length),
                                                CultureInfo.InvariantCulture)));
        }
Beispiel #24
0
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatUByte(true));
            }

            if (length == -1)
            {
                return(new MyCatUByte((byte)packet.ReadByte()));
            }
            else
            {
                return(new MyCatUByte(Byte.Parse(packet.ReadString(length))));
            }
        }
        private void WriteOldGuid(MyCatPacket packet, Guid guid, bool binary)
        {
            byte[] bytes = guid.ToByteArray();

            if (binary)
            {
                packet.WriteLength(bytes.Length);
                packet.Write(bytes);
            }
            else
            {
                packet.WriteStringNoNull("_binary ");
                packet.WriteByte((byte)'\'');
                EscapeByteArray(bytes, bytes.Length, packet);
                packet.WriteByte((byte)'\'');
            }
        }
Beispiel #26
0
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatUInt32((this as IMyCatValue).MyCatDbType, true));
            }

            if (length == -1)
            {
                return(new MyCatUInt32((this as IMyCatValue).MyCatDbType,
                                       (uint)packet.ReadInteger(4)));
            }
            else
            {
                return(new MyCatUInt32((this as IMyCatValue).MyCatDbType,
                                       UInt32.Parse(packet.ReadString(length), NumberStyles.Any, CultureInfo.InvariantCulture)));
            }
        }
Beispiel #27
0
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            {
                return(new MyCatByte(true));
            }

            if (length == -1)
            {
                return(new MyCatByte((sbyte)packet.ReadByte()));
            }
            else
            {
                string    s = packet.ReadString(length);
                MyCatByte b = new MyCatByte(SByte.Parse(s, NumberStyles.Any, CultureInfo.InvariantCulture));
                b.TreatAsBoolean = TreatAsBoolean;
                return(b);
            }
        }
Beispiel #28
0
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            string v = val.ToString();

            if (length > 0)
            {
                length = Math.Min(length, v.Length);
                v      = v.Substring(0, length);
            }

            if (binary)
            {
                packet.WriteLenString(v);
            }
            else
            {
                packet.WriteStringNoNull("'" + MyCatHelper.EscapeString(v) + "'");
            }
        }
        void IMyCatValue.WriteValue(MyCatPacket packet, bool binary, object val, int length)
        {
            if (!(val is TimeSpan))
            {
                throw new MyCatException("Only TimeSpan objects can be serialized by MyCatTimeSpan");
            }

            TimeSpan ts       = (TimeSpan)val;
            bool     negative = ts.TotalMilliseconds < 0;

            ts = ts.Duration();

            if (binary)
            {
                if (ts.Milliseconds > 0)
                {
                    packet.WriteByte(12);
                }
                else
                {
                    packet.WriteByte(8);
                }

                packet.WriteByte((byte)(negative ? 1 : 0));
                packet.WriteInteger(ts.Days, 4);
                packet.WriteByte((byte)ts.Hours);
                packet.WriteByte((byte)ts.Minutes);
                packet.WriteByte((byte)ts.Seconds);
                if (ts.Milliseconds > 0)
                {
                    long mval = ts.Milliseconds * 1000;
                    packet.WriteInteger(mval, 4);
                }
            }
            else
            {
                String s = String.Format("'{0}{1} {2:00}:{3:00}:{4:00}.{5:0000000}'",
                                         negative ? "-" : "", ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Ticks % 10000000);

                packet.WriteStringNoNull(s);
            }
        }
Beispiel #30
0
        IMyCatValue IMyCatValue.ReadValue(MyCatPacket packet, long length, bool nullVal)
        {
            MyCatGeometry g;

            if (nullVal)
            {
                g = new MyCatGeometry(_type, true);
            }
            else
            {
                if (length == -1)
                {
                    length = (long)packet.ReadFieldLength();
                }

                byte[] newBuff = new byte[length];
                packet.Read(newBuff, 0, (int)length);
                g = new MyCatGeometry(_type, newBuff);
            }
            return(g);
        }