In QUIC, prevent applications from looking up stream_map_ directly.
Instead, a new method GetActiveStream() is exposed.
No behavior change. not protected.
PiperOrigin-RevId: 322685603
Change-Id: Id354bc418bd6634439e188e1247f40a3ce1727d3
diff --git a/quic/core/http/quic_spdy_client_session_base.cc b/quic/core/http/quic_spdy_client_session_base.cc
index 3050989..9bd7695 100644
--- a/quic/core/http/quic_spdy_client_session_base.cc
+++ b/quic/core/http/quic_spdy_client_session_base.cc
@@ -177,9 +177,9 @@
QuicSpdyStream* QuicSpdyClientSessionBase::GetPromisedStream(
const QuicStreamId id) {
- StreamMap::iterator it = stream_map().find(id);
- if (it != stream_map().end()) {
- return static_cast<QuicSpdyStream*>(it->second.get());
+ QuicStream* stream = GetActiveStream(id);
+ if (stream != nullptr) {
+ return static_cast<QuicSpdyStream*>(stream);
}
return nullptr;
}
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index a6286cc..d13166e 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -2069,6 +2069,14 @@
return nullptr;
}
+QuicStream* QuicSession::GetActiveStream(QuicStreamId id) const {
+ auto stream = stream_map_.find(id);
+ if (stream != stream_map_.end() && !stream->second->is_static()) {
+ return stream->second.get();
+ }
+ return nullptr;
+}
+
bool QuicSession::OnFrameAcked(const QuicFrame& frame,
QuicTime::Delta ack_delay_time,
QuicTime receive_timestamp) {
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index db8c55f..635ffa9 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -645,6 +645,11 @@
connection()->SetLossDetectionTuner(std::move(tuner));
}
+ // Find stream with |id|, returns nullptr if the stream does not exist or
+ // closed. static streams and zombie streams are not considered active
+ // streams.
+ QuicStream* GetActiveStream(QuicStreamId id) const;
+
private:
friend class test::QuicSessionPeer;