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