// TODO: set REMOTE_USER if authenticated
}
-int RGWAsioClientIO::write_data(const char* const buf, const int len)
+std::size_t RGWAsioClientIO::write_data(const char* const buf,
+ const std::size_t len)
{
boost::system::error_code ec;
auto bytes = boost::asio::write(socket, boost::asio::buffer(buf, len), ec);
return bytes;
}
-int RGWAsioClientIO::read_data(char* const buf, const int max)
+std::size_t RGWAsioClientIO::read_data(char* const buf, const std::size_t max)
{
// read data from the body's bufferlist
auto bytes = std::min<unsigned>(max, body_iter.get_remaining());
return;
}
-int RGWAsioClientIO::send_status(const int status,
- const char* const status_name)
+std::size_t RGWAsioClientIO::send_status(const int status,
+ const char* const status_name)
{
static constexpr size_t STATUS_BUF_SIZE = 128;
return write_data(statusbuf, statuslen);
}
-int RGWAsioClientIO::send_100_continue()
+std::size_t RGWAsioClientIO::send_100_continue()
{
const char HTTTP_100_CONTINUE[] = "HTTP/1.1 100 CONTINUE\r\n\r\n";
return write_data(HTTTP_100_CONTINUE, sizeof(HTTTP_100_CONTINUE) - 1);
"Date: %a, %d %b %Y %H:%M:%S %Z\r\n", tmp);
}
-int RGWAsioClientIO::complete_header()
+std::size_t RGWAsioClientIO::complete_header()
{
size_t sent = 0;
return sent + write_data(HEADER_END, sizeof(HEADER_END) - 1);
}
-int RGWAsioClientIO::send_content_length(const uint64_t len)
+std::size_t RGWAsioClientIO::send_content_length(const uint64_t len)
{
static constexpr size_t CONLEN_BUF_SIZE = 128;
RGWEnv env;
void init_env(CephContext *cct) override;
- int write_data(const char *buf, int len) override;
- int read_data(char *buf, int max) override;
+ std::size_t write_data(const char *buf, std::size_t len) override;
+ std::size_t read_data(char *buf, std::size_t max) override;
public:
RGWAsioClientIO(tcp::socket&& socket, request_type&& request);
int complete_request() override;
void flush() override;
- int send_status(int status, const char *status_name) override;
- int send_100_continue() override;
- int complete_header() override;
- int send_content_length(uint64_t len) override;
+ std::size_t send_status(int status, const char *status_name) override;
+ std::size_t send_100_continue() override;
+ std::size_t complete_header() override;
+ std::size_t send_content_length(uint64_t len) override;
RGWEnv& get_env() noexcept override {
return env;
#define dout_subsys ceph_subsys_rgw
-int RGWCivetWeb::write_data(const char *buf, int len)
+std::size_t RGWCivetWeb::write_data(const char *buf, std::size_t len)
{
const int ret = mg_write(conn, buf, len);
if (ret == 0) {
{
}
-int RGWCivetWeb::read_data(char *buf, int len)
+std::size_t RGWCivetWeb::read_data(char *buf, std::size_t len)
{
const int ret = mg_read(conn, buf, len);
if (ret < 0) {
return static_cast<std::size_t>(ret);
}
-int RGWCivetWeb::send_status(int status, const char *status_name)
+std::size_t RGWCivetWeb::send_status(int status, const char *status_name)
{
mg_set_http_status(conn, status);
status_name ? status_name : "");
}
-int RGWCivetWeb::send_100_continue()
+std::size_t RGWCivetWeb::send_100_continue()
{
const char HTTTP_100_CONTINUE[] = "HTTP/1.1 100 CONTINUE\r\n\r\n";
return write_data(HTTTP_100_CONTINUE, sizeof(HTTTP_100_CONTINUE) - 1);
}
-int RGWCivetWeb::dump_date_header()
+std::size_t RGWCivetWeb::dump_date_header()
{
char timestr[TIME_BUF_SIZE];
return write_data(timestr, strlen(timestr));
}
-int RGWCivetWeb::complete_header()
+std::size_t RGWCivetWeb::complete_header()
{
- size_t sent = dump_date_header();
+ std::size_t sent = dump_date_header();
if (explicit_keepalive) {
constexpr char CONN_KEEP_ALIVE[] = "Connection: Keep-Alive\r\n";
return sent + write_data(HEADER_END, sizeof(HEADER_END) - 1);
}
-int RGWCivetWeb::send_content_length(uint64_t len)
+std::size_t RGWCivetWeb::send_content_length(uint64_t len)
{
return safe_mg_printf(conn, "Content-Length: %" PRIu64 "\r\n", len);
}
bool explicit_keepalive;
bool explicit_conn_close;
- int dump_date_header();
+ std::size_t dump_date_header();
public:
void init_env(CephContext *cct);
- int write_data(const char *buf, int len) override;
- int read_data(char *buf, int len) override;
+ std::size_t write_data(const char *buf, std::size_t len) override;
+ std::size_t read_data(char *buf, std::size_t len) override;
- int send_status(int status, const char *status_name) override;
- int send_100_continue() override;
- int send_content_length(uint64_t len) override;
- int complete_header() override;
+ std::size_t send_status(int status, const char *status_name) override;
+ std::size_t send_100_continue() override;
+ std::size_t send_content_length(uint64_t len) override;
+ std::size_t complete_header() override;
int complete_request() override;
void flush() override;
friend class RGWStreamIOLegacyWrapper;
protected:
- virtual int read_data(char *buf, int max) = 0;
- virtual int write_data(const char *buf, int len) = 0;
+ virtual std::size_t read_data(char *buf, std::size_t max) = 0;
+ virtual std::size_t write_data(const char *buf, std::size_t len) = 0;
public:
class Exception : public std::exception {
}
};
- virtual int send_status(int status, const char *status_name) = 0;
- virtual int send_100_continue() = 0;
- virtual int complete_header() = 0;
- virtual int send_content_length(uint64_t len) = 0;
+ virtual std::size_t send_status(int status, const char *status_name) = 0;
+ virtual std::size_t send_100_continue() = 0;
+ virtual std::size_t complete_header() = 0;
+ virtual std::size_t send_content_length(uint64_t len) = 0;
virtual void flush() = 0;
};
+class RGWStreamIO;
+
class RGWStreamIOFacade {
protected:
- RGWStreamIOEngine& engine;
+ RGWStreamIO& engine;
public:
- RGWStreamIOFacade(RGWStreamIOEngine* const engine)
+ RGWStreamIOFacade(RGWStreamIO* const engine)
: engine(*engine) {
}
/* HTTP IO: compatibility layer */
-class RGWStreamIO : public RGWStreamIOEngine,
+class RGWStreamIO : public RGWClientIO,
public RGWStreamIOFacade,
public RGWClientIOAccounter {
bool _account;
RGWEnv env;
public:
+ virtual int read_data(char *buf, int max) = 0;
+ virtual int write_data(const char *buf, int len) = 0;
+ virtual int send_status(int status, const char *status_name) = 0;
+ virtual int send_100_continue() = 0;
+ virtual int complete_header() = 0;
+ virtual int send_content_length(uint64_t len) = 0;
+ virtual void flush() = 0;
virtual ~RGWStreamIO() {}
RGWStreamIO()
: RGWStreamIOFacade(this),
return get_decoratee().init_env(cct);
}
- int read_data(char* const buf, const int max) override {
+ std::size_t read_data(char* const buf,
+ const std::size_t max) override {
return get_decoratee().read_data(buf, max);
}
- int write_data(const char* const buf, const int len) override {
+ std::size_t write_data(const char* const buf,
+ const std::size_t len) override {
return get_decoratee().write_data(buf, len);
}
: decoratee(decoratee) {
}
- int send_status(const int status, const char* const status_name) override {
+ std::size_t send_status(const int status,
+ const char* const status_name) override {
return get_decoratee().send_status(status, status_name);
}
- int send_100_continue() override {
+ std::size_t send_100_continue() override {
return get_decoratee().send_100_continue();
}
- int send_content_length(const uint64_t len) override {
+ std::size_t send_content_length(const uint64_t len) override {
return get_decoratee().send_content_length(len);
}
- int complete_header() override {
+ std::size_t complete_header() override {
return get_decoratee().complete_header();
}
uint64_t total_received;
protected:
- int read_data(char* const buf, const int max) override {
+ std::size_t read_data(char* const buf, const std::size_t max) override {
const auto received = RGWDecoratedStreamIO<T>::read_data(buf, max);
if (enabled) {
total_received += received;
return received;
}
- int write_data(const char* const buf, const int len) override {
+ std::size_t write_data(const char* const buf,
+ const std::size_t len) override {
const auto sent = RGWDecoratedStreamIO<T>::write_data(buf, len);
if (enabled) {
total_sent += sent;
total_received(0) {
}
- int send_status(const int status, const char* const status_name) override {
+ std::size_t send_status(const int status,
+ const char* const status_name) override {
const auto sent = RGWDecoratedStreamIO<T>::send_status(status, status_name);
if (enabled) {
total_sent += sent;
return sent;
}
- int send_100_continue() override {
+ std::size_t send_100_continue() override {
const auto sent = RGWDecoratedStreamIO<T>::send_100_continue();
if (enabled) {
total_sent += sent;
return sent;
}
- int send_content_length(const uint64_t len) override {
+ std::size_t send_content_length(const uint64_t len) override {
const auto sent = RGWDecoratedStreamIO<T>::send_content_length(len);
if (enabled) {
total_sent += sent;
return sent;
}
- int complete_header() override {
+ std::size_t complete_header() override {
const auto sent = RGWDecoratedStreamIO<T>::complete_header();
if (enabled) {
total_sent += sent;
bool has_content_length;
bool buffer_data;
- int write_data(const char* buf, const int len) override;
+ std::size_t write_data(const char* buf, const std::size_t len) override;
public:
template <typename U>
buffer_data(false) {
}
- int send_content_length(const uint64_t len) override;
- int complete_header() override;
+ std::size_t send_content_length(const uint64_t len) override;
+ std::size_t complete_header() override;
int complete_request() override;
};
template <typename T>
-int RGWStreamIOBufferingEngine<T>::write_data(const char* buf,
- const int len)
+std::size_t RGWStreamIOBufferingEngine<T>::write_data(const char* buf,
+ const std::size_t len)
{
if (buffer_data) {
data.append(buf, len);
}
template <typename T>
-int RGWStreamIOBufferingEngine<T>::send_content_length(const uint64_t len)
+std::size_t RGWStreamIOBufferingEngine<T>::send_content_length(const uint64_t len)
{
has_content_length = true;
return RGWDecoratedStreamIO<T>::send_content_length(len);
}
template <typename T>
-int RGWStreamIOBufferingEngine<T>::complete_header()
+std::size_t RGWStreamIOBufferingEngine<T>::complete_header()
{
if (! has_content_length) {
/* We will dump everything in complete_request(). */
bool has_content_length;
bool chunking_enabled;
- int write_data(const char* const buf, const int len) override {
+ std::size_t write_data(const char* const buf,
+ const std::size_t len) override {
if (! chunking_enabled) {
return RGWDecoratedStreamIO<T>::write_data(buf, len);
} else {
chunking_enabled(false) {
}
- using RGWDecoratedStreamIO<T>::send_content_length;
- int send_content_length(const uint64_t len) override {
+ std::size_t send_content_length(const uint64_t len) override {
has_content_length = true;
return RGWDecoratedStreamIO<T>::send_content_length(len);
}
- int complete_header() override {
+ std::size_t complete_header() override {
size_t sent = 0;
if (! has_content_length) {
action(ContentLengthAction::UNKNOWN) {
}
- int send_status(const int status, const char* const status_name) override {
+ std::size_t send_status(const int status,
+ const char* const status_name) override {
if (204 == status || 304 == status) {
action = ContentLengthAction::INHIBIT;
} else {
return RGWDecoratedStreamIO<T>::send_status(status, status_name);
}
- int send_content_length(const uint64_t len) override {
+ std::size_t send_content_length(const uint64_t len) override {
switch(action) {
case ContentLengthAction::FORWARD:
return RGWDecoratedStreamIO<T>::send_content_length(len);
ceph::bufferlist early_header_data;
ceph::bufferlist header_data;
- int write_data(const char* const buf, const int len) override {
+ std::size_t write_data(const char* const buf,
+ const std::size_t len) override {
switch (phase) {
case ReorderState::RGW_EARLY_HEADERS:
early_header_data.append(buf, len);
phase(ReorderState::RGW_EARLY_HEADERS) {
}
- int send_status(const int status, const char* const status_name) override {
+ std::size_t send_status(const int status,
+ const char* const status_name) override {
phase = ReorderState::RGW_STATUS_SEEN;
return RGWDecoratedStreamIO<T>::send_status(status, status_name);
}
- int send_content_length(const uint64_t len) override {
+ std::size_t send_content_length(const uint64_t len) override {
if (ReorderState::RGW_EARLY_HEADERS == phase) {
/* Oh great, someone tries to send content length before status. */
content_length = len;
}
}
- int complete_header() override {
+ std::size_t complete_header() override {
size_t sent = 0;
/* Change state in order to immediately send everything we get. */
#include "acconfig.h"
-int RGWFCGX::write_data(const char* const buf, const int len)
+std::size_t RGWFCGX::write_data(const char* const buf, const std::size_t len)
{
const auto ret = FCGX_PutStr(buf, len, fcgx->out);
if (ret < 0) {
return ret;
}
-int RGWFCGX::read_data(char* const buf, const int len)
+std::size_t RGWFCGX::read_data(char* const buf, const std::size_t len)
{
const auto ret = FCGX_GetStr(buf, len, fcgx->in);
if (ret < 0) {
env.init(cct, (char **)fcgx->envp);
}
-int RGWFCGX::send_status(const int status, const char* const status_name)
+std::size_t RGWFCGX::send_status(const int status, const char* const status_name)
{
static constexpr size_t STATUS_BUF_SIZE = 128;
return write_data(statusbuf, statuslen);
}
-int RGWFCGX::send_100_continue()
+std::size_t RGWFCGX::send_100_continue()
{
- int r = send_status(100, "Continue");
- if (r >= 0) {
- flush();
- }
- return r;
+ return send_status(100, "Continue");
}
-int RGWFCGX::send_content_length(const uint64_t len)
+std::size_t RGWFCGX::send_content_length(const uint64_t len)
{
static constexpr size_t CONLEN_BUF_SIZE = 128;
return write_data(sizebuf, sizelen);
}
-int RGWFCGX::complete_header()
+std::size_t RGWFCGX::complete_header()
{
constexpr char HEADER_END[] = "\r\n";
return write_data(HEADER_END, sizeof(HEADER_END) - 1);
}
void init_env(CephContext* cct) override;
- int read_data(char* buf, int len) override;
- int write_data(const char* buf, int len) override;
+ std::size_t read_data(char* buf, std::size_t len) override;
+ std::size_t write_data(const char* buf, std::size_t len) override;
- int send_status(int status, const char* status_name) override;
- int send_100_continue() override;
- int send_content_length(uint64_t len) override;
- int complete_header() override;
+ std::size_t send_status(int status, const char* status_name) override;
+ std::size_t send_100_continue() override;
+ std::size_t send_content_length(uint64_t len) override;
+ std::size_t complete_header() override;
void flush();
return 0;
}
-int RGWLoadGenIO::write_data(const char* const buf, const int len)
+std::size_t RGWLoadGenIO::write_data(const char* const buf,
+ const std::size_t len)
{
return len;
}
-int RGWLoadGenIO::read_data(char* const buf, const int len)
+std::size_t RGWLoadGenIO::read_data(char* const buf, const std::size_t len)
{
- const int read_len = std::min(left_to_read, static_cast<uint64_t>(len));
+ const std::size_t read_len = std::min(left_to_read,
+ static_cast<uint64_t>(len));
left_to_read -= read_len;
- return static_cast<int>(read_len);
+ return read_len;
}
void RGWLoadGenIO::flush()
env.set("SERVER_PORT", port_buf);
}
-int RGWLoadGenIO::send_status(const int status, const char* const status_name)
+std::size_t RGWLoadGenIO::send_status(const int status,
+ const char* const status_name)
{
return 0;
}
-int RGWLoadGenIO::send_100_continue()
+std::size_t RGWLoadGenIO::send_100_continue()
{
return 0;
}
-int RGWLoadGenIO::complete_header()
+std::size_t RGWLoadGenIO::complete_header()
{
return 0;
}
-int RGWLoadGenIO::send_content_length(const uint64_t len)
+std::size_t RGWLoadGenIO::send_content_length(const uint64_t len)
{
return 0;
}
}
void init_env(CephContext *cct);
- int read_data(char *buf, int len);
- int write_data(const char *buf, int len);
+ std::size_t read_data(char *buf, std::size_t len);
+ std::size_t write_data(const char *buf, std::size_t len);
- int send_status(int status, const char *status_name);
- int send_100_continue();
- int complete_header();
- int send_content_length(uint64_t len);
+ std::size_t send_status(int status, const char *status_name);
+ std::size_t send_100_continue();
+ std::size_t complete_header();
+ std::size_t send_content_length(uint64_t len);
void flush();