Allow overriding method in MasqueOhttpClient PiperOrigin-RevId: 895975765
diff --git a/quiche/quic/masque/masque_ohttp_client.cc b/quiche/quic/masque/masque_ohttp_client.cc index f1cbaf7..48bc60f 100644 --- a/quiche/quic/masque/masque_ohttp_client.cc +++ b/quiche/quic/masque/masque_ohttp_client.cc
@@ -83,6 +83,16 @@ } // namespace +std::string MasqueOhttpClient::Config::PerRequestConfig::method() const { + if (method_.has_value()) { + return *method_; + } + if (!post_data_.empty()) { + return "POST"; + } + return "GET"; +} + absl::Status MasqueOhttpClient::Config::PerRequestConfig::AddHeaders( const std::vector<std::string>& headers) { return ParseHeadersIntoMap(headers, headers_); @@ -373,7 +383,7 @@ } BinaryHttpRequest::ControlData control_data; std::string post_data = per_request_config.post_data(); - control_data.method = post_data.empty() ? "GET" : "POST"; + control_data.method = per_request_config.method(); control_data.scheme = url.scheme(); control_data.authority = url.HostPort(); control_data.path = url.PathParamsQuery();
diff --git a/quiche/quic/masque/masque_ohttp_client.h b/quiche/quic/masque/masque_ohttp_client.h index b5ae175..6286ef0 100644 --- a/quiche/quic/masque/masque_ohttp_client.h +++ b/quiche/quic/masque/masque_ohttp_client.h
@@ -46,6 +46,7 @@ PerRequestConfig& operator=(PerRequestConfig&& other) = default; void SetPostData(const std::string& post_data) { post_data_ = post_data; } + void SetMethod(const std::string& method) { method_ = method; } absl::Status AddHeaders(const std::vector<std::string>& headers); absl::Status AddOuterHeaders( const std::vector<std::string>& outer_headers); @@ -74,6 +75,7 @@ std::string url() const { return url_; } std::string post_data() const { return post_data_; } + std::string method() const; const std::vector<std::pair<std::string, std::string>>& headers() const { return headers_; } @@ -101,6 +103,7 @@ private: std::string url_; std::string post_data_; + std::optional<std::string> method_; std::vector<std::pair<std::string, std::string>> headers_; std::vector<std::pair<std::string, std::string>> outer_headers_; bool use_chunked_ohttp_ = false;
diff --git a/quiche/quic/masque/masque_ohttp_client_bin.cc b/quiche/quic/masque/masque_ohttp_client_bin.cc index 1b03938..13b9bbb 100644 --- a/quiche/quic/masque/masque_ohttp_client_bin.cc +++ b/quiche/quic/masque/masque_ohttp_client_bin.cc
@@ -59,6 +59,11 @@ "file."); DEFINE_QUICHE_COMMAND_LINE_FLAG( + std::optional<std::string>, method, std::nullopt, + "Sets the method of the encapsulated request. Defaults to GET, or POST if " + "--post_data or --post_data_file is set."); + +DEFINE_QUICHE_COMMAND_LINE_FLAG( std::vector<std::string>, header, {}, "Adds a header field to the encapsulated binary request. Separate the " "header name and value with a colon. Can be specified multiple times."); @@ -149,6 +154,8 @@ } post_data = *post_data_from_file; } + std::optional<std::string> method = + quiche::GetQuicheCommandLineFlag(FLAGS_method); std::vector<std::string> headers = quiche::GetQuicheCommandLineFlag(FLAGS_header); std::vector<std::string> key_fetch_headers = @@ -201,6 +208,9 @@ for (size_t i = 2; i < urls.size(); ++i) { MasqueOhttpClient::Config::PerRequestConfig per_request_config(urls[i]); per_request_config.SetPostData(post_data); + if (method.has_value()) { + per_request_config.SetMethod(*method); + } QUICHE_RETURN_IF_ERROR(per_request_config.AddHeaders(headers)); QUICHE_RETURN_IF_ERROR(per_request_config.AddOuterHeaders(outer_headers)); if (!private_token.empty()) {