示例#1
0
        public void TryGetHeaderName_UnknownStrings_NotFound(string shouldNotBeFound)
        {
            char[] key = shouldNotBeFound.ToCharArray();
            string name;

            Assert.False(HttpKnownHeaderNames.TryGetHeaderName(key, 0, key.Length, out name));
            Assert.Null(name);
        }
        public unsafe void TryGetHeaderName_IntPtrBuffer_UnknownStrings_NotFound(string shouldNotBeFound)
        {
            byte[] buffer = shouldNotBeFound.Select(c => checked ((byte)c)).ToArray();

            fixed(byte *pBuffer = buffer)
            {
                string name;

                Assert.False(HttpKnownHeaderNames.TryGetHeaderName(new IntPtr(pBuffer), buffer.Length, out name));
                Assert.Null(name);
            }
        }
示例#3
0
        public void TryGetHeaderName_AllHttpKnownHeaderNamesPublicStringConstants_Found(string constant)
        {
            char[] key = constant.ToCharArray();

            string name1;

            Assert.True(HttpKnownHeaderNames.TryGetHeaderName(key, 0, key.Length, out name1));
            Assert.NotNull(name1);
            Assert.Equal(constant, name1);

            string name2;

            Assert.True(HttpKnownHeaderNames.TryGetHeaderName(key, 0, key.Length, out name2));
            Assert.NotNull(name2);
            Assert.Equal(constant, name2);

            Assert.Same(name1, name2);
        }
        /// <summary>
        /// Reads a header line.
        /// Empty header lines are skipped, as are malformed header lines that are missing a colon character.
        /// </summary>
        /// <returns>true if the next header was read successfully, or false if all characters have been read.</returns>
        public bool ReadHeader(out string name, out string value)
        {
            int startIndex;
            int length;

            while (ReadLine(out startIndex, out length))
            {
                // Skip empty lines.
                if (length == 0)
                {
                    continue;
                }

                int colonIndex = Array.IndexOf(_buffer, ':', startIndex, length);

                // Skip malformed header lines that are missing the colon character.
                if (colonIndex == -1)
                {
                    continue;
                }

                int nameLength = colonIndex - startIndex;

                // If it's a known header name, use the known name instead of allocating a new string.
                if (!HttpKnownHeaderNames.TryGetHeaderName(_buffer, startIndex, nameLength, out name))
                {
                    name = new string(_buffer, startIndex, nameLength);
                }

                // Normalize header value by trimming white space.
                int valueStartIndex = colonIndex + 1;
                int valueLength     = startIndex + length - colonIndex - 1;
                CharArrayHelpers.Trim(_buffer, ref valueStartIndex, ref valueLength);

                value = GetHeaderValue(name, _buffer, valueStartIndex, valueLength);

                return(true);
            }

            name  = null;
            value = null;
            return(false);
        }
        public unsafe void TryGetHeaderName_IntPtrBuffer_AllHttpKnownHeaderNamesPublicStringConstants_Found(string constant)
        {
            byte[] buffer = constant.Select(c => checked ((byte)c)).ToArray();

            fixed(byte *pBuffer = buffer)
            {
                Assert.True(pBuffer != null);

                string name1;

                Assert.True(HttpKnownHeaderNames.TryGetHeaderName(new IntPtr(pBuffer), buffer.Length, out name1));
                Assert.NotNull(name1);
                Assert.Equal(constant, name1);

                string name2;

                Assert.True(HttpKnownHeaderNames.TryGetHeaderName(new IntPtr(pBuffer), buffer.Length, out name2));
                Assert.NotNull(name2);
                Assert.Equal(constant, name2);

                Assert.Same(name1, name2);
            }
        }