From ae010ff2450fd34ba05c5ffa6f49e7a7aed422d2 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Tue, 5 Apr 2016 14:05:39 +0200 Subject: [PATCH] rgw: improve encapsulation and const-correctness in the RGWHTTPClient family. Signed-off-by: Radoslaw Zarzynski --- src/rgw/rgw_http_client.cc | 44 ++++++++++++++----- src/rgw/rgw_http_client.h | 86 ++++++++++++++++++++++++++------------ 2 files changed, 92 insertions(+), 38 deletions(-) diff --git a/src/rgw/rgw_http_client.cc b/src/rgw/rgw_http_client.cc index f69da270c66c8..1d0872e5e979a 100644 --- a/src/rgw/rgw_http_client.cc +++ b/src/rgw/rgw_http_client.cc @@ -75,36 +75,49 @@ struct rgw_http_req_data : public RefCountedObject { /* * the simple set of callbacks will be called on RGWHTTPClient::process() */ -static size_t simple_receive_http_header(void *ptr, size_t size, size_t nmemb, void *_info) +/* Static methods - callbacks for libcurl. */ +size_t RGWHTTPClient::simple_receive_http_header(void * const ptr, + const size_t size, + const size_t nmemb, + void * const _info) { RGWHTTPClient *client = static_cast(_info); - size_t len = size * nmemb; + const size_t len = size * nmemb; int ret = client->receive_header(ptr, size * nmemb); if (ret < 0) { - dout(0) << "WARNING: client->receive_header() returned ret=" << ret << dendl; + dout(0) << "WARNING: client->receive_header() returned ret=" + << ret << dendl; } return len; } -static size_t simple_receive_http_data(void *ptr, size_t size, size_t nmemb, void *_info) +size_t RGWHTTPClient::simple_receive_http_data(void * const ptr, + const size_t size, + const size_t nmemb, + void * const _info) { RGWHTTPClient *client = static_cast(_info); - size_t len = size * nmemb; + const size_t len = size * nmemb; int ret = client->receive_data(ptr, size * nmemb); if (ret < 0) { - dout(0) << "WARNING: client->receive_data() returned ret=" << ret << dendl; + dout(0) << "WARNING: client->receive_data() returned ret=" + << ret << dendl; } return len; } -static size_t simple_send_http_data(void *ptr, size_t size, size_t nmemb, void *_info) +size_t RGWHTTPClient::simple_send_http_data(void * const ptr, + const size_t size, + const size_t nmemb, + void * const _info) { RGWHTTPClient *client = static_cast(_info); int ret = client->send_data(ptr, size * nmemb); if (ret < 0) { - dout(0) << "WARNING: client->receive_data() returned ret=" << ret << dendl; + dout(0) << "WARNING: client->receive_data() returned ret=" + << ret << dendl; } return ret; @@ -114,7 +127,10 @@ static size_t simple_send_http_data(void *ptr, size_t size, size_t nmemb, void * * the following set of callbacks will be called either on RGWHTTPManager::process(), * or via the RGWHTTPManager async processing. */ -static size_t receive_http_header(void *ptr, size_t size, size_t nmemb, void *_info) +size_t RGWHTTPClient::receive_http_header(void * const ptr, + const size_t size, + const size_t nmemb, + void * const _info) { rgw_http_req_data *req_data = static_cast(_info); size_t len = size * nmemb; @@ -133,7 +149,10 @@ static size_t receive_http_header(void *ptr, size_t size, size_t nmemb, void *_i return len; } -static size_t receive_http_data(void *ptr, size_t size, size_t nmemb, void *_info) +size_t RGWHTTPClient::receive_http_data(void * const ptr, + const size_t size, + const size_t nmemb, + void * const _info) { rgw_http_req_data *req_data = static_cast(_info); size_t len = size * nmemb; @@ -152,7 +171,10 @@ static size_t receive_http_data(void *ptr, size_t size, size_t nmemb, void *_inf return len; } -static size_t send_http_data(void *ptr, size_t size, size_t nmemb, void *_info) +size_t RGWHTTPClient::send_http_data(void * const ptr, + const size_t size, + const size_t nmemb, + void * const _info) { rgw_http_req_data *req_data = static_cast(_info); diff --git a/src/rgw/rgw_http_client.h b/src/rgw/rgw_http_client.h index 3bbe33685ce5e..3603c6cfde9c8 100644 --- a/src/rgw/rgw_http_client.h +++ b/src/rgw/rgw_http_client.h @@ -36,11 +36,50 @@ class RGWHTTPClient protected: CephContext *cct; - param_vec_t headers; - int init_request(const char *method, const char *url, rgw_http_req_data *req_data); -public: + int init_request(const char *method, + const char *url, + rgw_http_req_data *req_data); + + virtual int receive_header(void *ptr, size_t len) { + return 0; + } + virtual int receive_data(void *ptr, size_t len) { + return 0; + } + virtual int send_data(void *ptr, size_t len) { + return 0; + } + + /* Callbacks for libcurl. */ + static size_t simple_receive_http_header(void *ptr, + size_t size, + size_t nmemb, + void *_info); + static size_t receive_http_header(void *ptr, + size_t size, + size_t nmemb, + void *_info); + + static size_t simple_receive_http_data(void *ptr, + size_t size, + size_t nmemb, + void *_info); + static size_t receive_http_data(void *ptr, + size_t size, + size_t nmemb, + void *_info); + + static size_t simple_send_http_data(void *ptr, + size_t size, + size_t nmemb, + void *_info); + static size_t send_http_data(void *ptr, + size_t size, + size_t nmemb, + void *_info); +public: static const long HTTP_STATUS_NOSTATUS = 0; static const long HTTP_STATUS_UNAUTHORIZED = 401; @@ -67,16 +106,6 @@ public: headers.push_back(pair(name, val)); } - virtual int receive_header(void *ptr, size_t len) { - return 0; - } - virtual int receive_data(void *ptr, size_t len) { - return 0; - } - virtual int send_data(void *ptr, size_t len) { - return 0; - } - void set_send_length(size_t len) { send_len = len; has_send_len = true; @@ -123,15 +152,6 @@ public: relevant_headers(relevant_headers) { } - int receive_header(void *ptr, size_t len) override; - int receive_data(void *ptr, size_t len) override { - return 0; - } - - int send_data(void *ptr, size_t len) override { - return 0; - } - std::map get_headers() const { return found_headers; } @@ -141,8 +161,18 @@ public: return found_headers.at(name); } - protected: + virtual int receive_header(void *ptr, size_t len) override; + + virtual int receive_data(void *ptr, size_t len) override { + return 0; + } + + virtual int send_data(void *ptr, size_t len) override { + return 0; + } + +private: const std::set relevant_headers; std::map found_headers; }; @@ -163,17 +193,19 @@ public: this->post_data = _post_data; } + std::string get_subject_token() { + return subject_token; + } + +protected: int send_data(void* ptr, size_t len); + int receive_data(void *ptr, size_t len) { bl->append((char *)ptr, len); return 0; } int receive_header(void *ptr, size_t len); - - std::string get_subject_token() { - return subject_token; - } }; -- 2.39.5