def serving(env)
size = F.size?(@path) || Utils.bytesize(F.read(@path))
response = [
200,
{
"Last-Modified" => F.mtime(@path).httpdate,
"Content-Type" => Mime.mime_type(F.extname(@path), 'text/plain')
},
self
]
response[1].merge! 'Cache-Control' => @cache_control if @cache_control
ranges = Rack::Utils.byte_ranges(env, size)
if ranges.nil? || ranges.length > 1
response[0] = 200
@range = 0..size-1
elsif ranges.empty?
response = fail(416, "Byte range unsatisfiable")
response[1]["Content-Range"] = "bytes */#{size}"
return response
else
@range = ranges[0]
response[0] = 206
response[1]["Content-Range"] = "bytes #{@range.begin}-#{@range.end}/#{size}"
size = @range.end - @range.begin + 1
end
response[1]["Content-Length"] = size.to_s
response
end