Example #1
0
        private static void SetResponseHeaders(ResponseMessage responseMessage, IResponse response)
        {
            // Force setting the Date header (#577)
            AppendResponseHeader(
                response,
                HttpKnownHeaderNames.Date,
                new[]
            {
                DateTime.UtcNow.ToString(CultureInfo.InvariantCulture.DateTimeFormat.RFC1123Pattern, CultureInfo.InvariantCulture)
            });

            // Set other headers
            foreach (var item in responseMessage.Headers)
            {
                var headerName = item.Key;
                var value      = item.Value;
                if (ResponseHeadersToFix.ContainsKey(headerName))
                {
                    ResponseHeadersToFix[headerName]?.Invoke(response, value);
                }
                else
                {
                    // Check if this response header can be added (#148 and #227)
                    if (!HttpKnownHeaderNames.IsRestrictedResponseHeader(headerName))
                    {
                        AppendResponseHeader(response, headerName, value.ToArray());
                    }
                }
            }
        }
Example #2
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);
            }
        }
Example #4
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);
        }
        private void SetResponseHeaders(ResponseMessage responseMessage, IResponse response)
        {
            // Set headers
            foreach (var pair in responseMessage.Headers)
            {
                if (ResponseHeadersToFix.ContainsKey(pair.Key))
                {
                    ResponseHeadersToFix[pair.Key]?.Invoke(response, pair.Value);
                }
                else
                {
                    // Check if this response header can be added (#148 and #227)
                    if (!HttpKnownHeaderNames.IsRestrictedResponseHeader(pair.Key))
                    {
#if !USE_ASPNETCORE
                        response.Headers.AppendValues(pair.Key, pair.Value.ToArray());
#else
                        response.Headers.Append(pair.Key, pair.Value.ToArray());
#endif
                    }
                }
            }
        }
        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);
            }
        }