]>
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 <algorithm> | |
5 | #include <sstream> | |
6 | #include <string.h> | |
7 | ||
8 | #include "rgw_loadgen.h" | |
9 | #include "rgw_auth_s3.h" | |
10 | ||
11 | ||
12 | #define dout_subsys ceph_subsys_rgw | |
13 | ||
20effc67 TL |
14 | using namespace std; |
15 | ||
7c673cae FG |
16 | void RGWLoadGenRequestEnv::set_date(utime_t& tm) |
17 | { | |
c07f9fc5 | 18 | date_str = rgw_to_asctime(tm); |
7c673cae FG |
19 | } |
20 | ||
b3b6e05e | 21 | int RGWLoadGenRequestEnv::sign(const DoutPrefixProvider *dpp, RGWAccessKey& access_key) |
7c673cae | 22 | { |
9f95a23c | 23 | meta_map_t meta_map; |
7c673cae FG |
24 | map<string, string> sub_resources; |
25 | ||
26 | string canonical_header; | |
27 | string digest; | |
28 | ||
b3b6e05e TL |
29 | rgw_create_s3_canonical_header(dpp, |
30 | request_method.c_str(), | |
7c673cae FG |
31 | nullptr, /* const char *content_md5 */ |
32 | content_type.c_str(), | |
33 | date_str.c_str(), | |
34 | meta_map, | |
9f95a23c | 35 | meta_map_t{}, |
7c673cae FG |
36 | uri.c_str(), |
37 | sub_resources, | |
38 | canonical_header); | |
39 | ||
31f18b77 FG |
40 | headers["HTTP_DATE"] = date_str; |
41 | try { | |
42 | /* FIXME(rzarzynski): kill the dependency on g_ceph_context. */ | |
43 | const auto signature = static_cast<std::string>( | |
44 | rgw::auth::s3::get_v2_signature(g_ceph_context, canonical_header, | |
45 | access_key.key)); | |
46 | headers["HTTP_AUTHORIZATION"] = \ | |
47 | std::string("AWS ") + access_key.id + ":" + signature; | |
48 | } catch (int ret) { | |
7c673cae FG |
49 | return ret; |
50 | } | |
51 | ||
7c673cae FG |
52 | return 0; |
53 | } | |
54 | ||
55 | size_t RGWLoadGenIO::write_data(const char* const buf, | |
56 | const size_t len) | |
57 | { | |
58 | return len; | |
59 | } | |
60 | ||
61 | size_t RGWLoadGenIO::read_data(char* const buf, const size_t len) | |
62 | { | |
63 | const size_t read_len = std::min(left_to_read, | |
64 | static_cast<uint64_t>(len)); | |
65 | left_to_read -= read_len; | |
66 | return read_len; | |
67 | } | |
68 | ||
69 | void RGWLoadGenIO::flush() | |
70 | { | |
71 | } | |
72 | ||
73 | size_t RGWLoadGenIO::complete_request() | |
74 | { | |
75 | return 0; | |
76 | } | |
77 | ||
3a9019d9 | 78 | int RGWLoadGenIO::init_env(CephContext *cct) |
7c673cae FG |
79 | { |
80 | env.init(cct); | |
81 | ||
82 | left_to_read = req->content_length; | |
83 | ||
84 | char buf[32]; | |
85 | snprintf(buf, sizeof(buf), "%lld", (long long)req->content_length); | |
86 | env.set("CONTENT_LENGTH", buf); | |
87 | ||
88 | env.set("CONTENT_TYPE", req->content_type.c_str()); | |
89 | env.set("HTTP_DATE", req->date_str.c_str()); | |
90 | ||
91 | for (map<string, string>::iterator iter = req->headers.begin(); iter != req->headers.end(); ++iter) { | |
92 | env.set(iter->first.c_str(), iter->second.c_str()); | |
93 | } | |
94 | ||
95 | env.set("REQUEST_METHOD", req->request_method.c_str()); | |
96 | env.set("REQUEST_URI", req->uri.c_str()); | |
97 | env.set("QUERY_STRING", req->query_string.c_str()); | |
98 | env.set("SCRIPT_URI", req->uri.c_str()); | |
99 | ||
100 | char port_buf[16]; | |
101 | snprintf(port_buf, sizeof(port_buf), "%d", req->port); | |
102 | env.set("SERVER_PORT", port_buf); | |
3a9019d9 | 103 | return 0; |
7c673cae FG |
104 | } |
105 | ||
106 | size_t RGWLoadGenIO::send_status(const int status, | |
107 | const char* const status_name) | |
108 | { | |
109 | return 0; | |
110 | } | |
111 | ||
112 | size_t RGWLoadGenIO::send_100_continue() | |
113 | { | |
114 | return 0; | |
115 | } | |
116 | ||
f67539c2 TL |
117 | size_t RGWLoadGenIO::send_header(const std::string_view& name, |
118 | const std::string_view& value) | |
7c673cae FG |
119 | { |
120 | return 0; | |
121 | } | |
122 | ||
123 | size_t RGWLoadGenIO::complete_header() | |
124 | { | |
125 | return 0; | |
126 | } | |
127 | ||
128 | size_t RGWLoadGenIO::send_content_length(const uint64_t len) | |
129 | { | |
130 | return 0; | |
131 | } |