Exemplo n.º 1
0
        internal override void Parse(byte[] buffer, ref int offset)
        {
            while (offset < buffer.Length)
            {
                VariableInt messageNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray());
                offset += messageNameLength.Length;

                string messageName = Encoding.ASCII.GetString(buffer, offset, (int)messageNameLength.Value);
                offset += messageName.Length;

                byte numberOfArgs = buffer.Skip(offset).Take(1).First();
                offset++;

                var message = new SpoeMessage(messageName);

                for (byte i = 0; i < numberOfArgs; i++)
                {
                    VariableInt keyNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray());
                    offset += keyNameLength.Length;

                    string keyname = Encoding.ASCII.GetString(buffer, offset, (int)keyNameLength.Value);
                    offset += keyname.Length;

                    TypedData data = TypedDataParser.ParseNext(buffer, ref offset);
                    message.Args.Add(keyname, data);
                }

                this.Messages.Add(message);
            }
        }
Exemplo n.º 2
0
        public void Parse_WhenBufferContainsMessage_AddsMessageToList()
        {
            // arrange
            var messagesPayload = new ListOfMessagesPayload();
            int offset          = 0;
            var ba = new BitArray(
                new bool[] {
                true, true, true, true, false, false, false, false,    // 11110000
                true, true, false, false, false, true, true, false,    // 11000110
                false, false, false, true, false, true, true, false,   // 00010110
                true, false, true, false, false, true, true, false,    // 10100110
                true, true, false, false, false, true, true, false,    // 11000110
                true, true, false, true, false, true, true, false,     // 11010110
                true, false, true, true, false, true, false, false,    // 10110100
                true, true, false, false, false, true, true, false,    // 11000110
                false, false, true, true, false, true, true, false,    // 00110110
                true, false, false, true, false, true, true, false,    // 10010110
                true, false, true, false, false, true, true, false,    // 10100110
                false, true, true, true, false, true, true, false,     // 01110110
                false, false, true, false, true, true, true, false,    // 00101110
                true, false, true, true, false, true, false, false,    // 10110100
                true, false, false, true, false, true, true, false,    // 10010110
                false, false, false, false, true, true, true, false,   // 00001110
                true, false, false, false, false, false, false, false, // 10000000
                false, true, false, false, false, false, false, false, // 01000000
                true, false, false, true, false, true, true, false,    // 10010110
                false, false, false, false, true, true, true, false,   // 00001110
                false, true, true, false, false, false, false, false,  // 01100000
                false, false, false, false, false, false, true, true,  // 00000011
                false, false, false, true, false, true, false, true,   // 00010101
                false, true, false, false, true, true, false, false,   // 01001100
                true, false, false, false, false, false, false, false  // 10000000
            });

            byte[] buffer = new byte[25];
            ba.CopyTo(buffer, 0);

            // act
            messagesPayload.Parse(buffer, ref offset);

            // assert
            SpoeMessage spoeMessage = messagesPayload.Messages.FirstOrDefault();

            Assert.AreEqual("check-client-ip", spoeMessage.Name);
            Assert.AreEqual(1, spoeMessage.Args.Count);
            Assert.AreEqual("ip", spoeMessage.Args.First().Key);
            Assert.AreEqual("192.168.50.1", spoeMessage.Args.First().Value.Value);
        }
Exemplo n.º 3
0
        public void Bytes_WhenContainsMessages_ReturnsExpectedResult()
        {
            // arrange
            var messagesPayload = new ListOfMessagesPayload();
            var message         = new SpoeMessage("check-client-ip");

            message.Args.Add("ip", new TypedData(DataType.Ipv4, "192.168.50.1"));
            messagesPayload.Messages.Add(message);

            var ba = new BitArray(
                new bool[] {
                true, true, true, true, false, false, false, false,    // 11110000
                true, true, false, false, false, true, true, false,    // 11000110
                false, false, false, true, false, true, true, false,   // 00010110
                true, false, true, false, false, true, true, false,    // 10100110
                true, true, false, false, false, true, true, false,    // 11000110
                true, true, false, true, false, true, true, false,     // 11010110
                true, false, true, true, false, true, false, false,    // 10110100
                true, true, false, false, false, true, true, false,    // 11000110
                false, false, true, true, false, true, true, false,    // 00110110
                true, false, false, true, false, true, true, false,    // 10010110
                true, false, true, false, false, true, true, false,    // 10100110
                false, true, true, true, false, true, true, false,     // 01110110
                false, false, true, false, true, true, true, false,    // 00101110
                true, false, true, true, false, true, false, false,    // 10110100
                true, false, false, true, false, true, true, false,    // 10010110
                false, false, false, false, true, true, true, false,   // 00001110
                true, false, false, false, false, false, false, false, // 10000000
                false, true, false, false, false, false, false, false, // 01000000
                true, false, false, true, false, true, true, false,    // 10010110
                false, false, false, false, true, true, true, false,   // 00001110
                false, true, true, false, false, false, false, false,  // 01100000
                false, false, false, false, false, false, true, true,  // 00000011
                false, false, false, true, false, true, false, true,   // 00010101
                false, true, false, false, true, true, false, false,   // 01001100
                true, false, false, false, false, false, false, false  // 10000000
            });

            byte[] expected = new byte[25];
            ba.CopyTo(expected, 0);

            // assert
            Assert.AreEqual(
                HelperMethods.ToBitString(expected),
                HelperMethods.ToBitString(messagesPayload.Bytes));
        }
 public void Setup()
 {
     this.message = new SpoeMessage("test");
 }