mirror of
https://github.com/yhirose/cpp-httplib
synced 2024-11-21 14:29:10 -07:00
Code cleanup
This commit is contained in:
parent
f1a2ac5108
commit
16df0ef37e
1 changed files with 55 additions and 54 deletions
109
httplib.h
109
httplib.h
|
@ -428,19 +428,6 @@ struct Response {
|
||||||
ContentProvider content_provider_;
|
ContentProvider content_provider_;
|
||||||
std::function<void()> content_provider_resource_releaser_;
|
std::function<void()> content_provider_resource_releaser_;
|
||||||
bool is_chunked_content_provider = false;
|
bool is_chunked_content_provider = false;
|
||||||
|
|
||||||
class ContentProviderAdapter {
|
|
||||||
public:
|
|
||||||
explicit ContentProviderAdapter(ContentProviderWithoutLength&& content_provider):
|
|
||||||
content_provider_(content_provider) {}
|
|
||||||
|
|
||||||
bool operator()(size_t offset, size_t, DataSink& sink) {
|
|
||||||
return content_provider_(offset, sink);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
ContentProviderWithoutLength content_provider_;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Stream {
|
class Stream {
|
||||||
|
@ -3329,39 +3316,6 @@ public:
|
||||||
static WSInit wsinit_;
|
static WSInit wsinit_;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
// Header utilities
|
|
||||||
inline std::pair<std::string, std::string> make_range_header(Ranges ranges) {
|
|
||||||
std::string field = "bytes=";
|
|
||||||
auto i = 0;
|
|
||||||
for (auto r : ranges) {
|
|
||||||
if (i != 0) { field += ", "; }
|
|
||||||
if (r.first != -1) { field += std::to_string(r.first); }
|
|
||||||
field += '-';
|
|
||||||
if (r.second != -1) { field += std::to_string(r.second); }
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return std::make_pair("Range", field);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline std::pair<std::string, std::string>
|
|
||||||
make_basic_authentication_header(const std::string &username,
|
|
||||||
const std::string &password,
|
|
||||||
bool is_proxy = false) {
|
|
||||||
auto field = "Basic " + detail::base64_encode(username + ":" + password);
|
|
||||||
auto key = is_proxy ? "Proxy-Authorization" : "Authorization";
|
|
||||||
return std::make_pair(key, field);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline std::pair<std::string, std::string>
|
|
||||||
make_bearer_token_authentication_header(const std::string &token,
|
|
||||||
bool is_proxy = false) {
|
|
||||||
auto field = "Bearer " + token;
|
|
||||||
auto key = is_proxy ? "Proxy-Authorization" : "Authorization";
|
|
||||||
return std::make_pair(key, field);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
|
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
|
||||||
inline std::pair<std::string, std::string> make_digest_authentication_header(
|
inline std::pair<std::string, std::string> make_digest_authentication_header(
|
||||||
const Request &req, const std::map<std::string, std::string> &auth,
|
const Request &req, const std::map<std::string, std::string> &auth,
|
||||||
|
@ -3459,6 +3413,53 @@ inline std::string random_string(size_t length) {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ContentProviderAdapter {
|
||||||
|
public:
|
||||||
|
explicit ContentProviderAdapter(
|
||||||
|
ContentProviderWithoutLength &&content_provider)
|
||||||
|
: content_provider_(content_provider) {}
|
||||||
|
|
||||||
|
bool operator()(size_t offset, size_t, DataSink &sink) {
|
||||||
|
return content_provider_(offset, sink);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
ContentProviderWithoutLength content_provider_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
|
// Header utilities
|
||||||
|
inline std::pair<std::string, std::string> make_range_header(Ranges ranges) {
|
||||||
|
std::string field = "bytes=";
|
||||||
|
auto i = 0;
|
||||||
|
for (auto r : ranges) {
|
||||||
|
if (i != 0) { field += ", "; }
|
||||||
|
if (r.first != -1) { field += std::to_string(r.first); }
|
||||||
|
field += '-';
|
||||||
|
if (r.second != -1) { field += std::to_string(r.second); }
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return std::make_pair("Range", field);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::pair<std::string, std::string>
|
||||||
|
make_basic_authentication_header(const std::string &username,
|
||||||
|
const std::string &password,
|
||||||
|
bool is_proxy = false) {
|
||||||
|
auto field = "Basic " + detail::base64_encode(username + ":" + password);
|
||||||
|
auto key = is_proxy ? "Proxy-Authorization" : "Authorization";
|
||||||
|
return std::make_pair(key, field);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline std::pair<std::string, std::string>
|
||||||
|
make_bearer_token_authentication_header(const std::string &token,
|
||||||
|
bool is_proxy = false) {
|
||||||
|
auto field = "Bearer " + token;
|
||||||
|
auto key = is_proxy ? "Proxy-Authorization" : "Authorization";
|
||||||
|
return std::make_pair(key, field);
|
||||||
|
}
|
||||||
|
|
||||||
// Request implementation
|
// Request implementation
|
||||||
inline bool Request::has_header(const char *key) const {
|
inline bool Request::has_header(const char *key) const {
|
||||||
return detail::has_header(headers, key);
|
return detail::has_header(headers, key);
|
||||||
|
@ -3598,7 +3599,7 @@ Response::set_content_provider(const char *content_type,
|
||||||
const std::function<void()> &resource_releaser) {
|
const std::function<void()> &resource_releaser) {
|
||||||
set_header("Content-Type", content_type);
|
set_header("Content-Type", content_type);
|
||||||
content_length_ = 0;
|
content_length_ = 0;
|
||||||
content_provider_ = ContentProviderAdapter(std::move(provider));
|
content_provider_ = detail::ContentProviderAdapter(std::move(provider));
|
||||||
content_provider_resource_releaser_ = resource_releaser;
|
content_provider_resource_releaser_ = resource_releaser;
|
||||||
is_chunked_content_provider = false;
|
is_chunked_content_provider = false;
|
||||||
}
|
}
|
||||||
|
@ -3608,7 +3609,7 @@ inline void Response::set_chunked_content_provider(
|
||||||
const std::function<void()> &resource_releaser) {
|
const std::function<void()> &resource_releaser) {
|
||||||
set_header("Content-Type", content_type);
|
set_header("Content-Type", content_type);
|
||||||
content_length_ = 0;
|
content_length_ = 0;
|
||||||
content_provider_ = ContentProviderAdapter(std::move(provider));
|
content_provider_ = detail::ContentProviderAdapter(std::move(provider));
|
||||||
content_provider_resource_releaser_ = resource_releaser;
|
content_provider_resource_releaser_ = resource_releaser;
|
||||||
is_chunked_content_provider = true;
|
is_chunked_content_provider = true;
|
||||||
}
|
}
|
||||||
|
@ -4706,13 +4707,13 @@ inline bool ClientImpl::handle_request(Stream &strm, const Request &req,
|
||||||
|
|
||||||
if (!username.empty() && !password.empty()) {
|
if (!username.empty() && !password.empty()) {
|
||||||
std::map<std::string, std::string> auth;
|
std::map<std::string, std::string> auth;
|
||||||
if (parse_www_authenticate(res, auth, is_proxy)) {
|
if (detail::parse_www_authenticate(res, auth, is_proxy)) {
|
||||||
Request new_req = req;
|
Request new_req = req;
|
||||||
new_req.authorization_count_ += 1;
|
new_req.authorization_count_ += 1;
|
||||||
auto key = is_proxy ? "Proxy-Authorization" : "Authorization";
|
auto key = is_proxy ? "Proxy-Authorization" : "Authorization";
|
||||||
new_req.headers.erase(key);
|
new_req.headers.erase(key);
|
||||||
new_req.headers.insert(make_digest_authentication_header(
|
new_req.headers.insert(detail::make_digest_authentication_header(
|
||||||
req, auth, new_req.authorization_count_, random_string(10),
|
req, auth, new_req.authorization_count_, detail::random_string(10),
|
||||||
username, password, is_proxy));
|
username, password, is_proxy));
|
||||||
|
|
||||||
Response new_res;
|
Response new_res;
|
||||||
|
@ -5811,7 +5812,7 @@ inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res,
|
||||||
if (!proxy_digest_auth_username_.empty() &&
|
if (!proxy_digest_auth_username_.empty() &&
|
||||||
!proxy_digest_auth_password_.empty()) {
|
!proxy_digest_auth_password_.empty()) {
|
||||||
std::map<std::string, std::string> auth;
|
std::map<std::string, std::string> auth;
|
||||||
if (parse_www_authenticate(res2, auth, true)) {
|
if (detail::parse_www_authenticate(res2, auth, true)) {
|
||||||
Response res3;
|
Response res3;
|
||||||
if (!detail::process_client_socket(
|
if (!detail::process_client_socket(
|
||||||
socket.sock, read_timeout_sec_, read_timeout_usec_,
|
socket.sock, read_timeout_sec_, read_timeout_usec_,
|
||||||
|
@ -5819,8 +5820,8 @@ inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res,
|
||||||
Request req3;
|
Request req3;
|
||||||
req3.method = "CONNECT";
|
req3.method = "CONNECT";
|
||||||
req3.path = host_and_port_;
|
req3.path = host_and_port_;
|
||||||
req3.headers.insert(make_digest_authentication_header(
|
req3.headers.insert(detail::make_digest_authentication_header(
|
||||||
req3, auth, 1, random_string(10),
|
req3, auth, 1, detail::random_string(10),
|
||||||
proxy_digest_auth_username_, proxy_digest_auth_password_,
|
proxy_digest_auth_username_, proxy_digest_auth_password_,
|
||||||
true));
|
true));
|
||||||
return process_request(strm, req3, res3, false);
|
return process_request(strm, req3, res3, false);
|
||||||
|
|
Loading…
Reference in a new issue