Remove QuicStreamIdManager::IsIncomingStream() as it's hard coded. Also QuicSession doesn't need the indirectness.
QuicUtils should be the single source of truth.
gfe-relnote: no behavior change. not protected.
PiperOrigin-RevId: 305518573
Change-Id: I926c93ccd33f12c694b823d764a88d13df3e6c94
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index d190b6c..b57ddd7 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -1840,7 +1840,7 @@
bool QuicSession::IsIncomingStream(QuicStreamId id) const {
if (VersionHasIetfQuicFrames(transport_version())) {
- return v99_streamid_manager_.IsIncomingStream(id);
+ return !QuicUtils::IsOutgoingStreamId(version(), id, perspective_);
}
return stream_id_manager_.IsIncomingStream(id);
}
diff --git a/quic/core/quic_stream_id_manager.cc b/quic/core/quic_stream_id_manager.cc
index 7aafb9d..11f0668 100644
--- a/quic/core/quic_stream_id_manager.cc
+++ b/quic/core/quic_stream_id_manager.cc
@@ -10,6 +10,7 @@
#include "net/third_party/quiche/src/quic/core/quic_constants.h"
#include "net/third_party/quiche/src/quic/core/quic_session.h"
#include "net/third_party/quiche/src/quic/core/quic_utils.h"
+#include "net/third_party/quiche/src/quic/core/quic_versions.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_flag_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
@@ -24,13 +25,13 @@
DelegateInterface* delegate,
bool unidirectional,
Perspective perspective,
- QuicTransportVersion transport_version,
+ ParsedQuicVersion version,
QuicStreamCount max_allowed_outgoing_streams,
QuicStreamCount max_allowed_incoming_streams)
: delegate_(delegate),
unidirectional_(unidirectional),
perspective_(perspective),
- transport_version_(transport_version),
+ version_(version),
outgoing_max_streams_(max_allowed_outgoing_streams),
next_outgoing_stream_id_(GetFirstOutgoingStreamId()),
outgoing_stream_count_(0),
@@ -39,7 +40,7 @@
incoming_initial_max_open_streams_(max_allowed_incoming_streams),
incoming_stream_count_(0),
largest_peer_created_stream_id_(
- QuicUtils::GetInvalidStreamId(transport_version)) {}
+ QuicUtils::GetInvalidStreamId(version.transport_version)) {}
QuicStreamIdManager::~QuicStreamIdManager() {}
@@ -109,7 +110,7 @@
void QuicStreamIdManager::OnStreamClosed(QuicStreamId stream_id) {
DCHECK_NE(QuicUtils::IsBidirectionalStreamId(stream_id), unidirectional_);
- if (!IsIncomingStream(stream_id)) {
+ if (QuicUtils::IsOutgoingStreamId(version_, stream_id, perspective_)) {
// Nothing to do for outgoing streams.
return;
}
@@ -131,13 +132,14 @@
"limit ("
<< outgoing_max_streams_ << ")";
QuicStreamId id = next_outgoing_stream_id_;
- next_outgoing_stream_id_ += QuicUtils::StreamIdDelta(transport_version_);
+ next_outgoing_stream_id_ +=
+ QuicUtils::StreamIdDelta(version_.transport_version);
outgoing_stream_count_++;
return id;
}
bool QuicStreamIdManager::CanOpenNextOutgoingStream() const {
- DCHECK(VersionHasIetfQuicFrames(transport_version_));
+ DCHECK(VersionHasIetfQuicFrames(version_.transport_version));
return outgoing_stream_count_ < outgoing_max_streams_;
}
@@ -146,7 +148,8 @@
std::string* error_details) {
// |stream_id| must be an incoming stream of the right directionality.
DCHECK_NE(QuicUtils::IsBidirectionalStreamId(stream_id), unidirectional_);
- DCHECK_NE(QuicUtils::IsServerInitiatedStreamId(transport_version_, stream_id),
+ DCHECK_NE(QuicUtils::IsServerInitiatedStreamId(version_.transport_version,
+ stream_id),
perspective_ == Perspective::IS_SERVER);
if (available_streams_.erase(stream_id) == 1) {
// stream_id is available.
@@ -154,15 +157,16 @@
}
if (largest_peer_created_stream_id_ !=
- QuicUtils::GetInvalidStreamId(transport_version_)) {
+ QuicUtils::GetInvalidStreamId(version_.transport_version)) {
DCHECK_GT(stream_id, largest_peer_created_stream_id_);
}
// Calculate increment of incoming_stream_count_ by creating stream_id.
- const QuicStreamCount delta = QuicUtils::StreamIdDelta(transport_version_);
+ const QuicStreamCount delta =
+ QuicUtils::StreamIdDelta(version_.transport_version);
const QuicStreamId least_new_stream_id =
largest_peer_created_stream_id_ ==
- QuicUtils::GetInvalidStreamId(transport_version_)
+ QuicUtils::GetInvalidStreamId(version_.transport_version)
? GetFirstIncomingStreamId()
: largest_peer_created_stream_id_ + delta;
const QuicStreamCount stream_count_increment =
@@ -190,45 +194,35 @@
bool QuicStreamIdManager::IsAvailableStream(QuicStreamId id) const {
DCHECK_NE(QuicUtils::IsBidirectionalStreamId(id), unidirectional_);
- if (!IsIncomingStream(id)) {
+ if (QuicUtils::IsOutgoingStreamId(version_, id, perspective_)) {
// Stream IDs under next_ougoing_stream_id_ are either open or previously
// open but now closed.
return id >= next_outgoing_stream_id_;
}
// For peer created streams, we also need to consider available streams.
return largest_peer_created_stream_id_ ==
- QuicUtils::GetInvalidStreamId(transport_version_) ||
+ QuicUtils::GetInvalidStreamId(version_.transport_version) ||
id > largest_peer_created_stream_id_ ||
QuicContainsKey(available_streams_, id);
}
-bool QuicStreamIdManager::IsIncomingStream(QuicStreamId id) const {
- DCHECK_NE(QuicUtils::IsBidirectionalStreamId(id), unidirectional_);
- // The 0x1 bit in the stream id indicates whether the stream id is
- // server- or client- initiated. Next_OUTGOING_stream_id_ has that bit
- // set based on whether this node is a server or client. Thus, if the stream
- // id in question has the 0x1 bit set opposite of next_OUTGOING_stream_id_,
- // then that stream id is incoming -- it is for streams initiated by the peer.
- return (id & 0x1) != (next_outgoing_stream_id_ & 0x1);
-}
-
QuicStreamId QuicStreamIdManager::GetFirstOutgoingStreamId() const {
return (unidirectional_) ? QuicUtils::GetFirstUnidirectionalStreamId(
- transport_version_, perspective_)
+ version_.transport_version, perspective_)
: QuicUtils::GetFirstBidirectionalStreamId(
- transport_version_, perspective_);
+ version_.transport_version, perspective_);
}
QuicStreamId QuicStreamIdManager::GetFirstIncomingStreamId() const {
return (unidirectional_) ? QuicUtils::GetFirstUnidirectionalStreamId(
- transport_version_,
+ version_.transport_version,
QuicUtils::InvertPerspective(perspective_))
: QuicUtils::GetFirstBidirectionalStreamId(
- transport_version_,
+ version_.transport_version,
QuicUtils::InvertPerspective(perspective_));
}
-QuicStreamCount QuicStreamIdManager::available_incoming_streams() {
+QuicStreamCount QuicStreamIdManager::available_incoming_streams() const {
return incoming_advertised_max_streams_ - incoming_stream_count_;
}
diff --git a/quic/core/quic_stream_id_manager.h b/quic/core/quic_stream_id_manager.h
index cf1e81e..bdcb7cb 100644
--- a/quic/core/quic_stream_id_manager.h
+++ b/quic/core/quic_stream_id_manager.h
@@ -32,7 +32,7 @@
QuicStreamIdManager(DelegateInterface* delegate,
bool unidirectional,
Perspective perspective,
- QuicTransportVersion transport_version,
+ ParsedQuicVersion version,
QuicStreamCount max_allowed_outgoing_streams,
QuicStreamCount max_allowed_incoming_streams);
@@ -92,9 +92,6 @@
// Returns true if |id| is still available.
bool IsAvailableStream(QuicStreamId id) const;
- // Return true if given stream is peer initiated.
- bool IsIncomingStream(QuicStreamId id) const;
-
QuicStreamCount incoming_initial_max_open_streams() const {
return incoming_initial_max_open_streams_;
}
@@ -104,7 +101,7 @@
}
// Number of streams that the peer believes that it can still create.
- QuicStreamCount available_incoming_streams();
+ QuicStreamCount available_incoming_streams() const;
QuicStreamId largest_peer_created_stream_id() const {
return largest_peer_created_stream_id_;
@@ -117,7 +114,9 @@
QuicStreamCount incoming_advertised_max_streams() const {
return incoming_advertised_max_streams_;
}
- QuicStreamCount outgoing_stream_count() { return outgoing_stream_count_; }
+ QuicStreamCount outgoing_stream_count() const {
+ return outgoing_stream_count_;
+ }
private:
friend class test::QuicSessionPeer;
@@ -143,8 +142,8 @@
// Is this manager a client or a server.
const Perspective perspective_;
- // Transport version used for this manager.
- const QuicTransportVersion transport_version_;
+ // QUIC version used for this manager.
+ const ParsedQuicVersion version_;
// The number of streams that this node can initiate.
// This limit is first set when config is negotiated, but may be updated upon
diff --git a/quic/core/quic_stream_id_manager_test.cc b/quic/core/quic_stream_id_manager_test.cc
index a5895ff..cf7129c 100644
--- a/quic/core/quic_stream_id_manager_test.cc
+++ b/quic/core/quic_stream_id_manager_test.cc
@@ -71,7 +71,7 @@
: stream_id_manager_(&delegate_,
IsUnidirectional(),
perspective(),
- transport_version(),
+ GetParam().version,
0,
kDefaultMaxStreamsPerConnection) {
DCHECK(VersionHasIetfQuicFrames(transport_version()));
diff --git a/quic/core/uber_quic_stream_id_manager.cc b/quic/core/uber_quic_stream_id_manager.cc
index daa5630..6951b2c 100644
--- a/quic/core/uber_quic_stream_id_manager.cc
+++ b/quic/core/uber_quic_stream_id_manager.cc
@@ -20,14 +20,14 @@
: bidirectional_stream_id_manager_(delegate,
/*unidirectional=*/false,
perspective,
- version.transport_version,
+ version,
max_open_outgoing_bidirectional_streams,
max_open_incoming_bidirectional_streams),
unidirectional_stream_id_manager_(
delegate,
/*unidirectional=*/true,
perspective,
- version.transport_version,
+ version,
max_open_outgoing_unidirectional_streams,
max_open_incoming_unidirectional_streams) {}
@@ -96,13 +96,6 @@
error_details);
}
-bool UberQuicStreamIdManager::IsIncomingStream(QuicStreamId id) const {
- if (QuicUtils::IsBidirectionalStreamId(id)) {
- return bidirectional_stream_id_manager_.IsIncomingStream(id);
- }
- return unidirectional_stream_id_manager_.IsIncomingStream(id);
-}
-
bool UberQuicStreamIdManager::IsAvailableStream(QuicStreamId id) const {
if (QuicUtils::IsBidirectionalStreamId(id)) {
return bidirectional_stream_id_manager_.IsAvailableStream(id);
diff --git a/quic/core/uber_quic_stream_id_manager.h b/quic/core/uber_quic_stream_id_manager.h
index d3f374a..b1fc126 100644
--- a/quic/core/uber_quic_stream_id_manager.h
+++ b/quic/core/uber_quic_stream_id_manager.h
@@ -66,9 +66,6 @@
bool OnStreamsBlockedFrame(const QuicStreamsBlockedFrame& frame,
std::string* error_details);
- // Return true if |id| is peer initiated.
- bool IsIncomingStream(QuicStreamId id) const;
-
// Returns true if |id| is still available.
bool IsAvailableStream(QuicStreamId id) const;
diff --git a/quic/core/uber_quic_stream_id_manager_test.cc b/quic/core/uber_quic_stream_id_manager_test.cc
index 1590f6e..6fe8363 100644
--- a/quic/core/uber_quic_stream_id_manager_test.cc
+++ b/quic/core/uber_quic_stream_id_manager_test.cc
@@ -300,17 +300,6 @@
EXPECT_TRUE(manager_.OnStreamsBlockedFrame(frame, nullptr));
}
-TEST_P(UberQuicStreamIdManagerTest, IsIncomingStream) {
- EXPECT_TRUE(
- manager_.IsIncomingStream(GetNthPeerInitiatedBidirectionalStreamId(0)));
- EXPECT_TRUE(
- manager_.IsIncomingStream(GetNthPeerInitiatedUnidirectionalStreamId(0)));
- EXPECT_FALSE(
- manager_.IsIncomingStream(GetNthSelfInitiatedBidirectionalStreamId(0)));
- EXPECT_FALSE(
- manager_.IsIncomingStream(GetNthSelfInitiatedUnidirectionalStreamId(0)));
-}
-
TEST_P(UberQuicStreamIdManagerTest, SetMaxOpenOutgoingStreamsPlusFrame) {
const size_t kNumMaxOutgoingStream = 123;
// Set the uni- and bi- directional limits to different values to ensure