blob: e43bf418a37b57d89f8fe731062ff0ff18fe6c8c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
#include "rgw_rest.h"
#include "rgw_rest_s3.h"
#include "rgw_rest_user.h"
#include "rgw_os_lib.h"
#include "rgw_file.h"
#include "rgw_lib_frontend.h"
namespace rgw {
/* static */
int RGWHandler_Lib::init_from_header(struct req_state *s)
{
string req;
string first;
const char *req_name = s->relative_uri.c_str();
const char *p;
/* skip request_params parsing, rgw_file should not be
* seeing any */
if (*req_name == '?') {
p = req_name;
} else {
p = s->info.request_params.c_str();
}
s->info.args.set(p);
s->info.args.parse();
if (*req_name != '/')
return 0;
req_name++;
if (!*req_name)
return 0;
req = req_name;
int pos = req.find('/');
if (pos >= 0) {
first = req.substr(0, pos);
} else {
first = req;
}
if (s->bucket_name.empty()) {
s->bucket_name = std::move(first);
if (pos >= 0) {
// XXX ugh, another copy
string encoded_obj_str = req.substr(pos+1);
s->object = rgw_obj_key(encoded_obj_str, s->info.args.get("versionId"));
}
} else {
s->object = rgw_obj_key(req_name, s->info.args.get("versionId"));
}
return 0;
} /* init_from_header */
} /* namespace rgw */
|