if (ret >= 0) {
val_map[nv.get_name()] = nv.get_val();
- if (ret > 0) { /* this might be a sub-resource */
- if ((nv.get_name().compare("acl") == 0) ||
- (nv.get_name().compare("location") == 0) ||
- (nv.get_name().compare("uploads") == 0) ||
- (nv.get_name().compare("versionid") == 0) ||
- (nv.get_name().compare("torrent") == 0))
- sub_resource = nv.get_name();
+ if ((nv.get_name().compare("acl") == 0) ||
+ (nv.get_name().compare("location") == 0) ||
+ (nv.get_name().compare("uploads") == 0) ||
+ (nv.get_name().compare("partNumber") == 0) ||
+ (nv.get_name().compare("uploadId") == 0) ||
+ (nv.get_name().compare("versionid") == 0) ||
+ (nv.get_name().compare("torrent") == 0)) {
+ sub_resources[nv.get_name()] = nv.get_val();
}
}
{
string str, empty_str;
map<string, string> val_map;
- string sub_resource;
+ map<string, string> sub_resources;
public:
XMLArgs() {}
XMLArgs(string s) : str(s) {}
/** Set the arguments; as received */
- void set(string s) { val_map.clear(); sub_resource.clear(); str = s; }
+ void set(string s) { val_map.clear(); sub_resources.clear(); str = s; }
/** parse the received arguments */
int parse();
/** Get the value for a specific argument parameter */
map<string, string>::iterator iter = val_map.find(name);
return (iter != val_map.end());
}
- string& get_sub_resource() { return sub_resource; }
+ map<string, string>& get_sub_resources() { return sub_resources; }
};
enum http_op {
dest.append(s->path_name_url.c_str());
- string& sub = s->args.get_sub_resource();
- if (sub.size() > 0) {
- dest.append("?");
- dest.append(sub);
+ map<string, string>& sub = s->args.get_sub_resources();
+ map<string, string>::iterator iter;
+ for (iter = sub.begin(); iter != sub.end(); ++iter) {
+ if (iter == sub.begin())
+ dest.append("?");
+ else
+ dest.append("&");
+ dest.append(iter->first);
+ if (!iter->second.empty()) {
+ dest.append("=");
+ dest.append(iter->second);
+ }
}
+ RGW_LOG(0) << "dest=" << dest << dendl;
}
/*