static struct errno_http hterrs[] = {
{ 0, "200", "" },
+ { 206, "206", "" },
{ EINVAL, "400", "InvalidArgument" },
{ EACCES, "403", "AccessDenied" },
{ EPERM, "403", "AccessDenied" },
void dump_errno(struct req_state *s, int err, struct rgw_err *rgwerr)
{
+ int orig_err = err;
const char *err_str;
const char *code = (rgwerr ? rgwerr->code : NULL);
}
dump_status(s, err_str);
- if (err) {
+ if (orig_err < 0) {
s->err_exist = true;
s->err.code = code;
s->err.message = (rgwerr ? rgwerr->message : NULL);
end_header(s);
}
+void dump_range(struct req_state *s, off_t ofs, off_t end)
+{
+ CGI_PRINTF(s->fcgx->out,"Accept-Ranges: bytes\n", "");
+ CGI_PRINTF(s->fcgx->out,"Content-Range: bytes %d-%d/%d\n", (int)ofs, (int)end, (int)end + 1);
+}
+
int RGWGetObj_REST::get_params()
{
range_str = FCGX_GetParam("HTTP_RANGE", s->fcgx->envp);
goto send_data;
if (get_data && !ret) {
+ if (range_str)
+ dump_range(s, ofs, end);
dump_content_length(s, total_len);
}
if (!ret) {
}
}
}
+
+
+ if (range_str && !ret)
+ ret = 206; /* partial content */
+
dump_errno(s, ret, &err);
end_header(s, content_type);