quoted);
}
-void dump_pair(struct req_state* const s,
- const char* const key,
- const char* const value)
-{
- if ( (strlen(key) > 0) && (strlen(value) > 0))
- STREAM_IO(s)->send_header(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.empty()) {
- string b;
- if (!s->bucket_tenant.empty()) {
- string g = s->bucket_tenant + "/" + s->bucket_name;
- url_encode(g, b);
- } else {
- url_encode(s->bucket_name, b);
- }
- STREAM_IO(s)->send_header("Bucket", b);
+ if (g_conf->rgw_expose_bucket && ! s->bucket_name.empty()) {
+ if (! s->bucket_tenant.empty()) {
+ dump_header(s, "Bucket",
+ url_encode(s->bucket_tenant + "/" + s->bucket_name));
+ } else {
+ dump_header(s, "Bucket", url_encode(s->bucket_name));
}
}
}
}
}
-void dump_redirect(struct req_state *s, const string& redirect)
+void dump_redirect(struct req_state * const s, const std::string& redirect)
{
- if (redirect.empty())
- return;
-
- STREAM_IO(s)->send_header("Location", redirect);
+ return dump_header_if_nonempty(s, "Location", redirect);
}
static std::size_t dump_time_header_impl(char (×tr)[TIME_BUF_SIZE],
return dump_header(s, name, boost::string_ref(qvalbuf, len));
}
+template <class ValueT>
+static inline void dump_header_if_nonempty(struct req_state* s,
+ const boost::string_ref& name,
+ const ValueT& value) {
+ if (name.length() > 0 && value.length() > 0) {
+ return dump_header(s, name, value);
+ }
+}
+
extern void dump_content_length(struct req_state *s, uint64_t len);
extern void dump_etag(struct req_state *s,
const boost::string_ref& etag,
extern void dump_bucket_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);
extern bool is_valid_url(const char *url);
extern void dump_access_control(struct req_state *s, const char *origin,
const char *meth,
stringstream ver_stream;
ver_stream << "ver:" << ondisk_version.ver
<<",tag:" << ondisk_version.tag;
- dump_pair(s, "RGWX_UPDATE_STATUS", update_status.c_str());
- dump_pair(s, "RGWX_UPDATE_VERSION", ver_stream.str().c_str());
+ dump_header_if_nonempty(s, "RGWX_UPDATE_STATUS", update_status);
+ dump_header_if_nonempty(s, "RGWX_UPDATE_VERSION", ver_stream.str());
end_header(s);
}