예제 #1
0
        /// <summary>
        /// Initializes a new instance of the AgentHelloFrame. The agent sends a HELLO frame
        /// during the initial handshake with HAProxy.
        /// </summary>
        /// <param name="supportedSpopVersion">The SPOP version that the agent supports</param>
        /// <param name="maxFrameSize">The max size of a frame supported</param>
        public AgentHelloFrame(string supportedSpopVersion, uint maxFrameSize, string[] capabilities) : base(FrameType.AgentHello)
        {
            this.Metadata.Flags.Fin   = true;
            this.Metadata.Flags.Abort = false;
            this.Metadata.StreamId    = VariableInt.EncodeVariableInt(0);
            this.Metadata.FrameId     = VariableInt.EncodeVariableInt(0);

            var payload = new KeyValueListPayload();

            payload.KeyValueItems.Add("version", new TypedData(DataType.String, supportedSpopVersion));
            payload.KeyValueItems.Add("max-frame-size", new TypedData(DataType.Uint32, maxFrameSize));
            payload.KeyValueItems.Add("capabilities", new TypedData(DataType.String, string.Join(",", capabilities)));
            this.Payload = payload;
        }
예제 #2
0
        /// <summary>
        /// Initializes a new instance of the AgentDisconnectFrame class. The agent sends
        /// a Disconnect frame when it wants to stop communicating with HAProxy.
        /// </summary>
        /// <param name="status">The status when disconnecting</param>
        /// <param name="message">The message to include when disconnecting</param>
        public AgentDisconnectFrame(Status status, string message) : base(FrameType.AgentDisconnect)
        {
            this.Metadata.Flags.Fin   = true;
            this.Metadata.Flags.Abort = false;
            this.Metadata.StreamId    = VariableInt.EncodeVariableInt(0);
            this.Metadata.FrameId     = VariableInt.EncodeVariableInt(0);

            var payload = new KeyValueListPayload();

            payload.KeyValueItems.Add("status-code", new TypedData(DataType.Uint32, (uint)status));
            payload.KeyValueItems.Add("message", new TypedData(DataType.String, message));
            this.Payload = payload;
            this.Status  = status;
        }
예제 #3
0
        public void Parse_WhenBufferContainsStringValue_AddsValueToKeyValueItems()
        {
            // arrange
            var kvListPayload = new KeyValueListPayload();
            int offset        = 0;

            var ba = new BitArray(
                new bool[] {
                false, true, false, false, true, false, false, false,  // 01001000
                true, true, false, false, true, true, true, false,     // 11001110
                true, false, true, false, true, true, true, false,     // 10101110
                false, false, false, false, true, true, true, false,   // 00001110
                false, false, false, false, true, true, true, false,   // 00001110
                true, true, true, true, false, true, true, false,      // 11110110
                false, true, false, false, true, true, true, false,    // 01001110
                false, false, true, false, true, true, true, false,    // 00101110
                true, false, true, false, false, true, true, false,    // 10100110
                false, false, true, false, false, true, true, false,   // 00100110
                true, false, true, true, false, true, false, false,    // 10110100
                false, true, true, false, true, true, true, false,     // 01101110
                true, false, true, false, false, true, true, false,    // 10100110
                false, true, false, false, true, true, true, false,    // 01001110
                true, true, false, false, true, true, true, false,     // 11001110
                true, false, false, true, false, true, true, false,    // 10010110
                true, true, true, true, false, true, true, false,      // 11110110
                false, true, true, true, false, true, true, false,     // 01110110
                true, true, false, false, true, true, true, false,     // 11001110
                false, false, false, true, false, false, false, false, // 00010000
                true, true, false, false, false, false, false, false,  // 11000000
                false, true, false, false, true, true, false, false,   // 01001100
                false, true, true, true, false, true, false, false,    // 01110100
                false, false, false, false, true, true, false, false   // 00001100
            });

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

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

            // assert
            Assert.IsTrue(kvListPayload.KeyValueItems.ContainsKey("supported-versions"));
            Assert.AreEqual("2.0", kvListPayload.KeyValueItems["supported-versions"].Value);
        }
예제 #4
0
        public void Bytes_WhenContainsStringValue_ReturnsExpectedResult()
        {
            // arrange
            var kvListPayload = new KeyValueListPayload();

            kvListPayload.KeyValueItems.Add("supported-versions", new TypedData(DataType.String, "2.0"));

            var ba = new BitArray(
                new bool[] {
                false, true, false, false, true, false, false, false,  // 01001000
                true, true, false, false, true, true, true, false,     // 11001110
                true, false, true, false, true, true, true, false,     // 10101110
                false, false, false, false, true, true, true, false,   // 00001110
                false, false, false, false, true, true, true, false,   // 00001110
                true, true, true, true, false, true, true, false,      // 11110110
                false, true, false, false, true, true, true, false,    // 01001110
                false, false, true, false, true, true, true, false,    // 00101110
                true, false, true, false, false, true, true, false,    // 10100110
                false, false, true, false, false, true, true, false,   // 00100110
                true, false, true, true, false, true, false, false,    // 10110100
                false, true, true, false, true, true, true, false,     // 01101110
                true, false, true, false, false, true, true, false,    // 10100110
                false, true, false, false, true, true, true, false,    // 01001110
                true, true, false, false, true, true, true, false,     // 11001110
                true, false, false, true, false, true, true, false,    // 10010110
                true, true, true, true, false, true, true, false,      // 11110110
                false, true, true, true, false, true, true, false,     // 01110110
                true, true, false, false, true, true, true, false,     // 11001110
                false, false, false, true, false, false, false, false, // 00010000
                true, true, false, false, false, false, false, false,  // 11000000
                false, true, false, false, true, true, false, false,   // 01001100
                false, true, true, true, false, true, false, false,    // 01110100
                false, false, false, false, true, true, false, false   // 00001100
            });

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

            // assert
            Assert.AreEqual(
                HelperMethods.ToBitString(expected),
                HelperMethods.ToBitString(kvListPayload.Bytes));
        }