Project

General

Profile

Feature #301 » support_more_headers.patch

Wido den Hollander, 07/23/2010 07:06 AM

View differences:

src/rgw/rgw_access.h
map<string, bufferlist> *attrs,
const time_t *mod_ptr,
const time_t *unmod_ptr,
time_t *lastmod,
const char *if_match,
const char *if_nomatch,
size_t *total_size,
src/rgw/rgw_fs.cc
void *handle;
off_t ofs = 0, end = -1;
size_t total_len;
time_t lastmod;
map<string, bufferlist> attrset;
ret = prepare_get_obj(src_bucket, src_obj, 0, &end, &attrset, mod_ptr, unmod_ptr,
ret = prepare_get_obj(src_bucket, src_obj, 0, &end, &attrset, mod_ptr, unmod_ptr, &lastmod,
if_match, if_nomatch, &total_len, &handle, err);
if (ret < 0)
return ret;
......
map<string, bufferlist> *attrs,
const time_t *mod_ptr,
const time_t *unmod_ptr,
time_t *lastmod,
const char *if_match,
const char *if_nomatch,
size_t *total_size,
src/rgw/rgw_fs.h
map<std::string, bufferlist> *attrs,
const time_t *mod_ptr,
const time_t *unmod_ptr,
time_t *lastmod,
const char *if_match,
const char *if_nomatch,
size_t *size,
src/rgw/rgw_op.cc
init_common();
ret = rgwstore->prepare_get_obj(s->bucket_str, s->object_str, ofs, &end, &attrs, mod_ptr,
unmod_ptr, if_match, if_nomatch, &total_len, &handle, &err);
unmod_ptr, &lastmod, if_match, if_nomatch, &total_len, &handle, &err);
if (ret < 0)
goto done;
src/rgw/rgw_op.h
size_t total_len;
off_t end;
time_t mod_time;
time_t lastmod;
time_t unmod_time;
time_t *mod_ptr;
time_t *unmod_ptr;
src/rgw/rgw_rados.cc
char *data;
off_t ofs = 0, end = -1;
size_t total_len;
time_t lastmod;
map<string, bufferlist>::iterator iter;
cerr << "copy " << src_bucket << ":" << src_obj << " => " << dest_bucket << ":" << dest_obj << std::endl;
......
map<string, bufferlist> attrset;
ret = prepare_get_obj(src_bucket, src_obj, ofs, &end, &attrset,
mod_ptr, unmod_ptr, if_match, if_nomatch, &total_len, &handle, err);
mod_ptr, unmod_ptr, &lastmod, if_match, if_nomatch, &total_len, &handle, err);
if (ret < 0)
return ret;
......
map<string, bufferlist> *attrs,
const time_t *mod_ptr,
const time_t *unmod_ptr,
time_t *lastmod,
const char *if_match,
const char *if_nomatch,
size_t *total_size,
......
*end = size - 1;
*total_size = (ofs <= *end ? *end + 1 - ofs : 0);
*lastmod = mtime;
return 0;
src/rgw/rgw_rados.h
map<string, bufferlist> *attrs,
const time_t *mod_ptr,
const time_t *unmod_ptr,
time_t *lastmod,
const char *if_match,
const char *if_nomatch,
size_t *total_size,
src/rgw/rgw_rest.cc
static void dump_content_length(struct req_state *s, int len)
{
CGI_PRINTF(s->fcgx->out, "Content-Length: %d\n", len);
CGI_PRINTF(s->fcgx->out, "Accept-Ranges: %s\n", "bytes");
}
static void dump_etag(struct req_state *s, const char *etag)
......
CGI_PRINTF(s->fcgx->out,"ETag: \"%s\"\n", etag);
}
static void dump_last_modified(struct req_state *s, time_t t) {
char timestr[TIME_BUF_SIZE];
struct tm *tmp = localtime(&t);
if (tmp == NULL)
return;
if (strftime(timestr, sizeof(timestr), "%a, %d %b %Y %H:%M:%S %Z", tmp) == 0)
return;
CGI_PRINTF(s->fcgx->out, "Last-Modified: %s\n", timestr);
}
void dump_value(struct req_state *s, const char *name, const char *fmt, ...)
{
#define LARGE_SIZE 8192
......
void dump_time(struct req_state *s, const char *name, time_t *t)
{
#define TIME_BUF_SIZE 128
char buf[TIME_BUF_SIZE];
struct tm *tmp = localtime(t);
if (tmp == NULL)
......
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);
}
......
if (sent_header)
goto send_data;
if (get_data && !ret) {
if (range_str)
dump_range(s, ofs, end);
dump_content_length(s, total_len);
}
if (range_str)
dump_range(s, ofs, end);
dump_content_length(s, total_len);
dump_last_modified(s, lastmod);
if (!ret) {
map<string, bufferlist>::iterator iter = attrs.find(RGW_ATTR_ETAG);
if (iter != attrs.end()) {
......
dump_etag(s, etag);
}
}
for (iter = attrs.begin(); iter != attrs.end(); ++iter) {
const char *name = iter->first.c_str();
if (strncmp(name, RGW_ATTR_META_PREFIX, sizeof(RGW_ATTR_META_PREFIX)-1) == 0) {
src/rgw/rgw_rest.h
#ifndef CEPH_RGW_REST_H
#define CEPH_RGW_REST_H
#define TIME_BUF_SIZE 128
#include "rgw_op.h"
src/rgw/rgw_user.cc
void *handle = NULL;
off_t ofs = 0, end = -1;
size_t total_len;
time_t lastmod;
bufferlist::iterator iter;
ret = rgwstore->prepare_get_obj(ui_bucket, user_id, ofs, &end, NULL, NULL, NULL, NULL, NULL, &total_len, &handle, &err);
ret = rgwstore->prepare_get_obj(ui_bucket, user_id, ofs, &end, NULL, NULL, NULL, &lastmod, NULL, NULL, &total_len, &handle, &err);
if (ret < 0)
return ret;
do {
......
size_t total_len;
ret = rgwstore->prepare_get_obj(ui_email_bucket, email, ofs, &end, NULL, NULL,
NULL, NULL, NULL, &total_len, &handle, &err);
NULL, NULL, NULL, NULL, &total_len, &handle, &err);
if (ret < 0)
return ret;
do {
(1-1/3)