]> git.proxmox.com Git - ceph.git/blame - ceph/src/rgw/rgw_loadgen.cc
import ceph quincy 17.2.6
[ceph.git] / ceph / src / rgw / rgw_loadgen.cc
CommitLineData
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
14using namespace std;
15
7c673cae
FG
16void RGWLoadGenRequestEnv::set_date(utime_t& tm)
17{
c07f9fc5 18 date_str = rgw_to_asctime(tm);
7c673cae
FG
19}
20
b3b6e05e 21int 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
55size_t RGWLoadGenIO::write_data(const char* const buf,
56 const size_t len)
57{
58 return len;
59}
60
61size_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
69void RGWLoadGenIO::flush()
70{
71}
72
73size_t RGWLoadGenIO::complete_request()
74{
75 return 0;
76}
77
3a9019d9 78int 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
106size_t RGWLoadGenIO::send_status(const int status,
107 const char* const status_name)
108{
109 return 0;
110}
111
112size_t RGWLoadGenIO::send_100_continue()
113{
114 return 0;
115}
116
f67539c2
TL
117size_t RGWLoadGenIO::send_header(const std::string_view& name,
118 const std::string_view& value)
7c673cae
FG
119{
120 return 0;
121}
122
123size_t RGWLoadGenIO::complete_header()
124{
125 return 0;
126}
127
128size_t RGWLoadGenIO::send_content_length(const uint64_t len)
129{
130 return 0;
131}