diff --git a/source/common/tcp_proxy/tcp_proxy.h b/source/common/tcp_proxy/tcp_proxy.h index 929953d273c5..ae360352de07 100644 --- a/source/common/tcp_proxy/tcp_proxy.h +++ b/source/common/tcp_proxy/tcp_proxy.h @@ -423,6 +423,10 @@ class Filter : public Network::ReadFilter, return &read_callbacks_->connection(); } + const StreamInfo::StreamInfo* requestStreamInfo() const override { + return &read_callbacks_->connection().streamInfo(); + } + Network::TransportSocketOptionsConstSharedPtr upstreamTransportSocketOptions() const override { return transport_socket_options_; } diff --git a/source/extensions/clusters/dynamic_forward_proxy/cluster.cc b/source/extensions/clusters/dynamic_forward_proxy/cluster.cc index fea3b34f11d0..939a77cf5726 100644 --- a/source/extensions/clusters/dynamic_forward_proxy/cluster.cc +++ b/source/extensions/clusters/dynamic_forward_proxy/cluster.cc @@ -343,12 +343,10 @@ Cluster::LoadBalancer::chooseHost(Upstream::LoadBalancerContext* context) { } const Router::StringAccessor* dynamic_host_filter_state = nullptr; - if (context->downstreamConnection()) { + if (context->requestStreamInfo()) { dynamic_host_filter_state = - context->downstreamConnection() - ->streamInfo() - .filterState() - .getDataReadOnly(DynamicHostFilterStateKey); + context->requestStreamInfo()->filterState().getDataReadOnly( + DynamicHostFilterStateKey); } absl::string_view raw_host; @@ -370,12 +368,10 @@ Cluster::LoadBalancer::chooseHost(Upstream::LoadBalancerContext* context) { .resolve(nullptr) .factory_.implementsSecureTransport(); uint32_t port = is_secure ? 443 : 80; - if (context->downstreamConnection()) { + if (context->requestStreamInfo()) { const StreamInfo::UInt32Accessor* dynamic_port_filter_state = - context->downstreamConnection() - ->streamInfo() - .filterState() - .getDataReadOnly(DynamicPortFilterStateKey); + context->requestStreamInfo()->filterState().getDataReadOnly( + DynamicPortFilterStateKey); if (dynamic_port_filter_state != nullptr && dynamic_port_filter_state->value() > 0 && dynamic_port_filter_state->value() <= 65535) { port = dynamic_port_filter_state->value(); diff --git a/test/extensions/clusters/dynamic_forward_proxy/cluster_test.cc b/test/extensions/clusters/dynamic_forward_proxy/cluster_test.cc index 0c72656c0668..bbe4ab7ed27e 100644 --- a/test/extensions/clusters/dynamic_forward_proxy/cluster_test.cc +++ b/test/extensions/clusters/dynamic_forward_proxy/cluster_test.cc @@ -64,6 +64,7 @@ class ClusterTest : public testing::Test, ON_CALL(lb_context_, downstreamHeaders()).WillByDefault(Return(&downstream_headers_)); ON_CALL(connection_, streamInfo()).WillByDefault(ReturnRef(stream_info_)); + ON_CALL(lb_context_, requestStreamInfo()).WillByDefault(Return(&stream_info_)); ON_CALL(lb_context_, downstreamConnection()).WillByDefault(Return(&connection_)); member_update_cb_ = cluster_->prioritySet().addMemberUpdateCb( @@ -118,8 +119,8 @@ class ClusterTest : public testing::Test, } Upstream::MockLoadBalancerContext* setFilterStateHostAndReturnContext(const std::string& host) { - StreamInfo::FilterState& filter_state = const_cast( - lb_context_.downstreamConnection()->streamInfo().filterState()); + StreamInfo::FilterState& filter_state = + const_cast(lb_context_.requestStreamInfo()->filterState()); filter_state.setData( "envoy.upstream.dynamic_host", std::make_shared(host),