diff --git a/src/envoy/upstreams/http/metadata/BUILD b/src/envoy/upstreams/http/metadata/BUILD index 85cb11e0ed9..4926b7f42f4 100644 --- a/src/envoy/upstreams/http/metadata/BUILD +++ b/src/envoy/upstreams/http/metadata/BUILD @@ -30,8 +30,13 @@ envoy_cc_library( hdrs = ["upstream_request.h"], repository = "@envoy", deps = [ + "@com_google_absl//absl/types:optional", "@envoy//include/envoy/http:codec_interface", "@envoy//include/envoy/router:router_interface", + "@envoy//include/envoy/stream_info:stream_info_interface", + "@envoy//include/envoy/upstream:host_description_interface", + "@envoy//include/envoy/upstream:load_balancer_interface", + "@envoy//include/envoy/upstream:thread_local_cluster_interface", "@envoy//source/extensions/upstreams/http/http:upstream_request_lib", ], ) diff --git a/src/envoy/upstreams/http/metadata/upstream_request.cc b/src/envoy/upstreams/http/metadata/upstream_request.cc index c4ea50422fa..42f4648286b 100644 --- a/src/envoy/upstreams/http/metadata/upstream_request.cc +++ b/src/envoy/upstreams/http/metadata/upstream_request.cc @@ -14,3 +14,35 @@ */ #include "src/envoy/upstreams/http/metadata/upstream_request.h" + +#include +#include + +#include "absl/types/optional.h" +#include "envoy/http/codec.h" +#include "envoy/http/protocol.h" +#include "envoy/stream_info/stream_info.h" +#include "envoy/upstream/host_description.h" + +namespace Envoy { +namespace Upstreams { +namespace Http { +namespace Metadata { + +void MetadataConnPool::onPoolReady( + Envoy::Http::RequestEncoder& request_encoder, + Upstream::HostDescriptionConstSharedPtr host, + const StreamInfo::StreamInfo& info, + absl::optional protocol) { + conn_pool_stream_handle_ = nullptr; + auto upstream = std::make_unique( + callbacks_->upstreamToDownstream(), &request_encoder); + callbacks_->onPoolReady(std::move(upstream), host, + request_encoder.getStream().connectionLocalAddress(), + info, protocol); +} + +} // namespace Metadata +} // namespace Http +} // namespace Upstreams +} // namespace Envoy diff --git a/src/envoy/upstreams/http/metadata/upstream_request.h b/src/envoy/upstreams/http/metadata/upstream_request.h index 60203710666..ba49e240ce9 100644 --- a/src/envoy/upstreams/http/metadata/upstream_request.h +++ b/src/envoy/upstreams/http/metadata/upstream_request.h @@ -15,8 +15,14 @@ #pragma once +#include "absl/types/optional.h" #include "envoy/http/codec.h" +#include "envoy/http/protocol.h" #include "envoy/router/router.h" +#include "envoy/stream_info/stream_info.h" +#include "envoy/upstream/host_description.h" +#include "envoy/upstream/load_balancer.h" +#include "envoy/upstream/thread_local_cluster.h" #include "extensions/upstreams/http/http/upstream_request.h" namespace Envoy { @@ -24,6 +30,22 @@ namespace Upstreams { namespace Http { namespace Metadata { +class MetadataConnPool + : public Extensions::Upstreams::Http::Http::HttpConnPool { + public: + MetadataConnPool(Upstream::ThreadLocalCluster& thread_local_cluster, + bool is_connect, const Router::RouteEntry& route_entry, + absl::optional downstream_protocol, + Upstream::LoadBalancerContext* ctx) + : HttpConnPool(thread_local_cluster, is_connect, route_entry, + downstream_protocol, ctx) {} + + void onPoolReady(Envoy::Http::RequestEncoder& callbacks_encoder, + Upstream::HostDescriptionConstSharedPtr host, + const StreamInfo::StreamInfo& info, + absl::optional protocol) override; +}; + class MetadataUpstream : public Extensions::Upstreams::Http::Http::HttpUpstream { public: