Skip to content

Commit bc77da3

Browse files
committed
Fix upgrade to SSL after a proxy connect (hostname is required)
1 parent 886855b commit bc77da3

File tree

1 file changed

+5
-10
lines changed

1 file changed

+5
-10
lines changed

Release/src/http/client/http_client_asio.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,11 @@ namespace
8787
{
8888
const std::string CRLF("\r\n");
8989

90-
std::string calc_cn_host(const bool secure,
91-
const web::http::uri& baseUri,
90+
std::string calc_cn_host(const web::http::uri& baseUri,
9291
const web::http::http_headers& requestHeaders)
9392
{
9493
std::string result;
95-
if (secure)
94+
if (baseUri.scheme() == U("https"))
9695
{
9796
const utility::string_t* encResult;
9897
const auto hostHeader = requestHeaders.find(_XPLATSTR("Host"));
@@ -472,7 +471,6 @@ class asio_client final : public _http_client_communicator
472471
: _http_client_communicator(std::move(address), std::move(client_config))
473472
, m_resolver(crossplat::threadpool::shared_instance().service())
474473
, m_pool(std::make_shared<asio_connection_pool>())
475-
, m_start_with_ssl(base_uri().scheme() == U("https") && !this->client_config().proxy().is_specified())
476474
{
477475
}
478476

@@ -482,13 +480,13 @@ class asio_client final : public _http_client_communicator
482480

483481
std::shared_ptr<asio_connection> obtain_connection(const http_request& req)
484482
{
485-
std::string cn_host = calc_cn_host(m_start_with_ssl, base_uri(), req.headers());
483+
std::string cn_host = calc_cn_host(base_uri(), req.headers());
486484
std::shared_ptr<asio_connection> conn = m_pool->try_acquire(cn_host);
487485
if (conn == nullptr)
488486
{
489487
// Pool was empty. Create a new connection
490488
conn = std::make_shared<asio_connection>(crossplat::threadpool::shared_instance().service());
491-
if (m_start_with_ssl)
489+
if (base_uri().scheme() == U("https") && !this->client_config().proxy().is_specified())
492490
{
493491
conn->upgrade_to_ssl(std::move(cn_host), this->client_config().get_ssl_context_callback());
494492
}
@@ -499,13 +497,10 @@ class asio_client final : public _http_client_communicator
499497

500498
virtual pplx::task<http_response> propagate(http_request request) override;
501499

502-
bool start_with_ssl() const CPPREST_NOEXCEPT { return m_start_with_ssl; }
503-
504500
tcp::resolver m_resolver;
505501

506502
private:
507503
const std::shared_ptr<asio_connection_pool> m_pool;
508-
const bool m_start_with_ssl;
509504
};
510505

511506
class asio_context final : public request_context, public std::enable_shared_from_this<asio_context>
@@ -941,7 +936,7 @@ class asio_context final : public request_context, public std::enable_shared_fro
941936
void upgrade_to_ssl()
942937
{
943938
auto& client = static_cast<asio_client&>(*m_http_client);
944-
m_connection->upgrade_to_ssl(calc_cn_host(client.start_with_ssl(), client.base_uri(), m_request.headers()),
939+
m_connection->upgrade_to_ssl(calc_cn_host(client.base_uri(), m_request.headers()),
945940
client.client_config().get_ssl_context_callback());
946941
}
947942

0 commit comments

Comments
 (0)