Renumber QUIC streams when there is no crypto stream
This also modifies spdy::PriorityWriteScheduler to allow using a different
value than kHttp2RootStreamId as the root stream ID.
gfe-relnote: Renumber QUIC streams, protected by QUIC_VERSION_99
PiperOrigin-RevId: 248609263
Change-Id: I5e83b5950253068996df830694ac55e424d7aa54
diff --git a/spdy/core/priority_write_scheduler.h b/spdy/core/priority_write_scheduler.h
index b02d463..067153b 100644
--- a/spdy/core/priority_write_scheduler.h
+++ b/spdy/core/priority_write_scheduler.h
@@ -45,7 +45,9 @@
using typename WriteScheduler<StreamIdType>::StreamPrecedenceType;
// Creates scheduler with no streams.
- PriorityWriteScheduler() = default;
+ PriorityWriteScheduler() : PriorityWriteScheduler(kHttp2RootStreamId) {}
+ explicit PriorityWriteScheduler(StreamIdType root_stream_id)
+ : root_stream_id_(root_stream_id) {}
void RegisterStream(StreamIdType stream_id,
const StreamPrecedenceType& precedence) override {
@@ -55,12 +57,12 @@
// parent_id not used here, but may as well validate it. However,
// parent_id may legitimately not be registered yet--see b/15676312.
StreamIdType parent_id = precedence.parent_id();
- SPDY_DVLOG_IF(
- 1, parent_id != kHttp2RootStreamId && !StreamRegistered(parent_id))
+ SPDY_DVLOG_IF(1,
+ parent_id != root_stream_id_ && !StreamRegistered(parent_id))
<< "Parent stream " << parent_id << " not registered";
- if (stream_id == kHttp2RootStreamId) {
- SPDY_BUG << "Stream " << kHttp2RootStreamId << " already registered";
+ if (stream_id == root_stream_id_) {
+ SPDY_BUG << "Stream " << root_stream_id_ << " already registered";
return;
}
StreamInfo stream_info = {precedence.spdy3_priority(), stream_id, false};
@@ -106,8 +108,8 @@
// parent_id not used here, but may as well validate it. However,
// parent_id may legitimately not be registered yet--see b/15676312.
StreamIdType parent_id = precedence.parent_id();
- SPDY_DVLOG_IF(
- 1, parent_id != kHttp2RootStreamId && !StreamRegistered(parent_id))
+ SPDY_DVLOG_IF(1,
+ parent_id != root_stream_id_ && !StreamRegistered(parent_id))
<< "Parent stream " << parent_id << " not registered";
auto it = stream_infos_.find(stream_id);
@@ -315,6 +317,7 @@
PriorityInfo priority_infos_[kV3LowestPriority + 1];
// StreamInfos for all registered streams.
StreamInfoMap stream_infos_;
+ StreamIdType root_stream_id_;
};
} // namespace spdy