Example #1
0
 public bool Unpack(MemoryStream stream)
 {
     TraceID          = BigEndianUtilities.ReadByteArray(stream, 16);
     ActivityID       = BigEndianUtilities.ReadByteArray(stream, 16);
     ActivitySequence = BigEndianUtilities.ReadULong(stream);
     return(true);
 }
Example #2
0
 public void Pack(MemoryStream stream)
 {
     BigEndianUtilities.WriteUShort(stream, BuildNumber);
     stream.WriteByte(Minor);
     stream.WriteByte(Major);
     BigEndianUtilities.WriteUShort(stream, SubBuildNumber);
 }
Example #3
0
 public bool Unpack(MemoryStream stream)
 {
     BuildNumber    = BigEndianUtilities.ReadUShort(stream);
     Minor          = Convert.ToByte(stream.ReadByte());
     Major          = Convert.ToByte(stream.ReadByte());
     SubBuildNumber = BigEndianUtilities.ReadUShort(stream);
     return(true);
 }
Example #4
0
        public void WriteByteArrayToMemoryStream()
        {
            var stream = new MemoryStream();

            BigEndianUtilities.WriteByteArray(stream, new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef });

            CollectionAssert.AreEqual(new byte[] { 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01 }, stream.ToArray());
        }
Example #5
0
        public void WriteULongToMemoryStream()
        {
            var stream = new MemoryStream();

            BigEndianUtilities.WriteULong(stream, 0x0123456789abcdef);

            CollectionAssert.AreEqual(new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }, stream.ToArray());
        }
Example #6
0
        public void WriteUIntToMemoryStream()
        {
            var stream = new MemoryStream();

            BigEndianUtilities.WriteUInt(stream, 0x01234567);

            CollectionAssert.AreEqual(new byte[] { 0x01, 0x23, 0x45, 0x67 }, stream.ToArray());
        }
 /// <summary>
 /// Used to pack IPackageable to a stream.
 /// </summary>
 /// <param name="stream">MemoryStream in which IPackageable is packet into.</param>
 public void Pack(MemoryStream stream)
 {
     stream.WriteByte((byte)this.Type);
     if (this.Type != TDSPreLoginOptionTokenType.Terminator)
     {
         BigEndianUtilities.WriteUShort(stream, this.Offset);
         BigEndianUtilities.WriteUShort(stream, this.Length);
     }
 }
Example #8
0
 public void Pack(MemoryStream stream)
 {
     stream.WriteByte((byte)Type);
     stream.WriteByte((byte)Status);
     BigEndianUtilities.WriteUShort(stream, Length);
     BigEndianUtilities.WriteUShort(stream, SPID);
     stream.WriteByte(Packet);
     stream.WriteByte(Window);
 }
Example #9
0
 /// <summary>
 /// Used to pack IPackageable to a stream.
 /// </summary>
 /// <param name="stream">MemoryStream in which IPackageable is packet into.</param>
 public void Pack(MemoryStream stream)
 {
     stream.WriteByte((byte)this.Type);
     stream.WriteByte((byte)this.Status);
     BigEndianUtilities.WriteUShort(stream, this.Length);
     BigEndianUtilities.WriteUShort(stream, this.SPID);
     stream.WriteByte(this.Packet);
     stream.WriteByte(this.Window);
 }
Example #10
0
 public bool Unpack(MemoryStream stream)
 {
     Type   = (TDSMessageType)stream.ReadByte();
     Status = (TDSMessageStatus)stream.ReadByte();
     Length = BigEndianUtilities.ReadUShort(stream);
     SPID   = BigEndianUtilities.ReadUShort(stream);
     Packet = Convert.ToByte(stream.ReadByte());
     Window = Convert.ToByte(stream.ReadByte());
     return(true);
 }
Example #11
0
        public void ReadUIntFromMemoryStream()
        {
            var stream = new MemoryStream();

            stream.Write(new byte[] { 0x01, 0x23, 0x45, 0x67 });
            stream.Seek(0, SeekOrigin.Begin);

            var res = BigEndianUtilities.ReadUInt(stream);

            Assert.AreEqual((uint)0x01234567, res);
        }
        public bool Unpack(MemoryStream stream)
        {
            Type = (TDSPreLoginOptionTokenType)stream.ReadByte();

            if (Type != TDSPreLoginOptionTokenType.Terminator)
            {
                Offset = BigEndianUtilities.ReadUShort(stream);
                Length = BigEndianUtilities.ReadUShort(stream);
            }
            return(true);
        }
Example #13
0
        public void ReadByteArrayFromMemoryStream()
        {
            var stream = new MemoryStream();

            stream.Write(new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef });
            stream.Seek(0, SeekOrigin.Begin);

            var res = BigEndianUtilities.ReadByteArray(stream, 8);

            CollectionAssert.AreEqual(new byte[] { 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01 }, res);
        }
Example #14
0
        public void ReadULongFromMemoryStream()
        {
            var stream = new MemoryStream();

            stream.Write(new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef });
            stream.Seek(0, SeekOrigin.Begin);

            var res = BigEndianUtilities.ReadULong(stream);

            Assert.AreEqual((ulong)0x0123456789abcdef, res);
        }
Example #15
0
        public void ReadUShortFromMemoryStream()
        {
            var stream = new MemoryStream();

            stream.Write(new byte[] { 0x01, 0x23 });
            stream.Seek(0, SeekOrigin.Begin);

            var res = BigEndianUtilities.ReadUShort(stream);

            Assert.AreEqual(0x0123, res);
        }
Example #16
0
        /// <summary>
        /// Used to unpack IPackageable from a stream.
        /// </summary>
        /// <param name="stream">MemoryStream from which to unpack IPackageable.</param>
        /// <returns>Returns true if successful.</returns>
        public bool Unpack(MemoryStream stream)
        {
            {
                TDSPreLoginOptionToken option;
                do
                {
                    option = new TDSPreLoginOptionToken();
                    option.Unpack(stream);
                    this.Options.Add(option);
                }while (option.Type != TDSPreLoginOptionTokenType.Terminator);
            }

            foreach (var option in this.Options)
            {
                switch (option.Type)
                {
                case TDSPreLoginOptionTokenType.Encryption:
                {
                    this.Encryption = (TDSEncryptionOption)stream.ReadByte();
                    break;
                }

                case TDSPreLoginOptionTokenType.FedAuthRequired:
                {
                    this.FedAuthRequired = stream.ReadByte() == 1;
                    break;
                }

                case TDSPreLoginOptionTokenType.InstOpt:
                {
                    this.Instance = new byte[option.Length];
                    stream.Read(this.Instance, 0, option.Length);

                    break;
                }

                case TDSPreLoginOptionTokenType.MARS:
                {
                    this.MARS = stream.ReadByte() == 1;
                    break;
                }

                case TDSPreLoginOptionTokenType.NonceOpt:
                {
                    this.Nonce = BigEndianUtilities.ReadByteArray(stream, 32);
                    break;
                }

                case TDSPreLoginOptionTokenType.ThreadID:
                {
                    this.ThreadID = BigEndianUtilities.ReadUInt(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.TraceID:
                {
                    this.TraceID = new TDSClientTraceID();
                    this.TraceID.Unpack(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.Version:
                {
                    this.ClientVersion = new TDSClientVersion();
                    this.ClientVersion.Unpack(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.Terminator:
                {
                    break;
                }
                }
            }

            this.Terminated = true;
            return(true);
        }
Example #17
0
        /// <summary>
        /// Used to pack IPackageable to a stream.
        /// </summary>
        /// <param name="stream">MemoryStream in which IPackageable is packet into.</param>
        public void Pack(MemoryStream stream)
        {
            if (this.Options.Count == 0 || this.Options[0].Type != TDSPreLoginOptionTokenType.Version || this.Options[this.Options.Count - 1].Type != TDSPreLoginOptionTokenType.Terminator || !this.Terminated)
            {
                throw new InvalidOperationException();
            }

            var offset = (ushort)(((this.Options.Count - 1) * ((2 * sizeof(ushort)) + sizeof(byte))) + sizeof(byte));

            foreach (var option in this.Options)
            {
                option.Offset = offset;
                offset       += option.Length;
                option.Pack(stream);
            }

            foreach (var option in this.Options)
            {
                switch (option.Type)
                {
                case TDSPreLoginOptionTokenType.Encryption:
                {
                    stream.WriteByte((byte)this.Encryption);
                    break;
                }

                case TDSPreLoginOptionTokenType.FedAuthRequired:
                {
                    if (this.FedAuthRequired)
                    {
                        stream.WriteByte(0x01);
                    }
                    else
                    {
                        stream.WriteByte(0x00);
                    }

                    break;
                }

                case TDSPreLoginOptionTokenType.InstOpt:
                {
                    if (this.Instance != null && this.Instance.Length != 0)
                    {
                        stream.Write(this.Instance, 0, this.Instance.Length);
                    }
                    else
                    {
                        stream.WriteByte(0x00);
                    }

                    break;
                }

                case TDSPreLoginOptionTokenType.MARS:
                {
                    if (this.MARS)
                    {
                        stream.WriteByte(0x01);
                    }
                    else
                    {
                        stream.WriteByte(0x00);
                    }

                    break;
                }

                case TDSPreLoginOptionTokenType.NonceOpt:
                {
                    BigEndianUtilities.WriteByteArray(stream, this.Nonce);
                    break;
                }

                case TDSPreLoginOptionTokenType.ThreadID:
                {
                    BigEndianUtilities.WriteUInt(stream, this.ThreadID);
                    break;
                }

                case TDSPreLoginOptionTokenType.TraceID:
                {
                    this.TraceID.Pack(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.Version:
                {
                    this.ClientVersion.Pack(stream);
                    break;
                }
                }
            }
        }
        public bool Unpack(MemoryStream stream)
        {
            {
                TDSPreLoginOptionToken option;
                do
                {
                    option = new TDSPreLoginOptionToken();
                    option.Unpack(stream);
                    Options.Add(option);
                }while (option.Type != TDSPreLoginOptionTokenType.Terminator);
            }
            foreach (var option in Options)
            {
                switch (option.Type)
                {
                case TDSPreLoginOptionTokenType.Encryption:
                {
                    Encryption = (TDSEncryptionOption)stream.ReadByte();
                    break;
                }

                case TDSPreLoginOptionTokenType.FedAuthRequired:
                {
                    FedAuthRequired = stream.ReadByte() == 1;
                    break;
                }

                case TDSPreLoginOptionTokenType.InstOpt:
                {
                    throw new NotSupportedException();
                }

                case TDSPreLoginOptionTokenType.MARS:
                {
                    MARS = stream.ReadByte() == 1;
                    break;
                }

                case TDSPreLoginOptionTokenType.NonceOpt:
                {
                    Nonce = BigEndianUtilities.ReadByteArray(stream, 32);
                    break;
                }

                case TDSPreLoginOptionTokenType.ThreadID:
                {
                    ThreadID = BigEndianUtilities.ReadULong(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.TraceID:
                {
                    TraceID = new TDSClientTraceID();
                    TraceID.Unpack(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.Version:
                {
                    ClientVersion = new TDSClientVersion();
                    ClientVersion.Unpack(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.Terminator:
                {
                    break;
                }
                }
            }
            Terminated = true;
            return(true);
        }
        public void Pack(MemoryStream stream)
        {
            if (Options.Count == 0 || Options[0].Type != TDSPreLoginOptionTokenType.Version || Options[Options.Count - 1].Type != TDSPreLoginOptionTokenType.Terminator || !Terminated)
            {
                throw new InvalidOperationException();
            }

            var offset = (ushort)((Options.Count - 1) * (2 * sizeof(ushort) + sizeof(byte)) + sizeof(byte));

            foreach (var option in Options)
            {
                // ToDo
                option.Offset = offset;
                option.Pack(stream);
            }

            foreach (var option in Options)
            {
                switch (option.Type)
                {
                case TDSPreLoginOptionTokenType.Encryption:
                {
                    stream.WriteByte((byte)Encryption);
                    break;
                }

                case TDSPreLoginOptionTokenType.FedAuthRequired:
                {
                    if (FedAuthRequired)
                    {
                        stream.WriteByte(0x01);
                    }
                    else
                    {
                        stream.WriteByte(0x00);
                    }
                    break;
                }

                case TDSPreLoginOptionTokenType.InstOpt:
                {
                    throw new NotSupportedException();
                }

                case TDSPreLoginOptionTokenType.MARS:
                {
                    if (MARS)
                    {
                        stream.WriteByte(0x01);
                    }
                    else
                    {
                        stream.WriteByte(0x00);
                    }
                    break;
                }

                case TDSPreLoginOptionTokenType.NonceOpt:
                {
                    BigEndianUtilities.WriteByteArray(stream, Nonce);
                    break;
                }

                case TDSPreLoginOptionTokenType.ThreadID:
                {
                    BigEndianUtilities.WriteULong(stream, ThreadID);
                    break;
                }

                case TDSPreLoginOptionTokenType.TraceID:
                {
                    TraceID.Pack(stream);
                    break;
                }

                case TDSPreLoginOptionTokenType.Version:
                {
                    ClientVersion.Pack(stream);
                    break;
                }
                }
            }
        }
Example #20
0
 public void Pack(MemoryStream stream)
 {
     BigEndianUtilities.WriteByteArray(stream, TraceID);
     BigEndianUtilities.WriteByteArray(stream, ActivityID);
     BigEndianUtilities.WriteULong(stream, ActivitySequence);
 }