Ejemplo n.º 1
0
        private static void ValidateHeaders(AsciiString[] pseudoHeaders, params AsciiString[] otherHeaders)
        {
            // We are only validating values... so start at 1 and go until end.
            for (int i = 1; i < pseudoHeaders.Length; i += 2)
            {
                // pseudoHeaders names are only set internally so they are assumed to be valid.
                if (pseudoHeaders[i] is null)
                {
                    ThrowHelper.ThrowArgumentException_PseudoHeadersValueIsNull(i);
                }
            }

            var seenNonPseudoHeader = false;
            var otherHeadersEnd     = otherHeaders.Length - 1;

            for (int i = 0; i < otherHeadersEnd; i += 2)
            {
                AsciiString name = otherHeaders[i];

                DefaultHttp2Headers.Http2NameValidator.Instance.ValidateName(name);
                if (!seenNonPseudoHeader && !name.IsEmpty && name.ByteAt(0) != PseudoHeaderToken)
                {
                    seenNonPseudoHeader = true;
                }
                else if (seenNonPseudoHeader && !name.IsEmpty && name.ByteAt(0) == PseudoHeaderToken)
                {
                    ThrowHelper.ThrowArgumentException_OtherHeadersNameIsPseudoHeader(i);
                }
                var idx = i + 1;
                if (otherHeaders[idx] is null)
                {
                    ThrowHelper.ThrowArgumentException_OtherHeadersValueIsNull(idx);
                }
            }
        }
Ejemplo n.º 2
0
        public void SubSequence()
        {
            char[]      initChars = { 't', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', 's', 't' };
            byte[]      init      = initChars.Select(c => (byte)c).ToArray();
            var         ascii     = new AsciiString(init);
            const int   Start     = 2;
            int         end       = init.Length;
            AsciiString sub1      = ascii.SubSequence(Start, end, false);
            AsciiString sub2      = ascii.SubSequence(Start, end, true);

            Assert.Equal(sub1.GetHashCode(), sub2.GetHashCode());
            Assert.Equal(sub1, sub2);
            for (int i = Start; i < end; ++i)
            {
                Assert.Equal(init[i], sub1.ByteAt(i - Start));
            }
        }