Merge from fonosfera

This commit is contained in:
Steven Barth 2009-07-24 18:23:59 +00:00
parent 4d75b51157
commit 43aca0def5

View file

@ -171,8 +171,10 @@ function request_to_file(uri, target, options, cbs)
cbs = cbs or {} cbs = cbs or {}
options.headers = options.headers or {} options.headers = options.headers or {}
local hdr = options.headers local hdr = options.headers
local file, code, msg
local file, code, msg = prepare_fd(target) if target then
file, code, msg = prepare_fd(target)
if not file then if not file then
return file, code, msg return file, code, msg
end end
@ -183,33 +185,48 @@ function request_to_file(uri, target, options, cbs)
if off > 0 then if off > 0 then
hdr.Range = hdr.Range or ("bytes=" .. off .. "-") hdr.Range = hdr.Range or ("bytes=" .. off .. "-")
end end
end
local code, resp, buffer, sock = httpc.request_raw(uri, options) local code, resp, buffer, sock = httpc.request_raw(uri, options)
if not code then if not code then
-- No success -- No success
if file then
file:close() file:close()
end
return code, resp, buffer return code, resp, buffer
elseif hdr.Range and code ~= 206 then elseif hdr.Range and code ~= 206 then
-- We wanted a part but we got the while file -- We wanted a part but we got the while file
sock:close() sock:close()
if file then
file:close() file:close()
end
return nil, -4, code, resp return nil, -4, code, resp
elseif not hdr.Range and code ~= 200 then elseif not hdr.Range and code ~= 200 then
-- We encountered an error -- We encountered an error
sock:close() sock:close()
if file then
file:close() file:close()
end
return nil, -4, code, resp return nil, -4, code, resp
end end
if cbs.on_header then if cbs.on_header then
local stat = {cbs.on_header(file, code, resp)} local stat = {cbs.on_header(file, code, resp)}
if stat[1] == false then if stat[1] == false then
if file then
file:close() file:close()
end
sock:close() sock:close()
return unpack(stat) return unpack(stat)
elseif stat[2] then
file = file and stat[2]
end end
end end
if not file then
return nil, -5, "no target given"
end
local chunked = resp.headers["Transfer-Encoding"] == "chunked" local chunked = resp.headers["Transfer-Encoding"] == "chunked"
local stat local stat