key.id = access;
key.key = secret;
- list<pair<string, string> > params;
+ param_vec_t params;
RGWRESTSimpleRequest req(g_ceph_context, url, NULL, ¶ms);
bufferlist response;
RGWRESTConn *conn;
RGWHTTPManager *http_manager;
string path;
- param_list_t params;
+ param_vec_t params;
T *result;
boost::intrusive_ptr<RGWRESTReadResource> http_op;
RGWRESTConn *conn;
RGWHTTPManager *http_manager;
string path;
- param_list_t params;
+ param_vec_t params;
T *result;
S input;
return ret;
}
+
/*
* the following set of callbacks will be called either on RGWHTTPManager::process(),
* or via the RGWHTTPManager async processing.
return ret;
}
-static curl_slist *headers_to_slist(list<pair<string, string> >& headers)
+static curl_slist *headers_to_slist(param_vec_t& headers)
{
curl_slist *h = NULL;
- list<pair<string, string> >::iterator iter;
+ param_vec_t::iterator iter;
for (iter = headers.begin(); iter != headers.end(); ++iter) {
pair<string, string>& p = *iter;
string val = p.first;
#include "include/atomic.h"
#include "rgw_common.h"
+using param_pair_t = pair<string, string>;
+using param_vec_t = vector<param_pair_t>;
+
struct rgw_http_req_data;
class RGWHTTPClient
protected:
CephContext *cct;
- list<pair<string, string> > headers;
+ param_vec_t headers;
int init_request(const char *method, const char *url, rgw_http_req_data *req_data);
public:
for (miter = extra_args.begin(); miter != extra_args.end(); ++miter) {
append_param(dest, miter->first, miter->second);
}
- list<pair<string, string> >::iterator iter;
+ param_vec_t::iterator iter;
for (iter = params.begin(); iter != params.end(); ++iter) {
append_param(dest, iter->first, iter->second);
}
get_params_str(args, params_str);
/* merge params with extra args so that we can sign correctly */
- for (list<pair<string, string> >::iterator iter = params.begin(); iter != params.end(); ++iter) {
+ for (param_vec_t::iterator iter = params.begin(); iter != params.end(); ++iter) {
new_info.args.append(iter->first, iter->second);
}
#ifndef CEPH_RGW_REST_CLIENT_H
#define CEPH_RGW_REST_CLIENT_H
-#include <list>
-
#include "rgw_http_client.h"
class RGWGetDataCB;
string url;
map<string, string> out_headers;
- list<pair<string, string> > params;
+ param_vec_t params;
bufferlist::iterator *send_iter;
int sign_request(RGWAccessKey& key, RGWEnv& env, req_info& info);
public:
- RGWRESTSimpleRequest(CephContext *_cct, const string& _url, list<pair<string, string> > *_headers,
- list<pair<string, string> > *_params) : RGWHTTPClient(_cct), http_status(0), status(0),
+ RGWRESTSimpleRequest(CephContext *_cct, const string& _url, param_vec_t *_headers,
+ param_vec_t *_params) : RGWHTTPClient(_cct), http_status(0), status(0),
url(_url), send_iter(NULL),
max_response(0) {
set_headers(_headers);
set_params(_params);
}
- void set_headers(list<pair<string, string> > *_headers) {
+ void set_headers(param_vec_t *_headers) {
if (_headers)
headers = *_headers;
}
- void set_params(list<pair<string, string> > *_params) {
+ void set_params(param_vec_t *_params) {
if (_params)
params = *_params;
}
int add_output_data(bufferlist& bl);
int send_data(void *ptr, size_t len);
- RGWRESTStreamWriteRequest(CephContext *_cct, const string& _url, list<pair<string, string> > *_headers,
- list<pair<string, string> > *_params) : RGWRESTSimpleRequest(_cct, _url, _headers, _params),
+ RGWRESTStreamWriteRequest(CephContext *_cct, const string& _url, param_vec_t *_headers,
+ param_vec_t *_params) : RGWRESTSimpleRequest(_cct, _url, _headers, _params),
lock("RGWRESTStreamWriteRequest"), cb(NULL), http_manager(_cct) {}
~RGWRESTStreamWriteRequest();
int put_obj_init(RGWAccessKey& key, rgw_obj& obj, uint64_t obj_size, map<string, bufferlist>& attrs);
int receive_data(void *ptr, size_t len);
RGWRESTStreamRWRequest(CephContext *_cct, const char *_method, const string& _url, RGWGetDataCB *_cb,
- list<pair<string, string> > *_headers,
- list<pair<string, string> > *_params) : RGWRESTSimpleRequest(_cct, _url, _headers, _params),
+ param_vec_t *_headers, param_vec_t *_params) : RGWRESTSimpleRequest(_cct, _url, _headers, _params),
lock("RGWRESTStreamReadRequest"), cb(_cb),
chunk_ofs(0), ofs(0), http_manager(_cct), method(_method), write_ofs(0) {
}
class RGWRESTStreamReadRequest : public RGWRESTStreamRWRequest {
public:
- RGWRESTStreamReadRequest(CephContext *_cct, const string& _url, RGWGetDataCB *_cb, list<pair<string, string> > *_headers,
- list<pair<string, string> > *_params) : RGWRESTStreamRWRequest(_cct, "GET", _url, _cb, _headers, _params) {}
+ RGWRESTStreamReadRequest(CephContext *_cct, const string& _url, RGWGetDataCB *_cb, param_vec_t *_headers,
+ param_vec_t *_params) : RGWRESTStreamRWRequest(_cct, "GET", _url, _cb, _headers, _params) {}
};
#endif
if (ret < 0)
return ret;
string uid_str = uid.to_str();
- param_list_t params;
+ param_vec_t params;
if (!uid.empty())
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "uid", uid_str));
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "zonegroup", self_zone_group));
return ret;
string uid_str = uid.to_str();
- param_list_t params;
+ param_vec_t params;
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "uid", uid_str));
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "zonegroup", self_zone_group));
*req = new RGWRESTStreamWriteRequest(cct, url, NULL, ¶ms);
if (ret < 0)
return ret;
- param_list_t params;
+ param_vec_t params;
if (!uid.empty()) {
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "uid", uid.to_str()));
}
}
int RGWRESTConn::get_resource(const string& resource,
- param_list_t *extra_params,
+ param_vec_t *extra_params,
map<string, string> *extra_headers,
bufferlist& bl,
RGWHTTPManager *mgr)
if (ret < 0)
return ret;
- param_list_t params;
+ param_vec_t params;
if (extra_params) {
params.insert(params.end(), extra_params->begin(), extra_params->end());
RGWRESTReadResource::RGWRESTReadResource(RGWRESTConn *_conn,
const string& _resource,
const rgw_http_param_pair *pp,
- param_list_t *extra_headers,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr)
: cct(_conn->get_ctx()), conn(_conn), resource(_resource),
params(make_param_list(pp)), cb(bl), mgr(_mgr),
RGWRESTReadResource::RGWRESTReadResource(RGWRESTConn *_conn,
const string& _resource,
- param_list_t& _params,
- param_list_t *extra_headers,
+ param_vec_t& _params,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr)
: cct(_conn->get_ctx()), conn(_conn), resource(_resource), params(_params),
cb(bl), mgr(_mgr), req(cct, conn->get_url(), &cb, NULL, NULL)
init_common(extra_headers);
}
-void RGWRESTReadResource::init_common(param_list_t *extra_headers)
+void RGWRESTReadResource::init_common(param_vec_t *extra_headers)
{
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "zonegroup", conn->get_self_zonegroup()));
RGWRESTPostResource::RGWRESTPostResource(RGWRESTConn *_conn,
const string& _resource,
const rgw_http_param_pair *pp,
- param_list_t *extra_headers,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr)
: cct(_conn->get_ctx()), conn(_conn), resource(_resource),
params(make_param_list(pp)), cb(bl), mgr(_mgr),
RGWRESTPostResource::RGWRESTPostResource(RGWRESTConn *_conn,
const string& _resource,
- param_list_t& params,
- param_list_t *extra_headers,
+ param_vec_t& params,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr)
: cct(_conn->get_ctx()), conn(_conn), resource(_resource), params(params),
cb(bl), mgr(_mgr), req(cct, "POST", conn->get_url(), &cb, NULL, NULL)
init_common(extra_headers);
}
-void RGWRESTPostResource::init_common(param_list_t *extra_headers)
+void RGWRESTPostResource::init_common(param_vec_t *extra_headers)
{
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "zonegroup", conn->get_self_zonegroup()));
const char *val;
};
-using param_pair_t = pair<string, string>;
-// TODO: consider vector instead of list
-using param_list_t = std::list<param_pair_t>;
-
// copy a null-terminated rgw_http_param_pair list into a list of string pairs
-inline param_list_t make_param_list(const rgw_http_param_pair* pp)
+inline param_vec_t make_param_list(const rgw_http_param_pair* pp)
{
- param_list_t params;
+ param_vec_t params;
while (pp && pp->key) {
string k = pp->key;
string v = (pp->val ? pp->val : "");
int complete_request(RGWRESTStreamReadRequest *req, string& etag, ceph::real_time *mtime, map<string, string>& attrs);
int get_resource(const string& resource,
- param_list_t *extra_params,
+ param_vec_t *extra_params,
map<string, string>* extra_headers,
bufferlist& bl, RGWHTTPManager *mgr = NULL);
template <class T>
- int get_json_resource(const string& resource, param_list_t *params, T& t);
+ int get_json_resource(const string& resource, param_vec_t *params, T& t);
template <class T>
int get_json_resource(const string& resource, const rgw_http_param_pair *pp, T& t);
};
template<class T>
-int RGWRESTConn::get_json_resource(const string& resource, param_list_t *params, T& t)
+int RGWRESTConn::get_json_resource(const string& resource, param_vec_t *params, T& t)
{
bufferlist bl;
int ret = get_resource(resource, params, NULL, bl);
template<class T>
int RGWRESTConn::get_json_resource(const string& resource, const rgw_http_param_pair *pp, T& t)
{
- param_list_t params = make_param_list(pp);
+ param_vec_t params = make_param_list(pp);
return get_json_resource(resource, ¶ms, t);
}
CephContext *cct;
RGWRESTConn *conn;
string resource;
- param_list_t params;
+ param_vec_t params;
map<string, string> headers;
bufferlist bl;
RGWStreamIntoBufferlist cb;
RGWHTTPManager *mgr;
RGWRESTStreamReadRequest req;
- void init_common(param_list_t *extra_headers);
+ void init_common(param_vec_t *extra_headers);
public:
RGWRESTReadResource(RGWRESTConn *_conn,
const string& _resource,
const rgw_http_param_pair *pp,
- param_list_t *extra_headers,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr);
RGWRESTReadResource(RGWRESTConn *_conn,
const string& _resource,
- param_list_t& _params,
- param_list_t *extra_headers,
+ param_vec_t& _params,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr);
void set_user_info(void *user_info) {
CephContext *cct;
RGWRESTConn *conn;
string resource;
- param_list_t params;
+ param_vec_t params;
map<string, string> headers;
bufferlist bl;
RGWStreamIntoBufferlist cb;
RGWHTTPManager *mgr;
RGWRESTStreamRWRequest req;
- void init_common(param_list_t *extra_headers);
+ void init_common(param_vec_t *extra_headers);
public:
RGWRESTPostResource(RGWRESTConn *_conn,
const string& _resource,
const rgw_http_param_pair *pp,
- param_list_t *extra_headers,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr);
RGWRESTPostResource(RGWRESTConn *_conn,
const string& _resource,
- param_list_t& params,
- param_list_t *extra_headers,
+ param_vec_t& params,
+ param_vec_t *extra_headers,
RGWHTTPManager *_mgr);
void set_user_info(void *user_info) {