Esempio n. 1
0
        public void ReadValueError()
        {
            WireDecoder d = new WireDecoder(new byte[0]);

            Assert.That(d.ReadValue(NtType.Unassigned), Is.Null);
            Assert.That(d.Error, Is.Not.Null);
        }
Esempio n. 2
0
        private void ReadThreadMain()
        {
            WireDecoder decoder = new WireDecoder(m_stream, ProtoRev);

            m_state = State.Handshake;

            if (!m_handshake(this, () =>
            {
                decoder.ProtoRev = ProtoRev;
                var msg = Message.Read(decoder, m_getEntryType);
                if (msg == null && decoder.Error != null)
                {
                    Debug($"error reading in handshake: {decoder.Error}");
                }
                return(msg);
            }, messages =>
            {
                m_outgoing.Add(messages);
            }))
            {
                m_state = State.Dead;
                Active  = false;
                return;
            }

            m_state = State.Active;
            m_notifier.NotifyConnection(true, GetConnectionInfo());
            while (Active)
            {
                if (m_stream == null)
                {
                    break;
                }
                decoder.ProtoRev = ProtoRev;
                decoder.Reset();
                var msg = Message.Read(decoder, m_getEntryType);
                if (msg == null)
                {
                    if (decoder.Error != null)
                    {
                        Info($"read error: {decoder.Error}");
                    }
                    //terminate connection on bad message
                    m_stream?.Dispose();
                    break;
                }
                Debug3($"received type={msg.Type} with str={msg.Str} id={msg.Id} seqNum={msg.SeqNumUid}");
                LastUpdate = Timestamp.Now();
                m_processIncoming(msg, this);
            }

            Debug2($"read thread died ({this})");
            if (m_state != State.Dead)
            {
                m_notifier.NotifyConnection(false, GetConnectionInfo());
            }
            m_state = State.Dead;
            Active  = false;
            m_outgoing.Add(new List <Message>()); // Also kill write thread
        }
Esempio n. 3
0
        public void TestRawValue()
        {
            byte[] rawData = new byte[]
            {
                0x05, (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o',
                0x03, (byte)'b', (byte)'y', (byte)'e', 0x55,
            };
            WireDecoder d   = new WireDecoder(rawData);
            var         val = d.ReadValue(NtType.Raw);

            Assert.That(val.Type, Is.EqualTo(NtType.Raw));
            Assert.That(val.Value, Is.EqualTo(v_raw.Value));

            var vFalse = RpcValue.MakeRaw((byte)'b', (byte)'y', (byte)'e');

            val = d.ReadValue(NtType.Raw);
            Assert.That(val.Type, Is.EqualTo(NtType.Raw));
            Assert.That(val.Value, Is.EqualTo(vFalse.Value));

            byte b = 0;

            Assert.That(d.Read8(ref b));
            Assert.That(b, Is.EqualTo(0x55));

            Assert.That(d.ReadValue(NtType.Raw), Is.Null);
            Assert.That(d.Error, Is.Null);
        }
Esempio n. 4
0
        public void Read32()
        {
            byte[]       rawData = { 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xab, 0xcd, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x00, 0x00 };
            MemoryStream stream  = new MemoryStream(rawData);
            WireDecoder  d       = new WireDecoder(stream, 0x0300);
            uint         val     = 0;

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(5));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(1));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(0xabcd));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(0x12345678));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(0));

            Assert.That(!d.Read32(ref val));

            Assert.That(d.Error, Is.Null);
        }
Esempio n. 5
0
        public void TestRead32()
        {
            byte[]      rawData = { 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xab, 0xcd, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x00, 0x00 };
            WireDecoder d       = new WireDecoder(rawData);
            int         val     = 0;

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(5));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(1));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(0xabcd));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(0x12345678));

            Assert.That(d.Read32(ref val));
            Assert.That(val, Is.EqualTo(0));

            Assert.That(!d.Read32(ref val));

            Assert.That(d.Error, Is.Null);
        }
Esempio n. 6
0
        public void StringValue2()
        {
            byte[] rawData = new byte[]
            {
                0x00, 0x05, (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o',
                0x00, 0x03, (byte)'b', (byte)'y', (byte)'e', 0x55,
            };
            MemoryStream stream = new MemoryStream(rawData);
            WireDecoder  d      = new WireDecoder(stream, 0x0200);
            var          val    = d.ReadValue(NtType.String);

            Assert.That(val.Type, Is.EqualTo(NtType.String));
            Assert.That(val.Val, Is.EqualTo(v_string.Val));

            var vFalse = Value.MakeString("bye");

            val = d.ReadValue(NtType.String);
            Assert.That(val.Type, Is.EqualTo(NtType.String));
            Assert.That(val.Val, Is.EqualTo(vFalse.Val));

            byte b = 0;

            Assert.That(d.Read8(ref b));
            Assert.That(b, Is.EqualTo(0x55));

            Assert.That(d.ReadValue(NtType.String), Is.Null);
            Assert.That(d.Error, Is.Null);
        }
Esempio n. 7
0
        public void WriteRpcResponse3()
        {
            uint id  = 1;
            uint uid = 1;

            byte[]      rpc = new byte[] { 0, 1, 2, 3, 4 };
            Message     msg = Message.RpcResponse(id, uid, rpc);
            WireEncoder enc = new WireEncoder(0x0300);

            msg.Write(enc);
            byte[]      buf = enc.Buffer;
            WireDecoder dec = new WireDecoder(new MemoryStream(buf), 0x0300);
            byte        u8  = 0;
            ushort      u16 = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)RpcResponse));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(id));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(uid));
            //Force Rpc as ExecuteRpc is Rpc
            Value val = dec.ReadValue(NtType.Rpc);

            Assert.That(val, Is.Not.Null);
            Assert.That(val.Type, Is.EqualTo(NtType.Rpc));
            Assert.That(val.GetRpc(), Is.EquivalentTo(rpc));
        }
Esempio n. 8
0
        public void WriteEntryUpdate2()
        {
            uint        id  = 1;
            uint        seq = 1;
            Value       val = Value.MakeDouble(5);
            Message     msg = Message.EntryUpdate(id, seq, val);
            WireEncoder enc = new WireEncoder(0x0200);

            msg.Write(enc);
            byte[]      buf = enc.Buffer;
            WireDecoder dec = new WireDecoder(new MemoryStream(buf), 0x0200);
            byte        u8  = 0;
            ushort      u16 = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)EntryUpdate));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(id));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(seq));
            //Forcing double, as rev 2 has a seperate function to grab
            val = dec.ReadValue(NtType.Double);
            Assert.That(val, Is.Not.Null);
            Assert.That(val.Type, Is.EqualTo(NtType.Double));
            Assert.That(val.GetDouble(), Is.EqualTo(5));
        }
Esempio n. 9
0
        public void RpcValue3()
        {
            byte[] rawData = new byte[]
            {
                0x05, (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o',
                0x03, (byte)'b', (byte)'y', (byte)'e', 0x55,
            };
            MemoryStream stream = new MemoryStream(rawData);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);
            var          val    = d.ReadValue(NtType.Rpc);

            Assert.That(val.Type, Is.EqualTo(NtType.Rpc));
            Assert.That(val.Val, Is.EqualTo(v_rpc.Val));

            var vFalse = Value.MakeRaw((byte)'b', (byte)'y', (byte)'e');

            val = d.ReadValue(NtType.Rpc);
            Assert.That(val.Type, Is.EqualTo(NtType.Rpc));
            Assert.That(val.Val, Is.EqualTo(vFalse.Val));

            byte b = 0;

            Assert.That(d.Read8(ref b));
            Assert.That(b, Is.EqualTo(0x55));

            Assert.That(d.ReadValue(NtType.Rpc), Is.Null);
            Assert.That(d.Error, Is.Null);
        }
Esempio n. 10
0
        public void WriteEntryUpdate3()
        {
            uint        id  = 1;
            uint        seq = 1;
            Value       val = Value.MakeDouble(5);
            Message     msg = Message.EntryUpdate(id, seq, val);
            WireEncoder enc = new WireEncoder(0x0300);

            msg.Write(enc);
            byte[]      buf  = enc.Buffer;
            WireDecoder dec  = new WireDecoder(new MemoryStream(buf), 0x0300);
            byte        u8   = 0;
            NtType      type = 0;
            ushort      u16  = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)EntryUpdate));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(id));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(seq));
            Assert.That(dec.ReadType(ref type), Is.True);
            Assert.That(type, Is.EqualTo(NtType.Double));
            val = dec.ReadValue(type);
            Assert.That(val, Is.Not.Null);
            Assert.That(val.Type, Is.EqualTo(NtType.Double));
            Assert.That(val.GetDouble(), Is.EqualTo(5));
        }
Esempio n. 11
0
        public void WriteEntryAssign2()
        {
            uint        id    = 1;
            uint        seq   = 1;
            EntryFlags  flags = EntryFlags.Persistent;
            string      name  = "Testing";
            Value       val   = Value.MakeDouble(5);
            Message     msg   = Message.EntryAssign(name, id, seq, val, flags);
            WireEncoder enc   = new WireEncoder(0x0200);

            msg.Write(enc);
            byte[]      buf  = enc.Buffer;
            WireDecoder dec  = new WireDecoder(new MemoryStream(buf), 0x0200);
            byte        u8   = 0;
            NtType      type = 0;
            string      str  = "";
            ushort      u16  = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)EntryAssign));
            Assert.That(dec.ReadString(ref str), Is.True);
            Assert.That(str, Is.EqualTo(name));
            Assert.That(dec.ReadType(ref type), Is.True);
            Assert.That(type, Is.EqualTo(NtType.Double));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(id));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(seq));
            val = dec.ReadValue(type);
            Assert.That(val, Is.Not.Null);
            Assert.That(val.Type, Is.EqualTo(NtType.Double));
            Assert.That(val.GetDouble(), Is.EqualTo(5));
        }
Esempio n. 12
0
        public void ReadStringArray3()
        {
            List <byte> b = new List <byte>()
            {
                0x02,
                0x05
            };

            b.AddRange(Encoding.UTF8.GetBytes("hello"));
            b.Add(0x07);
            b.AddRange(Encoding.UTF8.GetBytes("goodbye"));
            b.Add(0x55);
            MemoryStream stream = new MemoryStream(b.ToArray());
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            var val = d.ReadValue(NtType.StringArray);

            Assert.That(val.Type, Is.EqualTo(NtType.StringArray));
            Assert.That(val.Val, Is.EqualTo(v_stringArray.Val));

            byte by = 0;

            Assert.That(d.Read8(ref by));
            Assert.That(by, Is.EqualTo(0x55));

            Assert.That(d.ReadValue(NtType.StringArray), Is.Null);
            Assert.That(d.Error, Is.Null);
        }
Esempio n. 13
0
        public void ReadDouble()
        {
            byte[] rawData =
            {
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x41, 0x0c, 0x13, 0x80, 0x00, 0x00, 0x00, 0x00,
                0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
            };
            MemoryStream stream = new MemoryStream(rawData);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);
            double       val    = 0;

            Assert.That(d.ReadDouble(ref val));
            Assert.That(val, Is.EqualTo(0.0));

            Assert.That(d.ReadDouble(ref val));
            Assert.That(val, Is.EqualTo(2.3e5));

            Assert.That(d.ReadDouble(ref val));
            Assert.That(val, Is.EqualTo(double.PositiveInfinity));

            Assert.That(d.ReadDouble(ref val));
            Assert.That(val, Is.EqualTo(2.2250738585072014e-308));

            Assert.That(d.ReadDouble(ref val));
            Assert.That(val, Is.EqualTo(double.MaxValue));

            Assert.That(!d.ReadDouble(ref val));

            Assert.That(d.Error, Is.Null);
        }
Esempio n. 14
0
        public void ReadType()
        {
            byte[]       rawData = { 0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x20 };
            MemoryStream stream  = new MemoryStream(rawData);
            WireDecoder  d       = new WireDecoder(stream, 0x0300);
            NtType       val     = 0;

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.Boolean));

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.Double));

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.String));

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.Raw));

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.BooleanArray));

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.DoubleArray));

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.StringArray));

            Assert.That(d.ReadType(ref val));
            Assert.That(val, Is.EqualTo(NtType.Rpc));

            Assert.That(!d.ReadType(ref val));

            Assert.That(d.Error, Is.Null);
        }
Esempio n. 15
0
        public void ReadRawError3()
        {
            MemoryStream stream = new MemoryStream(new byte[] { 0x05 });
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            byte[] str = null;
            Assert.That(d.ReadRaw(ref str), Is.False);
        }
Esempio n. 16
0
        public void ReadStringError3()
        {
            MemoryStream stream = new MemoryStream(new byte[] { 0x05 });
            WireDecoder  d      = new WireDecoder(stream, 0x0300);
            string       str    = "";

            Assert.That(d.ReadString(ref str), Is.False);
        }
Esempio n. 17
0
        public void SetProtoRev()
        {
            MemoryStream stream = new MemoryStream(new byte[0]);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            d.ProtoRev = 0x0200;
            Assert.That(d.ProtoRev, Is.EqualTo(0x0200));
        }
Esempio n. 18
0
        public void ReadValueError3()
        {
            MemoryStream stream = new MemoryStream(new byte[0]);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            Assert.That(d.ReadValue(NtType.Unassigned), Is.Null);
            Assert.That(d.Error, Is.Not.Null);
        }
Esempio n. 19
0
        public void Construct()
        {
            MemoryStream stream = new MemoryStream(new byte[0]);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            Assert.That(d.Error, Is.Null);
            Assert.That(d.ProtoRev, Is.EqualTo(0x0300));
        }
Esempio n. 20
0
        public void TestReadTypeError()
        {
            byte[]      rawData = { 0x30 };
            WireDecoder d       = new WireDecoder(rawData);
            NtType      val     = 0;

            Assert.That(!d.ReadType(ref val));

            Assert.That(d.Error, Is.Not.Null);
        }
Esempio n. 21
0
        public void HasMoreBytesFailure()
        {
            int numBytes = 13;

            byte[] data = new byte[numBytes - 1];

            MemoryStream stream = new MemoryStream(data);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            Assert.That(d.HasMoreBytes(numBytes), Is.False);
        }
Esempio n. 22
0
        public void HasMoreBytesSuccess()
        {
            int numBytes = 13;

            byte[] data = new byte[numBytes];

            MemoryStream stream = new MemoryStream(data);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            Assert.That(d.HasMoreBytes(numBytes), Is.True);
        }
Esempio n. 23
0
        public void ReadTypeError()
        {
            byte[]       rawData = { 0x30 };
            MemoryStream stream  = new MemoryStream(rawData);
            WireDecoder  d       = new WireDecoder(stream, 0x0200);
            NtType       val     = 0;

            Assert.That(!d.ReadType(ref val));

            Assert.That(d.Error, Is.Not.Null);
        }
Esempio n. 24
0
        public void WriteClientHelloDone3()
        {
            Message     msg = Message.ClientHelloDone();
            WireEncoder enc = new WireEncoder(0x0300);

            msg.Write(enc);
            byte[]      buf = enc.Buffer;
            WireDecoder dec = new WireDecoder(new MemoryStream(buf), 0x0300);
            byte        u8  = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)ClientHelloDone));
        }
Esempio n. 25
0
        public void ReadStringArrayError3()
        {
            byte[] b =
            {
                0x02,
            };
            MemoryStream stream = new MemoryStream(b);
            WireDecoder  d      = new WireDecoder(stream, 0x0300);

            var val = d.ReadValue(NtType.StringArray);

            Assert.That(val, Is.Null);
        }
Esempio n. 26
0
        public void WriteClearEntries3()
        {
            Message     msg = Message.ClearEntries();
            WireEncoder enc = new WireEncoder(0x0300);

            msg.Write(enc);
            byte[]      buf = enc.Buffer;
            WireDecoder dec = new WireDecoder(new MemoryStream(buf), 0x0300);
            byte        u8  = 0;
            uint        u32 = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)ClearEntries));
            Assert.That(dec.Read32(ref u32), Is.True);
            Assert.That(u32, Is.EqualTo(0xD06CB27Au));
        }
Esempio n. 27
0
        public void WriteProtUnsup2()
        {
            Message     msg = Message.ProtoUnsup();
            WireEncoder enc = new WireEncoder(0x0200);

            msg.Write(enc);
            byte[]      buf = enc.Buffer;
            WireDecoder dec = new WireDecoder(new MemoryStream(buf), 0x0200);
            byte        u8  = 0;
            ushort      u16 = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)ProtoUnsup));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo((ushort)0x0200));
        }
Esempio n. 28
0
        /// <summary>
        /// Unpack a list of values
        /// </summary>
        /// <param name="packed">The packed data</param>
        /// <param name="types">The types the packed data should be</param>
        /// <returns>A list of the unpacked values</returns>
        public static List <Value> UnpackRpcValues(byte[] packed, params NtType[] types)
        {
            MemoryStream iStream = new MemoryStream(packed);
            WireDecoder  dec     = new WireDecoder(iStream, 0x0300);
            List <Value> vec     = new List <Value>();

            foreach (var ntType in types)
            {
                var item = dec.ReadValue(ntType);
                if (item == null)
                {
                    return(new List <Value>());
                }
                vec.Add(item);
            }
            return(vec);
        }
Esempio n. 29
0
        public void WriteEntryDelete3()
        {
            uint        id  = 1;
            Message     msg = Message.EntryDelete(id);
            WireEncoder enc = new WireEncoder(0x0300);

            msg.Write(enc);
            byte[]      buf = enc.Buffer;
            WireDecoder dec = new WireDecoder(new MemoryStream(buf), 0x0300);
            byte        u8  = 0;
            ushort      u16 = 0;

            Assert.That(dec.Read8(ref u8), Is.True);
            Assert.That(u8, Is.EqualTo((byte)EntryDelete));
            Assert.That(dec.Read16(ref u16), Is.True);
            Assert.That(u16, Is.EqualTo(id));
        }
Esempio n. 30
0
        /// <summary>
        /// Unpack a list of values
        /// </summary>
        /// <param name="packed">The packed data</param>
        /// <param name="types">The types the packed data should be</param>
        /// <returns>A list of the unpacked values</returns>
        public static List <Value> UnpackRpcValues(IList <byte> packed, IList <NtType> types)
        {
            ListStream   iStream = new ListStream(packed);
            WireDecoder  dec     = new WireDecoder(iStream, 0x0300);
            List <Value> vec     = new List <Value>();

            foreach (var ntType in types)
            {
                var item = dec.ReadValue(ntType);
                if (item == null)
                {
                    return(new List <Value>());
                }
                vec.Add(item);
            }
            return(vec);
        }