diff options
author | Eric Wong <e@80x24.org> | 2016-11-08 23:21:40 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-11-08 23:23:35 +0000 |
commit | 08cea89483e90c79daa2c8efe70da6bdeba71147 (patch) | |
tree | d9c400ca1291d5a2827f42abb9bb9e1e8aeffce2 | |
parent | e281b22cb2aef85b717dfe43da904a0bb4098956 (diff) | |
download | yahns-08cea89483e90c79daa2c8efe70da6bdeba71147.tar.gz |
This means we need to check Content-Length and use it properly (unless Content-Range is set).
-rw-r--r-- | lib/yahns/http_response.rb | 9 | ||||
-rw-r--r-- | lib/yahns/stream_file.rb | 4 |
2 files changed, 8 insertions, 5 deletions
diff --git a/lib/yahns/http_response.rb b/lib/yahns/http_response.rb index 32d1a45..ca28bbf 100644 --- a/lib/yahns/http_response.rb +++ b/lib/yahns/http_response.rb @@ -60,7 +60,7 @@ module Yahns::HttpResponse # :nodoc: end def response_header_blocked(header, body, alive, offset, count) - if body.respond_to?(:to_path) + if body.respond_to?(:to_path) && count alive = Yahns::StreamFile.new(body, alive, offset, count) body = nil end @@ -152,7 +152,8 @@ module Yahns::HttpResponse # :nodoc: alive = false if value =~ /\bclose\b/i when %r{\AContent-Length\z}i term = true - flags |= MSG_MORE if value.to_i > 0 && !hdr_only + clen = value.to_i + flags |= MSG_MORE if clen > 0 && !hdr_only kv_str(buf, key, value) when %r{\ATransfer-Encoding\z}i term = true if value =~ /\bchunked\b/i @@ -163,6 +164,8 @@ module Yahns::HttpResponse # :nodoc: kv_str(buf, key, value) end end + count ||= clen + if !term && chunk_ok term = true body = Yahns::ChunkBody.new(body, opt) @@ -194,7 +197,7 @@ module Yahns::HttpResponse # :nodoc: return response_hijacked(hijack) if hijack return http_response_done(alive) if hdr_only - if body.respond_to?(:to_path) + if body.respond_to?(:to_path) && count @state = body = Yahns::StreamFile.new(body, alive, offset, count) return step_write end diff --git a/lib/yahns/stream_file.rb b/lib/yahns/stream_file.rb index fdba5bf..6cce7a0 100644 --- a/lib/yahns/stream_file.rb +++ b/lib/yahns/stream_file.rb @@ -27,8 +27,8 @@ class Yahns::StreamFile # :nodoc: retry end end - @sf_offset = offset - @sf_count = count || @tmpio.size + @sf_offset = offset || 0 + @sf_count = count @wbuf_persist = persist # whether or not we keep the connection alive @body = body end |