예제 #1
0
        internal HttpResponseHeader(DataReader reader, IEnumerable <KeyDataPair <string> > headers, int responseCode, string message, HttpVersion version)
        {
            _reader      = reader;
            Headers      = new List <KeyDataPair <string> >(headers);
            ResponseCode = responseCode;
            Message      = message;
            Version      = version;

            if (ResponseCode != 304)
            {
                ContentLength   = HttpParser.GetContentLength(Headers);
                ChunkedEncoding = HttpParser.IsChunkedEncoding(Headers);
                HasBody         = true;
            }

            // Always trust a content-length if it exists
            if (Headers.Count(p => p.Name.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)) == 0)
            {
                // Otherwise if version unknown, 1.0 or connection will close set then indicate we will read to the end
                if (Version.IsVersionUnknown || Version.IsVersion10 || (Headers.Count(p => p.Name.Equals("Connection", StringComparison.OrdinalIgnoreCase) && p.Value.Equals("close", StringComparison.OrdinalIgnoreCase)) > 0))
                {
                    ReadToEnd = true;
                }
            }
        }
예제 #2
0
        internal HttpRequestHeader(DataReader reader, IEnumerable <HttpHeader> headers, string method, string path, HttpVersion version)
        {
            _reader = reader;
            Headers = new List <HttpHeader>(headers);
            Method  = method;
            Path    = path;
            Version = version;

            // These methods can't have a content length
            if (IsGet || IsHead)
            {
                ContentLength = 0;
            }
            else
            {
                ContentLength = HttpParser.GetContentLength(Headers);
            }
        }