diff --git a/source/common/http/conn_manager_impl.cc b/source/common/http/conn_manager_impl.cc index 37387ae9451b1..2b39461878463 100644 --- a/source/common/http/conn_manager_impl.cc +++ b/source/common/http/conn_manager_impl.cc @@ -353,6 +353,10 @@ Network::FilterStatus ConnectionManagerImpl::onData(Buffer::Instance& data, bool } } while (redispatch); + if (!read_callbacks_->connection().streamInfo().protocol()) { + read_callbacks_->connection().streamInfo().protocol(codec_->protocol()); + } + return Network::FilterStatus::StopIteration; } diff --git a/test/common/http/conn_manager_impl_test.cc b/test/common/http/conn_manager_impl_test.cc index 434721d9c3848..34e0ebedca214 100644 --- a/test/common/http/conn_manager_impl_test.cc +++ b/test/common/http/conn_manager_impl_test.cc @@ -4138,6 +4138,7 @@ TEST_F(HttpConnectionManagerImplTest, FilterHeadReply) { EXPECT_CALL(*decoder_filters_[0], decodeComplete()); // Kick off the incoming data. Buffer::OwnedImpl fake_input("1234"); + EXPECT_CALL(filter_callbacks_.connection_.stream_info_, protocol(Envoy::Http::Protocol::Http11)); conn_manager_->onData(fake_input, false); } @@ -4613,6 +4614,7 @@ TEST_F(HttpConnectionManagerImplTest, FilterDirectDecodeEncodeDataNoTrailers) { // Kick off the incoming data. Buffer::OwnedImpl fake_input("1234"); + EXPECT_CALL(filter_callbacks_.connection_.stream_info_, protocol(Envoy::Http::Protocol::Http11)); conn_manager_->onData(fake_input, false); Buffer::OwnedImpl decoded_data_to_forward; @@ -4791,6 +4793,7 @@ TEST_F(HttpConnectionManagerImplTest, MultipleFilters) { // Kick off the incoming data. Buffer::OwnedImpl fake_input("1234"); + EXPECT_CALL(filter_callbacks_.connection_.stream_info_, protocol(Envoy::Http::Protocol::Http11)); conn_manager_->onData(fake_input, false); // Mimic a decoder filter that trapped data and now sends it on, since the data was buffered