url_encode(obj.key.name, urlsafe_object);
string resource = urlsafe_bucket + "/" + urlsafe_object;
- return send_request(&key, extra_headers, resource, mgr);
+ return send_request(&key, extra_headers, resource, nullptr, mgr);
}
-int RGWRESTStreamRWRequest::send_request(RGWAccessKey *key, map<string, string>& extra_headers, const string& resource, RGWHTTPManager *mgr)
+int RGWRESTStreamRWRequest::send_request(RGWAccessKey *key, map<string, string>& extra_headers, const string& resource,
+ bufferlist *send_data, RGWHTTPManager *mgr)
{
string new_url = url;
if (new_url[new_url.size() - 1] != '/')
headers.push_back(pair<string, string>(iter->first, iter->second));
}
+ if (send_data) {
+ in_data.claim(*send_data);
+ }
+
RGWHTTPManager *pmanager = &http_manager;
if (mgr) {
pmanager = mgr;
}
virtual ~RGWRESTStreamRWRequest() override {}
int send_request(RGWAccessKey& key, map<string, string>& extra_headers, rgw_obj& obj, RGWHTTPManager *mgr = NULL);
- int send_request(RGWAccessKey *key, map<string, string>& extra_headers, const string& resource, RGWHTTPManager *mgr = NULL);
+ int send_request(RGWAccessKey *key, map<string, string>& extra_headers, const string& resource, bufferlist *send_data = NULL /* optional input data */, RGWHTTPManager *mgr = NULL);
int complete_request(string& etag, real_time *mtime, uint64_t *psize, map<string, string>& attrs);
void set_outbl(bufferlist& _outbl) {
headers.insert(extra_headers->begin(), extra_headers->end());
}
- ret = req.send_request(&key, headers, resource, mgr);
+ ret = req.send_request(&key, headers, resource, nullptr, mgr);
if (ret < 0) {
ldout(cct, 5) << __func__ << ": send_request() resource=" << resource << " returned ret=" << ret << dendl;
return ret;
int RGWRESTReadResource::read()
{
- int ret = req.send_request(&conn->get_key(), headers, resource, mgr);
+ int ret = req.send_request(&conn->get_key(), headers, resource, nullptr, mgr);
if (ret < 0) {
ldout(cct, 5) << __func__ << ": send_request() resource=" << resource << " returned ret=" << ret << dendl;
return ret;
int RGWRESTReadResource::aio_read()
{
- int ret = req.send_request(&conn->get_key(), headers, resource, mgr);
+ int ret = req.send_request(&conn->get_key(), headers, resource, nullptr, mgr);
if (ret < 0) {
ldout(cct, 5) << __func__ << ": send_request() resource=" << resource << " returned ret=" << ret << dendl;
return ret;
int RGWRESTSendResource::send(bufferlist& outbl)
{
req.set_outbl(outbl);
- int ret = req.send_request(&conn->get_key(), headers, resource, mgr);
+ int ret = req.send_request(&conn->get_key(), headers, resource, nullptr, mgr);
if (ret < 0) {
ldout(cct, 5) << __func__ << ": send_request() resource=" << resource << " returned ret=" << ret << dendl;
return ret;
int RGWRESTSendResource::aio_send(bufferlist& outbl)
{
req.set_outbl(outbl);
- int ret = req.send_request(&conn->get_key(), headers, resource, mgr);
+ int ret = req.send_request(&conn->get_key(), headers, resource, nullptr, mgr);
if (ret < 0) {
ldout(cct, 5) << __func__ << ": send_request() resource=" << resource << " returned ret=" << ret << dendl;
return ret;