Allow using client certificates with MasqueSimpleGet PiperOrigin-RevId: 934311208
diff --git a/quiche/quic/masque/masque_connection_pool.cc b/quiche/quic/masque/masque_connection_pool.cc index 9449966..4818af8 100644 --- a/quiche/quic/masque/masque_connection_pool.cc +++ b/quiche/quic/masque/masque_connection_pool.cc
@@ -73,13 +73,18 @@ static absl::StatusOr<Message> Fetch(const Message& request, absl::string_view info_string, const DnsConfig& dns_config, - bool disable_certificate_verification) { + bool disable_certificate_verification, + SSL_CTX* ssl_ctx) { SimpleFetcher fetcher; std::unique_ptr<QuicEventLoop> event_loop = GetDefaultEventLoop()->Create(QuicDefaultClock::Get()); - QUICHE_ASSIGN_OR_RETURN(bssl::UniquePtr<SSL_CTX> ssl_ctx, - MasqueConnectionPool::CreateSslCtx("", "")); - MasqueConnectionPool pool(event_loop.get(), ssl_ctx.get(), + bssl::UniquePtr<SSL_CTX> local_ssl_ctx; + if (ssl_ctx == nullptr) { + QUICHE_ASSIGN_OR_RETURN(local_ssl_ctx, + MasqueConnectionPool::CreateSslCtx("", "")); + ssl_ctx = local_ssl_ctx.get(); + } + MasqueConnectionPool pool(event_loop.get(), ssl_ctx, disable_certificate_verification, dns_config, &fetcher, info_string); QUICHE_RETURN_IF_ERROR(pool.SendRequest(request).status()); @@ -99,7 +104,8 @@ static absl::StatusOr<Message> Get(absl::string_view url_string, absl::string_view info_string, const DnsConfig& dns_config, - bool disable_certificate_verification) { + bool disable_certificate_verification, + SSL_CTX* ssl_ctx) { Message request; QuicUrl url(url_string, "https"); if (url.host().empty() && !absl::StrContains(url_string, "://")) { @@ -110,7 +116,7 @@ request.headers[":authority"] = url.HostPort(); request.headers[":path"] = url.PathParamsQuery(); return Fetch(std::move(request), info_string, dns_config, - disable_certificate_verification); + disable_certificate_verification, ssl_ctx); } // From MasqueConnectionPool::Visitor. @@ -148,17 +154,17 @@ absl::StatusOr<MasqueConnectionPool::Message> MasqueSimpleFetch( const MasqueConnectionPool::Message& request, absl::string_view info_string, const MasqueConnectionPool::DnsConfig& dns_config, - bool disable_certificate_verification) { + bool disable_certificate_verification, SSL_CTX* ssl_ctx) { return SimpleFetcher::Fetch(request, info_string, dns_config, - disable_certificate_verification); + disable_certificate_verification, ssl_ctx); } absl::StatusOr<MasqueConnectionPool::Message> MasqueSimpleGet( absl::string_view url_string, absl::string_view info_string, const MasqueConnectionPool::DnsConfig& dns_config, - bool disable_certificate_verification) { + bool disable_certificate_verification, SSL_CTX* ssl_ctx) { return SimpleFetcher::Get(url_string, info_string, dns_config, - disable_certificate_verification); + disable_certificate_verification, ssl_ctx); } // static
diff --git a/quiche/quic/masque/masque_connection_pool.h b/quiche/quic/masque/masque_connection_pool.h index c7a3aa4..24faf65 100644 --- a/quiche/quic/masque/masque_connection_pool.h +++ b/quiche/quic/masque/masque_connection_pool.h
@@ -201,7 +201,7 @@ const MasqueConnectionPool::Message& request, absl::string_view info_string, const MasqueConnectionPool::DnsConfig& dns_config = MasqueConnectionPool::DnsConfig(), - bool disable_certificate_verification = false); + bool disable_certificate_verification = false, SSL_CTX* ssl_ctx = nullptr); // Synchronously performs an HTTP GET using a single-use MasqueConnectionPool. // Returns the HTTP response message or an error. `info_string` is used to @@ -210,7 +210,7 @@ absl::string_view url_string, absl::string_view info_string, const MasqueConnectionPool::DnsConfig& dns_config = MasqueConnectionPool::DnsConfig(), - bool disable_certificate_verification = false); + bool disable_certificate_verification = false, SSL_CTX* ssl_ctx = nullptr); } // namespace quic