]> git.proxmox.com Git - ceph.git/blob - ceph/src/rgw/rgw_os_lib.cc
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / rgw / rgw_os_lib.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
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 */