if (0 && data.length() == 0) {
has_content_length = true;
- print("Transfer-Enconding: %s\n", "chunked");
+ print("Transfer-Enconding: %s\r\n", "chunked");
data.append("0\r\n\r\n", sizeof("0\r\n\r\n")-1);
} else {
int r = send_content_length(data.length());
if (!status_name)
status_name = "";
- snprintf(buf, sizeof(buf), "HTTP/1.1 %s %s\n", status, status_name);
+ snprintf(buf, sizeof(buf), "HTTP/1.1 %s %s\r\n", status, status_name);
bufferlist bl;
bl.append(buf);
has_content_length = true;
char buf[21];
snprintf(buf, sizeof(buf), "%" PRIu64, len);
- return print("Content-Length: %s\n", buf);
+ return print("Content-Length: %s\r\n", buf);
}
int RGWFCGX::send_status(const char *status, const char *status_name)
{
- return print("Status: %s %s\n", status, status_name);
+ return print("Status: %s %s\r\n", status, status_name);
}
int RGWFCGX::send_100_continue()
{
char buf[21];
snprintf(buf, sizeof(buf), "%" PRIu64, len);
- return print("Content-Length: %s\n", buf);
+ return print("Content-Length: %s\r\n", buf);
}
int RGWFCGX::complete_header()
if (r < 0) {
ldout(s->cct, 0) << "ERROR: s->cio->print() returned err=" << r << dendl;
}
- r = s->cio->print("Accept-Ranges: %s\n", "bytes");
+ r = s->cio->print("Accept-Ranges: %s\r\n", "bytes");
if (r < 0) {
ldout(s->cct, 0) << "ERROR: s->cio->print() returned err=" << r << dendl;
}
{
int r;
if (s->prot_flags & RGW_REST_SWIFT)
- r = s->cio->print("etag: %s\n", etag);
+ r = s->cio->print("etag: %s\r\n", etag);
else
- r = s->cio->print("ETag: \"%s\"\n", etag);
+ r = s->cio->print("ETag: \"%s\"\r\n", etag);
if (r < 0) {
ldout(s->cct, 0) << "ERROR: s->cio->print() returned err=" << r << dendl;
}
void dump_pair(struct req_state *s, const char *key, const char *value)
{
if ( (strlen(key) > 0) && (strlen(value) > 0))
- s->cio->print("%s: %s\n", key, value);
+ s->cio->print("%s: %s\r\n", key, value);
}
void dump_bucket_from_state(struct req_state *s)
int expose_bucket = g_conf->rgw_expose_bucket;
if (expose_bucket) {
if (!s->bucket_name_str.empty())
- s->cio->print("Bucket: \"%s\"\n", s->bucket_name_str.c_str());
+ s->cio->print("Bucket: \"%s\"\r\n", s->bucket_name_str.c_str());
}
}
-void dump_object_from_state(struct req_state *s)
-{
- if (!s->object_str.empty())
- s->cio->print("Key: \"%s\"\n", s->object_str.c_str());
-}
-
void dump_uri_from_state(struct req_state *s)
{
if (strcmp(s->info.request_uri.c_str(), "/") == 0) {
location += "/";
if (!s->object_str.empty()) {
location += s->object_str;
- s->cio->print("Location: %s\n", location.c_str());
+ s->cio->print("Location: %s\r\n", location.c_str());
}
}
}
else {
- s->cio->print("Location: \"%s\"\n", s->info.request_uri.c_str());
+ s->cio->print("Location: \"%s\"\r\n", s->info.request_uri.c_str());
}
}
if (redirect.empty())
return;
- s->cio->print("Location: %s\n", redirect.c_str());
+ s->cio->print("Location: %s\r\n", redirect.c_str());
}
static void dump_time_header(struct req_state *s, const char *name, time_t t)
if (strftime(timestr, sizeof(timestr), "%a, %d %b %Y %H:%M:%S %Z", tmp) == 0)
return;
- int r = s->cio->print("%s: %s\n", name, timestr);
+ int r = s->cio->print("%s: %s\r\n", name, timestr);
if (r < 0) {
ldout(s->cct, 0) << "ERROR: s->cio->print() returned err=" << r << dendl;
}
char buf[32];
snprintf(buf, sizeof(buf), "%lld", (long long)t);
- int r = s->cio->print("%s: %s\n", name, buf);
+ int r = s->cio->print("%s: %s\r\n", name, buf);
if (r < 0) {
ldout(s->cct, 0) << "ERROR: s->cio->print() returned err=" << r << dendl;
}
void dump_access_control(struct req_state *s, const char *origin, const char *meth,
const char *hdr, const char *exp_hdr, uint32_t max_age) {
if (origin && (origin[0] != '\0')) {
- s->cio->print("Access-Control-Allow-Origin: %s\n", origin);
+ s->cio->print("Access-Control-Allow-Origin: %s\r\n", origin);
if (meth && (meth[0] != '\0'))
- s->cio->print("Access-Control-Allow-Methods: %s\n", meth);
+ s->cio->print("Access-Control-Allow-Methods: %s\r\n", meth);
if (hdr && (hdr[0] != '\0'))
- s->cio->print("Access-Control-Allow-Headers: %s\n", hdr);
+ s->cio->print("Access-Control-Allow-Headers: %s\r\n", hdr);
if (exp_hdr && (exp_hdr[0] != '\0')) {
- s->cio->print("Access-Control-Expose-Headers: %s\n", exp_hdr);
+ s->cio->print("Access-Control-Expose-Headers: %s\r\n", exp_hdr);
}
if (max_age != CORS_MAX_AGE_INVALID) {
- s->cio->print("Access-Control-Max-Age: %d\n", max_age);
+ s->cio->print("Access-Control-Max-Age: %d\r\n", max_age);
}
}
}
/* dumping range into temp buffer first, as libfcgi will fail to digest %lld */
snprintf(range_buf, sizeof(range_buf), "%lld-%lld/%lld", (long long)ofs, (long long)end, (long long)total);
- int r = s->cio->print("Content-Range: bytes %s\n", range_buf);
+ int r = s->cio->print("Content-Range: bytes %s\r\n", range_buf);
if (r < 0) {
ldout(s->cct, 0) << "ERROR: s->cio->print() returned err=" << r << dendl;
}
extern void list_all_buckets_end(struct req_state *s);
extern void dump_time(struct req_state *s, const char *name, time_t *t);
extern void dump_bucket_from_state(struct req_state *s);
-extern void dump_object_from_state(struct req_state *s);
extern void dump_uri_from_state(struct req_state *s);
extern void dump_redirect(struct req_state *s, const string& redirect);
extern void dump_pair(struct req_state *s, const char *key, const char *value);
dump_errno(s);
for (riter = response_attrs.begin(); riter != response_attrs.end(); ++riter) {
- s->cio->print("%s: %s\n", riter->first.c_str(), riter->second.c_str());
+ s->cio->print("%s: %s\r\n", riter->first.c_str(), riter->second.c_str());
}
if (!content_type)
{
char buf[32];
snprintf(buf, sizeof(buf), "%lld", (long long)bucket.count);
- s->cio->print("X-RGW-Object-Count: %s\n", buf);
+ s->cio->print("X-RGW-Object-Count: %s\r\n", buf);
snprintf(buf, sizeof(buf), "%lld", (long long)bucket.size);
- s->cio->print("X-RGW-Bytes-Used: %s\n", buf);
+ s->cio->print("X-RGW-Bytes-Used: %s\r\n", buf);
}
void RGWStatBucket_ObjStore_S3::send_response()
{
char buf[32];
snprintf(buf, sizeof(buf), "%lld", (long long)bucket.count);
- s->cio->print("X-Container-Object-Count: %s\n", buf);
+ s->cio->print("X-Container-Object-Count: %s\r\n", buf);
snprintf(buf, sizeof(buf), "%lld", (long long)bucket.size);
- s->cio->print("X-Container-Bytes-Used: %s\n", buf);
+ s->cio->print("X-Container-Bytes-Used: %s\r\n", buf);
snprintf(buf, sizeof(buf), "%lld", (long long)bucket.size_rounded);
- s->cio->print("X-Container-Bytes-Used-Actual: %s\n", buf);
+ s->cio->print("X-Container-Bytes-Used-Actual: %s\r\n", buf);
if (!s->object) {
RGWAccessControlPolicy_SWIFT *swift_policy = static_cast<RGWAccessControlPolicy_SWIFT *>(s->bucket_acl);
{
char buf[32];
snprintf(buf, sizeof(buf), "%lld", (long long)buckets_count);
- s->cio->print("X-Account-Container-Count: %s\n", buf);
+ s->cio->print("X-Account-Container-Count: %s\r\n", buf);
snprintf(buf, sizeof(buf), "%lld", (long long)buckets_object_count);
- s->cio->print("X-Account-Object-Count: %s\n", buf);
+ s->cio->print("X-Account-Object-Count: %s\r\n", buf);
snprintf(buf, sizeof(buf), "%lld", (long long)buckets_size);
- s->cio->print("X-Account-Bytes-Used: %s\n", buf);
+ s->cio->print("X-Account-Bytes-Used: %s\r\n", buf);
snprintf(buf, sizeof(buf), "%lld", (long long)buckets_size_rounded);
- s->cio->print("X-Account-Bytes-Used-Actual: %s\n", buf);
+ s->cio->print("X-Account-Bytes-Used-Actual: %s\r\n", buf);
}
void RGWStatAccount_ObjStore_SWIFT::send_response()
dump_errno(s);
for (riter = response_attrs.begin(); riter != response_attrs.end(); ++riter) {
- s->cio->print("%s: %s\n", riter->first.c_str(), riter->second.c_str());
+ s->cio->print("%s: %s\r\n", riter->first.c_str(), riter->second.c_str());
}
if (!content_type)
tenant_path.append(g_conf->rgw_swift_tenant_name);
}
- s->cio->print("X-Storage-Url: %s/%s/v1%s\n", swift_url.c_str(),
+ s->cio->print("X-Storage-Url: %s/%s/v1%s\r\n", swift_url.c_str(),
swift_prefix.c_str(), tenant_path.c_str());
if ((ret = encode_token(s->cct, swift_key->id, swift_key->key, bl)) < 0)
char buf[bl.length() * 2 + 1];
buf_to_hex((const unsigned char *)bl.c_str(), bl.length(), buf);
- s->cio->print("X-Storage-Token: AUTH_rgwtk%s\n", buf);
- s->cio->print("X-Auth-Token: AUTH_rgwtk%s\n", buf);
+ s->cio->print("X-Storage-Token: AUTH_rgwtk%s\r\n", buf);
+ s->cio->print("X-Auth-Token: AUTH_rgwtk%s\r\n", buf);
}
ret = STATUS_NO_CONTENT;