示例#1
0
 public void http_stream_disposing()
 {
     var under = Substitute.For<Stream>();
     var subject = new HttpResponseStream(under, 0);
     subject.Dispose();
     under.Received().Close();
 }
        public void a_zero_length_uncompressed_stream_should_result_in_an_empty_string()
        {
            var src = new MemoryStream();
            var subject = new HttpResponseStream(src, 0);

            var result = subject.ReadStringToLength();

            Assert.That(result, Is.EqualTo(""));
        }
示例#3
0
        /// <summary>
        /// Reads synchronously until headers are complete, then 
        /// provides the remaining data in a stream
        /// </summary>
        public HttpResponse(Stream rawResponse, TimeSpan timeout)
        {
            _rawResponse = rawResponse;
            Headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
            ReadStatusLine(NextLine(_rawResponse));

            foreach (var headerLine in NonBlankLines(_rawResponse)) AddHeader(headerLine);
            HeadersComplete = true;

            _rawResponse.ReadByte(); // eat one spare byte
            if (_rawResponse is SocketStream) ((SocketStream)_rawResponse).ResetCounts();

            RawBodyStream = _rawResponse;

            // I am scared of this code:
            var buffered = new PushbackInputStream(_rawResponse);
            var dechunked = IsChunked() ? (Stream)new HttpChunkedStreamWrapper(buffered, timeout) : buffered;
            var decompressed = RestOfStreamDecompressed(dechunked);

            BodyReader = new HttpResponseStream(decompressed, ReportedBodyLength()) {Timeout = timeout};
        }