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; } } }
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); } }